一般来说,开发nRF51/52产品推荐使用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上手也会比较快。比如:nRF5 SDK for Mesh,用于开发蓝牙Mesh应用。
1、nRF5 SDK 和 Softdevice 概述
(1)nRF5 SDK是 Nordic nRF51/52 系列产品软件开发环境,Softdevice是 Nordic蓝牙协议栈的名称,为了方便用户的使用,每一个版本的SDK都包含了该版本支持的所有Softdevice,请到SDK根目录\components\softdevice
目录查看具体支持的Softdevice类别和版本。
(2)Nordic一般推荐使用最新版的SDK来开发你的应用,nRF52系列推荐使用SDK15.3.0。
(3)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协议栈既支持从设备模式又支持主设备模式 。
(4)Softdevice命名规则(二)。大体上跟命名规则1相同,但是协议栈编号最后2位跟芯片型号一样,比如S140,代表这个协议栈专门用于nRF52840。由于52840 Flash空间很大,没有必要做各种细分的协议栈,S140协议栈是一个大而全的协议栈,包含蓝牙所有功能。
(5)Softdevice版本编号,从1.0.0开始编号,然后2.0.0,3.0.0,…S110最新版本是8.0.0,S130最新版本是2.0.1,S112/S132/S140最新版本是7.0.0。
(6)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个数字有升级,那么推荐大家直接下载下来,然后覆盖原来老的协议栈即可。如果版本号第1个数字就有变化,意味着两个版本的协议栈是不兼容的,此时一般SDK也会跟着升级的,比如7.0.0相比6.1.0,这个就属于大升级了,此时建议直接使用与之配套的最新版本SDK来进行开发,而不是把协议栈进行简单覆盖。(当然,你也可以自己把7.0.0的协议栈移植到老SDK中,这个稍微麻烦一些,不过Nordic也有相关移植文档供大家参考)。如下列出了常用协议栈的发布页面:
S140协议栈最新版本查询页面:https://www.nordicsemi.com/Software-and-Tools/Software/S140/Download#infotabs
S132协议栈最新版本查询页面:https://www.nordicsemi.com/Software-and-Tools/Software/S132/Download#infotabs
其他类型协议栈,比如S130, S112,S110等,请按照上述方式自己去寻找相应下载页面。
2、nRF5 SDK 目录结构解读
以SDK15.0.0为例,nRF5 SDK 目录结构:
序号 | 目录 | 含义 |
---|---|---|
1 | components | 包含Nordic自己开发的SDK源代码 |
2 | documentation | SDK release说明以及移植说明等 |
3 | examples | 丰富的应用示例 |
4 | external | 第三方库 或者源码 (非Nordic开发) |
components:该目录包含了Nordic自己开发的SDK源代码,切记:在产品开发过程中,不要去修改该目录下的任何文件!
components目录结构:
序号 | 目录 | 含义 |
---|---|---|
1 | ant | ANT 相关代码 |
2 | ble | BLE 相关代码 |
3 | boards | 开发板相关代码 |
4 | drivers_ext | Nordic开发,但使用了第三方设备 |
5 | drivers_nrf | SoC外设驱动 |
6 | libraries | 一些非常有用的库 及其源码 |
7 | nfc | NFC相关代码 |
8 | proprietary_rf | Nordic 私有的2.4G相关源代码 |
9 | serialization | 串行化相关代码 |
10 | softdevice | 本SDK支持的所有 softdevice.hex,API定义,以及一些说明 |
examples:该目录包含了丰富的应用示例,不仅包含BLE应用示例,也包含每个外设如何使用的示例,还包含bootloader示例代码。一般来说,开发过程中碰到的大部分问题,都可以在这个目录找到示例。examples目录结构:
序号 | 目录 | 含义 |
---|---|---|
1 | ant | ANT相关代码 |
2 | ble_central | BLE主模式 示例 |
3 | ble_central_and_peripheral | BLE同时支持主从模式 示例 |
4 | ble_peripheral | BLE从模式 示例 |
5 | crypto | 加密算法 应用示例 |
6 | dfu | bootloader示例代码 |
7 | dtm | DTM测试设备端代码 |
8 | multiprotocol | BLE,ANT与私有2.4G同时工作示例 |
9 | nfc | NFC相关代码 |
10 | peripheral | 51/52外设 应用示例 |
11 | proprietary_rf | Nordic私有的2.4G相关源代码 |
3、nRF5 SDK 和 Softdevice 帮助文档
(1)不管是SDK还是softdevice自有 API,建议首先查看SDK自带的API说明,记住:API说明一般都放在头文件中,而不是c文件中,里面有该API详细说明和使用注意事项。
(2)Softdevice还有一份专门的 Specification(规范)(比如:S132_SoftDevice Specification_v6.2),来阐述Softdevice工作原理,资源占用情况,性能参数,使用注意事项等,建议大家一定要阅读该份 Specification。