SDK和Softdevice的區(qū)別是什么?怎么選擇SDK和softdevice版本?芯片,SDK和softdevice有沒(méi)有版本兼容問(wèn)題?怎么理解SDK目錄結(jié)構(gòu)?SDK幫助文檔在哪里?Softdevice幫助文檔在哪里?如何選擇某個(gè)SDK例子 (example) 以開(kāi)始我們的BLE開(kāi)發(fā)之旅?本文將對(duì)以上問(wèn)題進(jìn)行解答。
Nordic目前有2套完全獨(dú)立的SDK:nRF5 SDK和nRF Connect SDK。一般來(lái)說(shuō),開(kāi)發(fā)nRF51/52產(chǎn)品推薦使用nRF5 SDK,開(kāi)發(fā)nRF91/nRF53等新產(chǎn)品推薦使用nRF connect SDK。本文將對(duì)nRF5 SDK進(jìn)行介紹,從形式上來(lái)說(shuō),nRF5 SDK其實(shí)就是一個(gè)產(chǎn)品壓縮包,如下所示,其官網(wǎng)下載地址為:https://www.nordicsemi.com/Software-and-Tools/Software/nRF5-SDK/Download#infotabs。

除了nRF5 SDK,Nordic還針對(duì)某些特殊應(yīng)用領(lǐng)域推出了一些專門的SDK,這些SDK和nRF5 SDK采用了相同的軟件架構(gòu),相同的驅(qū)動(dòng)和庫(kù),以及相同的編碼風(fēng)格。對(duì)開(kāi)發(fā)者來(lái)說(shuō),只要熟悉了nRF5 SDK,這些特殊SDK上手也會(huì)比較快。Nordic提供了如下種類的特殊SDK:
nRF5 SDK for Mesh,用于開(kāi)發(fā)藍(lán)牙Mesh應(yīng)用
nRF5 SDK for Thread and ZigBee,用于開(kāi)發(fā)ZigBee應(yīng)用或者Thread應(yīng)用
nRF SDK HK,用于開(kāi)發(fā)蘋果homekit應(yīng)用
Thingy SDK,用于開(kāi)發(fā)Nordic Thingy傳感器套件
nRFready Smart Remote 3,用于開(kāi)發(fā)藍(lán)牙語(yǔ)音電視機(jī)遙控器
nRFready Desktop 2,用于開(kāi)發(fā)藍(lán)牙或者2.4G的無(wú)線鍵盤和鼠標(biāo)
如果你的應(yīng)用是上面6種垂直應(yīng)用,那么建議你選擇上面的SDK,否則一律推薦使用nRF5 SDK。下面將對(duì)nRF5 SDK進(jìn)行闡述。
1. nRF5 SDK和Softdevice概述
nRF5 SDK是Nordic nRF51/52系列產(chǎn)品軟件開(kāi)發(fā)環(huán)境,Softdevice是Nordic藍(lán)牙協(xié)議棧的名稱,為了方便用戶的使用,每一個(gè)版本的SDK都包含了該版本支持的所有softdevice,請(qǐng)到SDK根目錄componentssoftdevice目錄查看具體支持的softdevice類別和版本。SDK官網(wǎng)下載地址為:https://www.nordicsemi.com/Software-and-Tools/Software/nRF5-SDK/Download#infotabs。
nRF5 SDK版本編號(hào),nRF51 SDK v9.0.0,nRF51 SDK v10.0.0,nRF5 SDK v11.0.0, nRF5 SDK v12.0.0 …目前最新版是nRF5 SDK v17.1.0。SDK9/10只支持nRF51系列芯片,SDK11/12同時(shí)支持nRF51和nRF52系列芯片,而SDK13/14/15/16/17只支持nRF52系列芯片。這里順帶提一下,如果你需要使用多個(gè)版本nRF5 SDK,那么就會(huì)同時(shí)用到多個(gè)device family pack(nRF MDK),請(qǐng)按照低版本先裝高版本后裝的順序來(lái)安裝(如果SDK例程報(bào)device family pack錯(cuò)誤,請(qǐng)先完全卸載之前的device family pack,再按照由低到高的順序重裝一遍所有的pack)
Nordic一般推薦使用最新版的SDK來(lái)開(kāi)發(fā)你的應(yīng)用,因?yàn)槠涔δ茏顝?qiáng)大,考慮最周全,可靠性最好。比如nRF51系列,推薦使用SDK12.3.0(12.3.0已經(jīng)是nRF51能支持的最高版本SDK了),nRF52系列推薦使用SDK17.1.0。但是最新版的SDK占用的Flash資源和RAM資源比較多,而且新版SDK為了兼容各種情況設(shè)計(jì)得也比較復(fù)雜。為了節(jié)省資源或者讓應(yīng)用看起來(lái)簡(jiǎn)潔,客戶也可以使用某些老版本的SDK。對(duì)于老用戶來(lái)說(shuō),要不要升級(jí)SDK,是一個(gè)老生常談的問(wèn)題,我的建議是:測(cè)試為王,只要你的應(yīng)用測(cè)試下來(lái)沒(méi)有任何問(wèn)題,你的SDK就是穩(wěn)定和可靠的,就不需要升級(jí)SDK。當(dāng)然,如果你要加入新SDK的功能和特性,那么就需要升級(jí)SDK了。請(qǐng)打開(kāi)SDK根目錄documentationrelease_notes.txt以查看最新版SDK的新功能和新特性。
Softdevice命名規(guī)則一。Softdevice包括兩種底層協(xié)議棧:BLE和ANT,BLE包括兩種角色:central(又稱master)和peripheral(又稱slave),為此需要給這些不同類型的協(xié)議棧進(jìn)行命名區(qū)分。協(xié)議棧命名格式為Sxyz,其中
x – 表示協(xié)議棧的類型,1表示BLE協(xié)議棧,2表示ANT協(xié)議棧,3表示同時(shí)支持BLE和ANT
y – 表示BLE角色,1表示從設(shè)備,2表示主設(shè)備,3表示同時(shí)支持主設(shè)備和從設(shè)備
z – 表示芯片類型,0表示nRF51系列,2表示nRF52系列
比如S110,表示只支持從設(shè)備模式的nRF51 BLE協(xié)議棧
比如S130,表示既支持從設(shè)備模式又支持主設(shè)備模式的nRF51 BLE協(xié)議棧
比如S132,表示既支持從設(shè)備模式又支持主設(shè)備模式的nRF52 BLE協(xié)議棧
比如S212,表示nRF52 ANT協(xié)議棧
比如S332,表示nRF52既支持BLE協(xié)議棧又支持ANT協(xié)議棧,而且BLE協(xié)議棧既支持從設(shè)備模式又支持主設(shè)備模式
Softdevice命名規(guī)則二。大體上跟命名規(guī)則1相同,但是協(xié)議棧編號(hào)最后2位跟芯片型號(hào)一樣,比如S140,代表這個(gè)協(xié)議棧專門用于nRF52840。由于52840 Flash空間很大,沒(méi)有必要做各種細(xì)分的協(xié)議棧,S140協(xié)議棧是一個(gè)大而全的協(xié)議棧,包含藍(lán)牙所有功能。
Softdevice版本編號(hào),從1.0.0開(kāi)始編號(hào),然后2.0.0,3.0.0,…S110最新版本是8.0.0,S130最新版本是2.0.1,S132/S140/S112/S113最新版本是7.2.0。
SDK和softdevice兼容性問(wèn)題。不要查看兼容性表格,直接打開(kāi)SDK,直接使用SDK里面的softdevice,肯定沒(méi)有問(wèn)題。比如S132 在SDK如下文件夾中:

