SDK和Softdevice的區(qū)別是什么?怎么選擇SDK和softdevice版本?芯片,SDK和softdevice有沒有版本兼容問題?怎么理解SDK目錄結構?SDK幫助文檔在哪里?Softdevice幫助文檔在哪里?如何選擇某個SDK例子 (example) 以開始我們的BLE開發(fā)之旅?本文將對以上問題進行解答。
Nordic目前有2套完全獨立的SDK:nRF5 SDK和nRF Connect SDK。一般來說,開發(fā)nRF51/52產品推薦使用nRF5 SDK,開發(fā)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采用了相同的軟件架構,相同的驅動和庫,以及相同的編碼風格。對開發(fā)者來說,只要熟悉了nRF5 SDK,這些特殊SDK上手也會比較快。Nordic提供了如下種類的特殊SDK:
如果你的應用是上面6種垂直應用,那么建議你選擇上面的SDK,否則一律推薦使用nRF5 SDK。下面將對nRF5 SDK進行闡述。
1) nRF5 SDK是Nordic nRF51/52系列產品軟件開發(fā)環(huán)境,Softdevice是Nordic藍牙協(xié)議棧的名稱,為了方便用戶的使用,每一個版本的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來開發(fā)你的應用,因為其功能最強大,考慮最周全,可靠性最好。比如nRF51系列,推薦使用SDK12.3.0(12.3.0已經是nRF51能支持的最高版本SDK了),nRF52系列推薦使用SDK16.0.0。但是最新版的SDK占用的Flash資源和RAM資源比較多,而且新版SDK為了兼容各種情況設計得也比較復雜。為了節(jié)省資源或者讓應用看起來簡潔,客戶也可以使用某些老版本的SDK。對于老用戶來說,要不要升級SDK,是一個老生常談的問題,我的建議是:測試為王,只要你的應用測試下來沒有任何問題,你的SDK就是穩(wěn)定和可靠的,就不需要升級SDK。當然,如果你要加入新SDK的功能和特性,那么就需要升級SDK了。請打開SDK根目錄\documentation\release_notes.txt以查看最新版SDK的新功能和新特性。
4) Softdevice命名規(guī)則一。Softdevice包括兩種底層協(xié)議棧:BLE和ANT,BLE包括兩種角色:central(又稱master)和peripheral(又稱slave),為此需要給這些不同類型的協(xié)議棧進行命名區(qū)分。協(xié)議棧命名格式為Sxyz,其中
5) Softdevice命名規(guī)則二。大體上跟命名規(guī)則1相同,但是協(xié)議棧編號最后2位跟芯片型號一樣,比如S140,代表這個協(xié)議棧專門用于nRF52840。由于52840 Flash空間很大,沒有必要做各種細分的協(xié)議棧,S140協(xié)議棧是一個大而全的協(xié)議棧,包含藍牙所有功能。
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安裝目錄里面自帶的協(xié)議棧版本更高版本的協(xié)議棧,如下圖所示:
那么這個時候推薦使用該綁定的高版本協(xié)議棧,原因如下:
再完美的協(xié)議棧難免也會有bug,此時Nordic會把bug修復的協(xié)議棧單獨發(fā)布出來,比如nRF5 SDK 15.2.0自帶的S140協(xié)議棧版本為6.1.0,一般來說,直接用這個版本的協(xié)議棧就可以了,但是這個版本的協(xié)議棧的主機模式有一個小bug,為此Nordic單獨發(fā)布了6.1.1版S140協(xié)議棧,此時用戶就需要去官網單獨下載這個最新版的協(xié)議棧了。記住,大家只需要下載版本號數字最后一位有變化的即可,比如6.1.1相比6.1.0,最后一個數字有升級,那么推薦大家直接下載下來,然后覆蓋原來老的協(xié)議棧即可。如果版本號第1個數字就有變化,意味著兩個版本的協(xié)議棧是不兼容的,此時一般SDK也會跟著升級的,比如7.0.0相比6.1.0,這個就屬于大升級了,此時建議直接使用與之配套的最新版本SDK來進行開發(fā),而不是把協(xié)議棧進行簡單覆蓋。(當然,你也可以自己把7.0.0的協(xié)議棧移植到老SDK中,這個稍微麻煩一些,不過Nordic也有相關移植文檔供大家參考)。如下列出了常用協(xié)議棧的發(fā)布頁面:
8) 芯片版本和SDK版本兼容性問題。如果你使用的是Nordic最新版芯片,就沒有這個所謂的兼容性問題,直接下載最新版本的SDK即可。如果你不幸還有Nordic老版本芯片庫存,那么只能使用某些老版本的SDK,具體請參考兼容性表格。
之所以會有這個兼容性問題,是因為新版本SDK是為新版本芯片服務的,也就是說新版本SDK默認芯片以前的bug已經修復了,所以新版本SDK不會包含老版本芯片的workaround(補?。?,導致老版本芯片運行在最新版本SDK上會有一些問題。
欲下載nRF5 SDK,請參考“Nordic nRF51/nRF52開發(fā)環(huán)境搭建”
以SDK12.3.0為例,nRF5 SDK目錄結構如下所示:
-components. 該目錄包含了Nordic自己開發(fā)的SDK源代碼,切記:在產品開發(fā)過程中,不要去修改該目錄下的任何文件!components目錄結構如下所示:
這里特別說明一下,Nordic現在有2套芯片外設驅動,SDK14及以前版本SDK使用nrf_drv老版本外設驅動(又稱legacy),SDK15使用nrfx新版本外設驅動(nrfx驅動同時兼容nRF5 SDK和nRF Connect SDK),在SDK15中,nrfx驅動源代碼在如下目錄:
-examples. 該目錄包含了豐富的應用示例,不僅包含BLE應用示例,也包含每個外設如何使用的示例,還包含bootloader示例代碼。一般來說,開發(fā)過程中碰到的大部分問題,都可以在這個目錄找到示例。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推出來不久,還沒有經過市場大規(guī)模驗證,對此Nordic會在這些new feature/new example前面加一個前綴:experimental,比如:examples\ble_peripheral\experimental_ble_app_buttonless_dfu,碰到experimental一定要小心,里面有可能有bug,希望用戶自己進行充分測試,以保證產品的質量。
1) 不管是SDK還是softdevice自有 API,建議首先查看SDK自帶的API說明,記?。篈PI說明一般都放在頭文件中,而不是.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在線幫助文檔為例,其主界面如下所示。展開幫助文檔左邊的目錄,你會發(fā)現:幫助文檔目錄層級跟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,你就會知道自己的猜測是對的。
Nordic nRF5 SDK包含了豐富的應用實例,一般來說,我們的開發(fā)都是基于其中某一個例子來開始的 。所有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,通過查看例子說明,你會發(fā)現這是一個標準的血糖儀例子,里面使用了bonding,而且bonding的時候,需要輸入PIN碼,并支持LESC模式??赐赀@個例子說明,你就大概明白這個例子跟你的應用接不接近,如果你也需要使用帶PIN碼的bonding,那么就可以選擇該例子作為基礎來開始你的開發(fā)。
再比如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,
通過查看說明文檔,我們知道這個例子是把藍牙作為透傳來使用的,如果你的應用就是把藍牙作為一個透傳模塊來使用,那么你可以以這個例子為基礎來開始你的開發(fā)。
通過一個一個例子的查看,相信你馬上可以找到你需要的例子,然后在此基礎上,開始你的BLE開發(fā)之旅。
聯(lián)系客服