Nordic nRF5 SDK和softdevice 介紹和版本對應

 

SDK和Softdevice的區別是什麼?怎麼選擇SDK和softdevice版本?芯片,SDK和softdevice有沒有版本兼容問題?怎麼理解SDK目錄結構?SDK幫助文檔在哪裏?Softdevice幫助文檔在哪裏?如何選擇某個SDK例子 (example) 以開始我們的BLE開發之旅?本文將對以上問題進行解答。

Nordic目前有2套完全獨立的SDK:nRF5 SDK和nRF Connect SDK。一般來說,開發nRF51/52產品推薦使用nRF5 SDK,開發nRF91/nRF53等新產品推薦使用nRF connect SDK。本文將對nRF5 SDK進行介紹,從形式上來說,nRF5 SDK其實就是一個產品壓縮包,如下所示,其官網下載地址爲:https://www.nordicsemi.com/Software-and-Tools/Software/nRF5-SDK/Download#infotabs

 

 除了nRF5 SDK,Nordic還針對某些特殊應用領域推出了一些專門的SDK,這些SDK和nRF5 SDK採用了相同的軟件架構,相同的驅動和庫,以及相同的編碼風格。對開發者來說,只要熟悉了nRF5 SDK,這些特殊SDK上手也會比較快。Nordic提供瞭如下種類的特殊SDK:

  1. nRF5 SDK for Mesh,用於開發藍牙Mesh應用
  2. nRF5 SDK for Thread and ZigBee,用於開發ZigBee應用或者Thread應用
  3. nRF SDK HK,用於開發蘋果homekit應用
  4. Thingy SDK,用於開發Nordic Thingy傳感器套件
  5. nRFready Smart Remote 3,用於開發藍牙語音電視機遙控器
  6. nRFready Desktop 2,用於開發藍牙或者2.4G的無線鍵盤和鼠標

如果你的應用是上面6種垂直應用,那麼建議你選擇上面的SDK,否則一律推薦使用nRF5 SDK。下面將對nRF5 SDK進行闡述。

1. nRF5 SDK和Softdevice概述

1)        nRF5 SDK是Nordic nRF51/52系列產品軟件開發環境,Softdevice是Nordic藍牙協議棧的名稱,爲了方便用戶的使用,每一個版本的SDK都包含了該版本支持的所有softdevice,請到SDK根目錄\components\softdevice目錄查看具體支持的softdevice類別和版本。SDK官網下載地址爲:https://www.nordicsemi.com/Software-and-Tools/Software/nRF5-SDK/Download#infotabs

2)        nRF5 SDK版本編號,nRF51 SDK v9.0.0,nRF51 SDK v10.0.0,nRF5 SDK v11.0.0, nRF5 SDK v12.0.0 …目前最新版是nRF5 SDK v16.0.0。SDK9/10只支持nRF51系列芯片,SDK11/12同時支持nRF51和nRF52系列芯片,而SDK13/14/15/16只支持nRF52系列芯片。這裏順帶提一下,如果你需要使用多個版本nRF5 SDK,那麼就會同時用到多個device family pack(nRF MDK),請按照低版本先裝高版本後裝的順序來安裝(如果SDK例程報device family pack錯誤,請先完全卸載之前的device family pack,再按照由低到高的順序重裝一遍所有的pack)

3)        Nordic一般推薦使用最新版的SDK來開發你的應用,因爲其功能最強大,考慮最周全,可靠性最好。比如nRF51系列,推薦使用SDK12.3.0(12.3.0已經是nRF51能支持的最高版本SDK了),nRF52系列推薦使用SDK16.0.0。但是最新版的SDK佔用的Flash資源和RAM資源比較多,而且新版SDK爲了兼容各種情況設計得也比較複雜。爲了節省資源或者讓應用看起來簡潔,客戶也可以使用某些老版本的SDK。對於老用戶來說,要不要升級SDK,是一個老生常談的問題,我的建議是:測試爲王,只要你的應用測試下來沒有任何問題,你的SDK就是穩定和可靠的,就不需要升級SDK。當然,如果你要加入新SDK的功能和特性,那麼就需要升級SDK了。請打開SDK根目錄\documentation\release_notes.txt以查看最新版SDK的新功能和新特性。

4)        Softdevice命名規則一。Softdevice包括兩種底層協議棧:BLE和ANT,BLE包括兩種角色:central(又稱master)和peripheral(又稱slave),爲此需要給這些不同類型的協議棧進行命名區分。協議棧命名格式爲Sxyz,其中

  • x – 表示協議棧的類型,1表示BLE協議棧,2表示ANT協議棧,3表示同時支持BLE和ANT
  • y – 表示BLE角色,1表示從設備,2表示主設備,3表示同時支持主設備和從設備
  • z – 表示芯片類型,0表示nRF51系列,2表示nRF52系列
  • 比如S110,表示只支持從設備模式的nRF51 BLE協議棧 
  • 比如S130,表示既支持從設備模式又支持主設備模式的nRF51 BLE協議棧
  • 比如S132,表示既支持從設備模式又支持主設備模式的nRF52 BLE協議棧
  • 比如S212,表示nRF52 ANT協議棧
  • 比如S332,表示nRF52既支持BLE協議棧又支持ANT協議棧,而且BLE協議棧既支持從設備模式又支持主設備模式