有時(shí)候你在Nordic官網(wǎng)下載SDK的時(shí)候,比如SDK15.2.0,官網(wǎng)會(huì)自動(dòng)綁定一個(gè)比SDK安裝目錄里面自帶的協(xié)議棧版本更高版本的協(xié)議棧,如下圖所示:

那么這個(gè)時(shí)候推薦使用該綁定的高版本協(xié)議棧,原因如下:
再完美的協(xié)議棧難免也會(huì)有bug,此時(shí)Nordic會(huì)把bug修復(fù)的協(xié)議棧單獨(dú)發(fā)布出來(lái),比如nRF5 SDK 15.2.0自帶的S140協(xié)議棧版本為6.1.0,一般來(lái)說(shuō),直接用這個(gè)版本的協(xié)議棧就可以了,但是這個(gè)版本的協(xié)議棧的主機(jī)模式有一個(gè)小bug,為此Nordic單獨(dú)發(fā)布了6.1.1版S140協(xié)議棧,此時(shí)用戶就需要去官網(wǎng)單獨(dú)下載這個(gè)最新版的協(xié)議棧了。記住,大家只需要下載版本號(hào)數(shù)字最后一位有變化的即可,比如6.1.1相比6.1.0,最后一個(gè)數(shù)字有升級(jí),那么推薦大家直接下載下來(lái),然后覆蓋原來(lái)老的協(xié)議棧即可。如果版本號(hào)第1個(gè)數(shù)字就有變化,意味著兩個(gè)版本的協(xié)議棧是不兼容的,此時(shí)一般SDK也會(huì)跟著升級(jí)的,比如7.0.0相比6.1.0,這個(gè)就屬于大升級(jí)了,此時(shí)建議直接使用與之配套的最新版本SDK來(lái)進(jìn)行開(kāi)發(fā),而不是把協(xié)議棧進(jìn)行簡(jiǎn)單覆蓋。(當(dāng)然,你也可以自己把7.0.0的協(xié)議棧移植到老SDK中,這個(gè)稍微麻煩一些,不過(guò)Nordic也有相關(guān)移植文檔供大家參考)。如下列出了常用協(xié)議棧的發(fā)布頁(yè)面:
S140協(xié)議棧最新版本查詢頁(yè)面:https://www.nordicsemi.com/Software-and-Tools/Software/S140/Download#infotabs
S132協(xié)議棧最新版本查詢頁(yè)面:https://www.nordicsemi.com/Software-and-Tools/Software/S132/Download#infotabs
其他類型協(xié)議棧,比如S130, S112,S110等,請(qǐng)按照上述方式自己去尋找相應(yīng)下載頁(yè)面。
芯片版本和SDK版本兼容性問(wèn)題。如果你使用的是Nordic最新版芯片,就沒(méi)有這個(gè)所謂的兼容性問(wèn)題,直接下載最新版本的SDK即可。如果你不幸還有Nordic老版本芯片庫(kù)存,那么只能使用某些老版本的SDK,具體請(qǐng)參考兼容性表格。
nRF52840兼容性表格:https://infocenter.nordicsemi.com/index.jsp?topic=%2Fcomp_matrix_nrf52840%2FCOMP%2Fnrf52840%2FnRF52840_ic_rev_sdk_sd_comp_matrix.html&cp=4_0_3_2
nRF52832兼容性表格:https://infocenter.nordicsemi.com/index.jsp?topic=%2Fcomp_matrix_nrf52832%2FCOMP%2Fnrf52832%2Fic_rev_sdk_sd_comp_matrix.html&cp=4_2_2_2
nRF52810兼容性表格:https://infocenter.nordicsemi.com/index.jsp?topic=%2Fcomp_matrix_nrf52810%2FCOMP%2Fnrf52810%2FnRF52810_ic_rev_sdk_sd_comp_matrix.html&cp=3_3_2_2
nRF52811兼容性表格:https://infocenter.nordicsemi.com/index.jsp?topic=%2Fcomp_matrix_nrf52811%2FCOMP%2Fnrf52811%2Fnrf52811_ic_rev_sdk_sd_comp_matrix.html&cp=3_2_2_2
之所以會(huì)有這個(gè)兼容性問(wèn)題,是因?yàn)樾掳姹維DK是為新版本芯片服務(wù)的,也就是說(shuō)新版本SDK默認(rèn)芯片以前的bug已經(jīng)修復(fù)了,所以新版本SDK不會(huì)包含老版本芯片的workaround(補(bǔ)丁),導(dǎo)致老版本芯片運(yùn)行在最新版本SDK上會(huì)有一些問(wèn)題。
2. nRF5 SDK目錄結(jié)構(gòu)解讀
欲下載nRF5 SDK,請(qǐng)參考“Nordic nRF51/nRF52開(kāi)發(fā)環(huán)境搭建”
以SDK12.3.0為例,nRF5 SDK目錄結(jié)構(gòu)如下所示:

