前言
接觸過BLE的朋友,我想基本上都聽過Nordic吧,如果真有用過BLE的人沒聽說過這個品牌,那你很大可能性就是騙别人說你做過BLE開發。Nordic是挪威一家隻做2.4G頻段的無線通訊技術半導體晶片廠商,明年也就是2019年中旬也會推出量産級别兼晶片級的NB-IOT即nRF91,其目前在BLE行業中占據了百分之60以上的市場佔有率 (資料來源于Nordic官方) ,不得不說這樣的資料是相當恐怖的。當然了,Nordic的成功是有原因的,其BLE晶片出色的性能、完善的資料系統以及對工程師相當友好的開發社群等等都是廣大使用者有目共睹的。簡單地介紹完Nordic之後,接下來我們直接進入主題。
整體架構了解
不管是新手還是老鳥工程師,接觸到之前沒有用過的晶片,首先要做的就是去官方網站或者代理商擷取晶片相關的文檔進行查閱,進而為後面的晶片開發鋪路或者打下基礎。理所當然,對于Nordic 52840也是這樣,所有的資料均可在官方網站下載下傳得到,但是對從來沒有用過Nordic BLE晶片的人來說,肯定是一臉懵逼的,有的人可能在哪裡下載下傳到相關的文檔都不知道。大家莫慌,随我慢慢道來,但是我不會馬上就告訴你相關的文檔在哪裡下載下傳,因為寫這篇文章就是讓你初識Nordic 52840,假設直接就告訴你相關的文檔在哪裡,那麼你看了這篇文章就等于沒看。是以,要想知道如何開發這個晶片,就應該先看看這個晶片相關的架構。
記憶體布局
我們先來看看Nordic 52840的記憶體分布,如下圖所示
[外鍊圖檔轉存失敗(img-PArqkq6C-1565883107881)(https://raw.githubusercontent.com/xiaolongba/picture/master/bootloader_memory_nrf52.svg?sanitize=true)]
我們先暫時不要去理會上圖左右兩邊的标注,就單看中間的Nordic 52840的記憶體分布結構。由上圖可以知道,Nordic 52840是由以下幾個部分組成:
- MBR
- SoftDevice
- Application
- Bootloader
- MBR parameter storage
- Bootloader settings
那這時候問題來了,這些都是些啥雞巴玩意啊?兄弟,莫慌!聽哥徐徐道來(如果短時間看不明白,可以暫時忽略這些)。
-
MBR
MBR的全稱是Master Boot Record ,即主引導記錄的意思,其主要功能就是提供一個接口用于應用程式固件、協定棧或者Bootloader固件在系統内更新;
-
MBR parameter storage
具體的作用如下所示:
官方原文: This used to store the SD_MBR_COMMAND_COPY_BL or the SD_MBR_COMMAND_VECTOR_TABLE_BASE_SET command when resetting the IC. E.g. under a bootloader update. Also if reset or power is lost, the MBR will read the stored commands and continue the update process. Upon reset the MBR read the stored commands, which will not be erased before the update is finished. Seeing that there is a “copy bootloader” command, the MBR will check if the bootloader was successfully copied, if not, it will re-write the bootloader to the bootloader section. 譯文: 這用于當複位晶片時,存儲SD_MBR_COMMAND_COPY_BL或SD_MBR_COMMAND_VECTOR_TABLE_BASE_SET指令(例如,在更新bootloader時)。此外,如果重新開機或斷電,MBR将讀取存儲的指令并繼續更新過程。複位後,MBR讀取存儲的指令,在更新完成之前不會擦除這些指令。看到有一個“copy bootloader”指令,MBR将檢查bootloader是否被成功複制,如果沒有,它會将bootloader重新寫入flash中的bootloader空間
-
SoftDevice
這個就是Nordic的協定棧的統稱,其所有協定棧都叫SoftDevice,不同功能的協定棧通過代号來區分。例如,目前最新的BLE、Zigbee、Thread以及SIG Mesh四合一的協定棧就是S140,它是以16進制的形式提供的,首次使用時隻需直接下載下傳至flash中即可;
-
Application
我們平時所寫的程式就是儲存在這裡,包括使用者需要掉電保護的一此自定義資料也是儲存在這裡的;
-
Bootloader
Bootloader主要用于處理系統内的更新過程,具體作用如下所示
官方原文: The bootloader has full access to the SoftDevice API and can be implemented like any application that uses the SoftDevice. In particular, the bootloader can make use of the SoftDevice API for Bluetooth low energy communication. The bootloader is also responsible for keeping track of and verifying the integrity of the SoftDevice. If an unexpected reset occurs during an update of the SoftDevice, it is the responsibility of the bootloader to detect this and resume the update procedure. 譯文: bootloader可以完全通路SoftDevice API函數,并且可以像使用SoftDevice的任何應用程式中一樣實作同樣的功能。尤其是,bootloader可以利用SoftDevice API函數進行藍牙低功耗通信。 bootloader還負責跟蹤和驗證SoftDevice的完整性。 如果在更新SoftDevice期間發生意外重新開機,bootloader有責任檢測這種情況并重新開始更新過程。
-
Bootloader settings
具體作用如下所示:
官方原文: A bootloader settings page contains information about the current DFU process. In addition, it can contain information about the installed application and the firmware version. 譯文: bootloader設定頁包含目前空中更新程序的資訊。此外,還可能包含有應用程式和固件的版本資訊。
看完以上的介紹,估計大部分人都已經明白Nordic 52840的記憶體分布結構吧,那這個時候可能又有一個問題了,那這些組成部分到底各占用多大的空間呢?這也是普衆單片機工程師都很在意或者關心的東西,具體如下表格所示:
各組成部分 | 各組成部分占用的空間範圍 |
---|---|
Bootloader settings | 0x000F F000 - 0x0010 0000 (4 kB) |
MBR parameter storage | 0x000F E000 - 0x000F F000 (4 kB) |
Bootloader | 0x000F 8000 - 0x000F E000 (24 kB) |
Application area (incl. free space) | x0002 0000 - 0x000F 8000 (864 kB) |
SoftDevice | 0x0000 1000 - 0x0002 0000 (124 kB) |
Master Boot Record (MBR) | 0x0000 0000 - 0x0000 1000 (4 kB) |
注意:SoftDevice即協定棧的大小會根據版本不同而不同
如何選擇協定棧和SDK
通過記憶體布局中可以看出,我們主要關注SoftDevice和Application部分即可,但是Nordic的SoftDevice有好多版本,SDK也有好多版本,而且這兩者不能亂選擇,這樣就讓初學者會很容易限入窘境不知道哪個才适合他使用。其實,官方已經有一個映射表格說明這些了,具體如下表格所示:
nRF52840 IC revision | nRF5 SDK | S132 SD | S132 SDS | S140 SD | S140 SDS |
---|---|---|---|---|---|
Engineering A | 12.2.0 | 3.0.01 | 3.12 | - | - |
12.3.0 | |||||
13.0.0 | - | - | 5.0.0-2.alpha | ||
13.1.0 | |||||
14.0.0 | |||||
14.1.0 | |||||
14.2.0 | |||||
- | 5.0.0-3.alpha | ||||
6.0.0-6.alpha | |||||
Engineering B; Engineering C; 1 | 15.0.0 | 6.0.0 | 1.x |
從這個表格可以看到,不同版本的SDK不是都支援所有協定棧的。在這裡,我們隻需要檢視最後一行即可,即
-
SoftDevice
選擇S140版本
-
SDK
選擇15.0.0版本
-
其他
SDS全稱是SoftDevice Specification 即協定棧規格書
文檔下載下傳
說了這麼多,終于來到如何下載下傳開發所需的Nordic 52840相關文檔這一章節了,之是以在前面叨叨說那些内容,就是想讓初學者明白,官方的文檔有很多如果沒有一個整體地了解,那麼就會很容易稀裡糊塗地下載下傳一堆沒用的資料,而且下載下傳下來也不知道該看哪個,其實對于大部分開發者來說隻需要下載下傳如下幾個文檔就可以了,具體如下所示:
- Nordic 52840規格書
- Nordic 52840勘誤表
- Nordic 52840型号說明表(官方會不定期更新)
- Nordic 52820型号、SDK以及協定棧的映射表(官方會不定期更新)
- Nordic 52840協定棧
- Nordic 52840 BLE軟體開發包,即SDK
- Nordic 52840 Zigbee以及Thread軟體開發包,即SDK
- Nordic 52840 SIG Mesh軟體開發包,即SDK
其中,SDK包中均包含有API手冊,如果需要更多的文檔可以到官方的文檔中心下載下傳
最後
希望看過這篇文章的初學者能有所收獲,而期望各位大佬、大神以及磚家斧正,當然如果你想要購買Nordic 52840開發闆玩玩,也可以點選這裡。
最後
紅旭無線Github
紅旭無線技術交流論壇
本文原創,轉載請注明出處