5)        Softdevice命名規則二。大體上跟命名規則1相同,但是協議棧編號最後2位跟芯片型號一樣,比如S140,代表這個協議棧專門用於nRF52840。由於52840 Flash空間很大,沒有必要做各種細分的協議棧,S140協議棧是一個大而全的協議棧,包含藍牙所有功能。

6)        Softdevice版本編號,從1.0.0開始編號,然後2.0.0,3.0.0,…S110最新版本是8.0.0,S130最新版本是2.0.1,S132/S140/S112最新版本是7.0.0。

7)        SDK和softdevice兼容性問題。不要查看兼容性表格,直接打開SDK,直接使用SDK裏面的softdevice,肯定沒有問題。比如S132 在SDK如下文件夾中:

有時候你在Nordic官網下載SDK的時候,比如SDK15.2.0,官網會自動綁定一個比SDK安裝目錄裏面自帶的協議棧版本更高版本的協議棧,如下圖所示:

 

那麼這個時候推薦使用該綁定的高版本協議棧,原因如下:

再完美的協議棧難免也會有bug,此時Nordic會把bug修復的協議棧單獨發佈出來,比如nRF5 SDK 15.2.0自帶的S140協議棧版本爲6.1.0,一般來說,直接用這個版本的協議棧就可以了,但是這個版本的協議棧的主機模式有一個小bug,爲此Nordic單獨發佈了6.1.1版S140協議棧,此時用戶就需要去官網單獨下載這個最新版的協議棧了。記住,大家只需要下載版本號數字最後一位有變化的即可,比如6.1.1相比6.1.0,最後一個數字有升級,那麼推薦大家直接下載下來,然後覆蓋原來老的協議棧即可。如果版本號第1個數字就有變化,意味着兩個版本的協議棧是不兼容的,此時一般SDK也會跟着升級的,比如7.0.0相比6.1.0,這個就屬於大升級了,此時建議直接使用與之配套的最新版本SDK來進行開發,而不是把協議棧進行簡單覆蓋。(當然,你也可以自己把7.0.0的協議棧移植到老SDK中,這個稍微麻煩一些,不過Nordic也有相關移植文檔供大家參考)。如下列出了常用協議棧的發佈頁面:

 

8)        芯片版本和SDK版本兼容性問題。如果你使用的是Nordic最新版芯片,就沒有這個所謂的兼容性問題,直接下載最新版本的SDK即可。如果你不幸還有Nordic老版本芯片庫存,那麼只能使用某些老版本的SDK,具體請參考兼容性表格。

之所以會有這個兼容性問題,是因爲新版本SDK是爲新版本芯片服務的,也就是說新版本SDK默認芯片以前的bug已經修復了,所以新版本SDK不會包含老版本芯片的workaround(補丁),導致老版本芯片運行在最新版本SDK上會有一些問題。

2. nRF5 SDK目錄結構解讀

欲下載nRF5 SDK,請參考“Nordic nRF51/nRF52開發環境搭建

以SDK12.3.0爲例,nRF5 SDK目錄結構如下所示:

 

 

-components. 該目錄包含了Nordic自己開發的SDK源代碼,切記:在產品開發過程中,不要去修改該目錄下的任何文件!components目錄結構如下所示:

 

 

這裏特別說明一下,Nordic現在有2套芯片外設驅動,SDK14及以前版本SDK使用nrf_drv老版本外設驅動(又稱legacy),SDK15使用nrfx新版本外設驅動(nrfx驅動同時兼容nRF5 SDK和nRF Connect SDK),在SDK15中,nrfx驅動源代碼在如下目錄:

 

 

-examples. 該目錄包含了豐富的應用示例,不僅包含BLE應用示例,也包含每個外設如何使用的示例,還包含bootloader示例代碼。一般來說,開發過程中碰到的大部分問題,都可以在這個目錄找到示例。examples目錄結構如下所示:

 

 

客戶用得最多的兩個目錄是:\ble_peripheral和\peripheral。\ble_peripheral目錄包含了BLE作爲從模式的應用示例,而\peripheral包含了所有外設應用示例。\ble_peripheral目錄結構如下所示:

 

 

\peripheral目錄結構如下所示:

 

 

在Nordic SDK中,經常會碰到deprecated和experimental目錄,他們的作用如下:

\deprecated,該目錄的內容已被捨棄,並有新版本來替代他們。但爲了兼容老產品,SDK還是將其保留下來,比如如下目錄:components\drivers_nrf\twi_master\deprecated,如果你是新用戶,切記不要使用\deprecated目錄下的API。

\experimental 。SDK不斷的有new feature/new example出現,有些new feature/new example推出來不久,還沒有經過市場大規模驗證,對此Nordic會在這些new feature/new example前面加一個前綴:experimental,比如:examples\ble_peripheral\experimental_ble_app_buttonless_dfu,碰到experimental一定要小心,裏面有可能有bug,希望用戶自己進行充分測試,以保證產品的質量。

3. nRF5 SDK和softdevice幫助文檔

1)       不管是SDK還是softdevice自有 API,建議首先查看SDK自帶的API說明,記住:API說明一般都放在頭文件中,而不是.c文件中,裏面有該API詳細說明和使用注意事項。比如softdevice_enable() API相關說明在頭文件softdevice_handler.h中:

 

再比如sd_ble_gatts_hvx API說明文檔在頭文件ble_gatts.h中:

 

再比如ble_advertising_init API說明文檔在ble_advertising.h中:

 

2)        Softdevice還有一份專門的spec,來闡述softdevice工作原理,資源佔用情況,性能參數,使用注意事項等,建議大家一定要閱讀該份spec

 

3)       SDK還有在線幫助文檔和離線幫助文檔,兩者一模一樣,離線幫助文檔就是通過在線幫助文檔生成的,以方便網絡不好的用戶使用。你可以根據自己的情況選擇其中一份幫助文檔即可,幫助文檔鏈接:https://infocenter.nordicsemi.com/index.jsp?topic=%2Fcom.nordic.infocenter.sdk5.v15.3.0%2Fexamples.html&cp=5_1_4

  

以SDK15.3.0在線幫助文檔爲例,其主界面如下所示。展開幫助文檔左邊的目錄,你會發現:幫助文檔目錄層級跟SDK目錄層級是一一對應的。

 

 

 

因此對SDK有任何疑問,可以直接去查對應的幫助文檔說明,比如如果你想了解nRF5_SDK安裝目錄\examples\peripheral\spi這個例子是幹什麼的,直接找到幫助文檔對應的條目:https://infocenter.nordicsemi.com/index.jsp?topic=%2Fcom.nordic.infocenter.sdk5.v15.3.0%2Fspi_master_example.html&cp=5_1_4_6_37,你就會明白這是一個告訴你如何使用SPI master的例子。再比如你想知道nRF5_SDK_15.2.0_9412b96\examples\dtm\direct_test_mode這個例子是不是講如何進行DTM測試的,找到幫助文檔相關條目說明:https://infocenter.nordicsemi.com/index.jsp?topic=%2Fcom.nordic.infocenter.sdk5.v15.3.0%2Fble_sdk_app_dtm_serial.html&cp=5_1_4_5,你就會知道自己的猜測是對的。

 

4. 選擇一個SDK 例子(example)以開始你的BLE開發之旅

Nordic nRF5 SDK包含了豐富的應用實例,一般來說,我們的開發都是基於其中某一個例子來開始的 。所有example都包含在SDK根目錄\examples目錄下,

其在線幫助文檔鏈接爲:https://infocenter.nordicsemi.com/index.jsp?topic=%2Fcom.nordic.infocenter.sdk5.v15.3.0%2Fexamples.html&cp=5_1_4

比如你想了解” nRF5_SDK安裝目錄\examples\ble_peripheral\ble_app_gls”這個例子是幹什麼的,找到該例子對應的幫助文檔說明:https://infocenter.nordicsemi.com/index.jsp?topic=%2Fcom.nordic.infocenter.sdk5.v15.3.0%2Fble_sdk_app_gls.html&cp=5_1_4_2_2_11,通過查看例子說明,你會發現這是一個標準的血糖儀例子,裏面使用了bonding,而且bonding的時候,需要輸入PIN碼,並支持LESC模式。看完這個例子說明,你就大概明白這個例子跟你的應用接不接近,如果你也需要使用帶PIN碼的bonding,那麼就可以選擇該例子作爲基礎來開始你的開發。 

再比如nRF5_SDK安裝目錄\examples\ble_peripheral\ble_app_uart,例子說明鏈接爲:https://infocenter.nordicsemi.com/index.jsp?topic=%2Fcom.nordic.infocenter.sdk5.v15.3.0%2Fble_sdk_app_nus_eval.html&cp=5_1_4_2_2_24

通過查看說明文檔,我們知道這個例子是把藍牙作爲透傳來使用的,如果你的應用就是把藍牙作爲一個透傳模塊來使用,那麼你可以以這個例子爲基礎來開始你的開發。 

通過一個一個例子的查看,相信你馬上可以找到你需要的例子,然後在此基礎上,開始你的BLE開發之旅。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章