-components. 該目錄包含了Nordic自己開(kāi)發(fā)的SDK源代碼,**切記:在產(chǎn)品開(kāi)發(fā)過(guò)程中,不要去修改該目錄下的任何文件!**components目錄結(jié)構(gòu)如下所示:

這里特別說(shuō)明一下,Nordic現(xiàn)在有2套芯片外設(shè)驅(qū)動(dòng),SDK14及以前版本SDK使用nrf_drv老版本外設(shè)驅(qū)動(dòng)(又稱legacy),SDK15使用nrfx新版本外設(shè)驅(qū)動(dòng)(nrfx驅(qū)動(dòng)同時(shí)兼容nRF5 SDK和nRF Connect SDK),在SDK15中,nrfx驅(qū)動(dòng)源代碼在如下目錄:

-examples. 該目錄包含了豐富的應(yīng)用示例,不僅包含BLE應(yīng)用示例,也包含每個(gè)外設(shè)如何使用的示例,還包含bootloader示例代碼。一般來(lái)說(shuō),開(kāi)發(fā)過(guò)程中碰到的大部分問(wèn)題,都可以在這個(gè)目錄找到示例。examples目錄結(jié)構(gòu)如下所示:

客戶用得最多的兩個(gè)目錄是:ble_peripheral和peripheral。ble_peripheral目錄包含了BLE作為從模式的應(yīng)用示例,而peripheral包含了所有外設(shè)應(yīng)用示例。ble_peripheral目錄結(jié)構(gòu)如下所示:

peripheral目錄結(jié)構(gòu)如下所示:

在Nordic SDK中,經(jīng)常會(huì)碰到deprecated和experimental目錄,他們的作用如下:
deprecated,該目錄的內(nèi)容已被舍棄,并有新版本來(lái)替代他們。但為了兼容老產(chǎn)品,SDK還是將其保留下來(lái),比如如下目錄:componentsdrivers_nrftwi_masterdeprecated,如果你是新用戶,切記不要使用deprecated目錄下的API。
experimental 。SDK不斷的有new feature/new example出現(xiàn),有些new feature/new example推出來(lái)不久,還沒(méi)有經(jīng)過(guò)市場(chǎng)大規(guī)模驗(yàn)證,對(duì)此Nordic會(huì)在這些new feature/new example前面加一個(gè)前綴:experimental,比如:examplesble_peripheralexperimental_ble_app_buttonless_dfu,碰到experimental一定要小心,里面有可能有bug,希望用戶自己進(jìn)行充分測(cè)試,以保證產(chǎn)品的質(zhì)量。
3. nRF5 SDK和softdevice幫助文檔
不管是SDK還是softdevice自有 API,建議首先查看SDK自帶的API說(shuō)明,記住:API說(shuō)明一般都放在頭文件中,而不是.c文件中,里面有該API詳細(xì)說(shuō)明和使用注意事項(xiàng)。比如softdevice_enable() API相關(guān)說(shuō)明在頭文件softdevice_handler.h中:

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

再比如ble_advertising_init API說(shuō)明文檔在ble_advertising.h中:

Softdevice還有一份專門的spec,來(lái)闡述softdevice工作原理,資源占用情況,性能參數(shù),使用注意事項(xiàng)等,建議大家一定要閱讀該份spec:
S140 spec:https://infocenter.nordicsemi.com/index.jsp?topic=%2Fsds_s140%2FSDS%2Fs1xx%2Fs140.html&cp=3_4_2_0
S132 spec:https://infocenter.nordicsemi.com/index.jsp?topic=%2Fsds_s132%2FSDS%2Fs1xx%2Fs130.html&cp=3_4_1_0
S112 spec:https://infocenter.nordicsemi.com/index.jsp?topic=%2Fsds_s112%2FSDS%2Fs1xx%2Fs112.html&cp=3_4_0_0
S130 spec:https://infocenter.nordicsemi.com/index.jsp?topic=%2Fcom.nordic.infocenter.s130.sds%2Fdita%2Fsoftdevices%2Fs130%2Fs130sds.html&cp=4_7_2_0
SDK還有在線幫助文檔和離線幫助文檔,兩者一模一樣,離線幫助文檔就是通過(guò)在線幫助文檔生成的,以方便網(wǎng)絡(luò)不好的用戶使用。你可以根據(jù)自己的情況選擇其中一份幫助文檔即可,幫助文檔鏈接:https://infocenter.nordicsemi.com/index.jsp?topic=%2Fcom.nordic.infocenter.sdk5.v15.3.0%2Fexamples.html&cp=5_1_4

以SDK15.3.0在線幫助文檔為例,其主界面如下所示。展開(kāi)幫助文檔左邊的目錄,你會(huì)發(fā)現(xiàn):幫助文檔目錄層級(jí)跟SDK目錄層級(jí)是一一對(duì)應(yīng)的。


因此對(duì)SDK有任何疑問(wèn),可以直接去查對(duì)應(yīng)的幫助文檔說(shuō)明,比如如果你想了解nRF5_SDK安裝目錄examplesperipheralspi這個(gè)例子是干什么的,直接找到幫助文檔對(duì)應(yīng)的條目:https://infocenter.nordicsemi.com/index.jsp?topic=%2Fcom.nordic.infocenter.sdk5.v15.3.0%2Fspi_master_example.html&cp=5_1_4_6_37,你就會(huì)明白這是一個(gè)告訴你如何使用SPI master的例子。再比如你想知道nRF5_SDK_15.2.0_9412b96examplesdtmdirect_test_mode這個(gè)例子是不是講如何進(jìn)行DTM測(cè)試的,找到幫助文檔相關(guān)條目說(shuō)明: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,你就會(huì)知道自己的猜測(cè)是對(duì)的。
4. 選擇一個(gè)SDK 例子(example)以開(kāi)始你的BLE開(kāi)發(fā)之旅
Nordic nRF5 SDK包含了豐富的應(yīng)用實(shí)例,一般來(lái)說(shuō),我們的開(kāi)發(fā)都是基于其中某一個(gè)例子來(lái)開(kāi)始的 。所有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安裝目錄examplesble_peripheralble_app_gls”這個(gè)例子是干什么的,找到該例子對(duì)應(yīng)的幫助文檔說(shuō)明: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,通過(guò)查看例子說(shuō)明,你會(huì)發(fā)現(xiàn)這是一個(gè)標(biāo)準(zhǔn)的血糖儀例子,里面使用了bonding,而且bonding的時(shí)候,需要輸入PIN碼,并支持LESC模式。看完這個(gè)例子說(shuō)明,你就大概明白這個(gè)例子跟你的應(yīng)用接不接近,如果你也需要使用帶PIN碼的bonding,那么就可以選擇該例子作為基礎(chǔ)來(lái)開(kāi)始你的開(kāi)發(fā)。
再比如nRF5_SDK安裝目錄examplesble_peripheralble_app_uart,例子說(shuō)明鏈接為: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,
通過(guò)查看說(shuō)明文檔,我們知道這個(gè)例子是把藍(lán)牙作為透?jìng)鱽?lái)使用的,如果你的應(yīng)用就是把藍(lán)牙作為一個(gè)透?jìng)髂K來(lái)使用,那么你可以以這個(gè)例子為基礎(chǔ)來(lái)開(kāi)始你的開(kāi)發(fā)。
通過(guò)一個(gè)一個(gè)例子的查看,相信你馬上可以找到你需要的例子,然后在此基礎(chǔ)上,開(kāi)始你的BLE開(kāi)發(fā)之旅。
審核編輯 黃宇
-
BLE
+關(guān)注
關(guān)注
13文章
787瀏覽量
66435 -
SDK
+關(guān)注
關(guān)注
3文章
1104瀏覽量
51849 -
Nordic
+關(guān)注
關(guān)注
9文章
261瀏覽量
49076
發(fā)布評(píng)論請(qǐng)先 登錄
Nordic Semiconductor批量生產(chǎn)nRF52840 SoC可全面支持藍(lán)牙5以及藍(lán)牙Mesh和Thread,為市場(chǎng)帶來(lái)量產(chǎn)級(jí)的最先進(jìn)多協(xié)議無(wú)線
如何調(diào)試nRF5 SDK
深度技術(shù)解析低功耗藍(lán)牙廠商nordic的nRF Connect SDK裸機(jī)選項(xiàng)方案
藍(lán)牙Mesh技術(shù)正式發(fā)布,Nordic第一個(gè)推出mesh SDK
nRF5芯片外設(shè)GPIO和GPIOTE介紹
nRF5 SDK軟件架構(gòu)和softdevice工作原理
怎么解決studio編譯nrf52832 bsp示例程序啟動(dòng)softdevice錯(cuò)誤的問(wèn)題呢?
Nordic Semiconductor最新nRF5 SDK推出安全的簽名空中固件升級(jí)功能
Nordic開(kāi)創(chuàng)藍(lán)牙m(xù)esh新解決方案
Nordic Semiconductor宣布nRF52840和nRF52832 SoC及其支持軟件已為藍(lán)牙5準(zhǔn)備就緒
講述Nordic nRF5 SDK的主要調(diào)試手段,以幫助大家快速定位問(wèn)題
Nordic nRF5 SDK 學(xué)習(xí)筆記之七, 功耗評(píng)估及電源優(yōu)化
如何調(diào)試nRF5 SDK
【Nordic隨筆】從零開(kāi)始學(xué)習(xí)使用nRF Connect SDK(一、安裝ncs3.2.0步驟)
Nordic nRF5 SDK和softdevice介紹
評(píng)論