0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

Nordic nRF5 SDK和softdevice介绍

jf_14701710 ? 来源:jf_14701710 ? 作者:jf_14701710 ? 2025-08-20 09:54 ? 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

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。

wKgZPGilKq-AcnOeAAAy5xIdph400.jpeg

除了nRF5 SDK,Nordic还针对某些特殊应用领域推出了一些专门的SDK,这些SDK和nRF5 SDK采用了相同的软件架构,相同的驱动和库,以及相同的编码风格。对开发者来说,只要熟悉了nRF5 SDK,这些特殊SDK上手也会比较快。Nordic提供了如下种类的特殊SDK:

nRF5 SDK for Mesh,用于开发蓝牙Mesh应用

nRF5 SDK for Thread and ZigBee,用于开发ZigBee应用或者Thread应用

nRF SDK HK,用于开发苹果homekit应用

Thingy SDK,用于开发Nordic Thingy传感器套件

nRFready Smart Remote 3,用于开发蓝牙语音电视机遥控器

nRFready Desktop 2,用于开发蓝牙或者2.4G的无线键盘和鼠标

如果你的应用是上面6种垂直应用,那么建议你选择上面的SDK,否则一律推荐使用nRF5 SDK。下面将对nRF5 SDK进行阐述。

1. nRF5 SDK和Softdevice概述

nRF5 SDK是Nordic nRF51/52系列产品软件开发环境,Softdevice是Nordic蓝牙协议栈的名称,为了方便用户的使用,每一个版本的SDK都包含了该版本支持的所有softdevice,请到SDK根目录componentssoftdevice目录查看具体支持的softdevice类别和版本。SDK官网下载地址为:https://www.nordicsemi.com/Software-and-Tools/Software/nRF5-SDK/Download#infotabs。

nRF5 SDK版本编号,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同时支持nRF51和nRF52系列芯片,而SDK13/14/15/16/17只支持nRF52系列芯片。这里顺带提一下,如果你需要使用多个版本nRF5 SDK,那么就会同时用到多个device family pack(nRF MDK),请按照低版本先装高版本后装的顺序来安装(如果SDK例程报device family pack错误,请先完全卸载之前的device family pack,再按照由低到高的顺序重装一遍所有的pack)

Nordic一般推荐使用最新版的SDK来开发你的应用,因为其功能最强大,考虑最周全,可靠性最好。比如nRF51系列,推荐使用SDK12.3.0(12.3.0已经是nRF51能支持的最高版本SDK了),nRF52系列推荐使用SDK17.1.0。但是最新版的SDK占用的Flash资源和RAM资源比较多,而且新版SDK为了兼容各种情况设计得也比较复杂。为了节省资源或者让应用看起来简洁,客户也可以使用某些老版本的SDK。对于老用户来说,要不要升级SDK,是一个老生常谈的问题,我的建议是:测试为王,只要你的应用测试下来没有任何问题,你的SDK就是稳定和可靠的,就不需要升级SDK。当然,如果你要加入新SDK的功能和特性,那么就需要升级SDK了。请打开SDK根目录documentationrelease_notes.txt以查看最新版SDK的新功能和新特性。

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协议栈既支持从设备模式又支持主设备模式

Softdevice命名规则二。大体上跟命名规则1相同,但是协议栈编号最后2位跟芯片型号一样,比如S140,代表这个协议栈专门用于nRF52840。由于52840 Flash空间很大,没有必要做各种细分的协议栈,S140协议栈是一个大而全的协议栈,包含蓝牙所有功能。

Softdevice版本编号,从1.0.0开始编号,然后2.0.0,3.0.0,…S110最新版本是8.0.0,S130最新版本是2.0.1,S132/S140/S112/S113最新版本是7.2.0

SDK和softdevice兼容性问题。不要查看兼容性表格,直接打开SDK,直接使用SDK里面的softdevice,肯定没有问题。比如S132 在SDK如下文件夹中:

wKgZO2ilKrCAGeEnAABhVVyQYTo888.png

有时候你在Nordic官网下载SDK的时候,比如SDK15.2.0,官网会自动绑定一个比SDK安装目录里面自带的协议栈版本更高版本的协议栈,如下图所示:

wKgZPGilKrGAPjkdAAHxs2QrY38977.png

那么这个时候推荐使用该绑定的高版本协议栈,原因如下:

再完美的协议栈难免也会有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也有相关移植文档供大家参考)。如下列出了常用协议栈的发布页面:

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等,请按照上述方式自己去寻找相应下载页面。

芯片版本和SDK版本兼容性问题。如果你使用的是Nordic最新版芯片,就没有这个所谓的兼容性问题,直接下载最新版本的SDK即可。如果你不幸还有Nordic老版本芯片库存,那么只能使用某些老版本的SDK,具体请参考兼容性表格。

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

之所以会有这个兼容性问题,是因为新版本SDK是为新版本芯片服务的,也就是说新版本SDK默认芯片以前的bug已经修复了,所以新版本SDK不会包含老版本芯片的workaround(补丁),导致老版本芯片运行在最新版本SDK上会有一些问题。

2. nRF5 SDK目录结构解读

欲下载nRF5 SDK,请参考“Nordic nRF51/nRF52开发环境搭建”

以SDK12.3.0为例,nRF5 SDK目录结构如下所示:

wKgZO2ilKrKAfWwiAAH4QQXTZng867.png

-components. 该目录包含了Nordic自己开发的SDK源代码,**切记:在产品开发过程中,不要去修改该目录下的任何文件!**components目录结构如下所示:

wKgZPGilKrKASqFMAAGbzG73Btk693.png

这里特别说明一下,Nordic现在有2套芯片外设驱动,SDK14及以前版本SDK使用nrf_drv老版本外设驱动(又称legacy),SDK15使用nrfx新版本外设驱动(nrfx驱动同时兼容nRF5 SDK和nRF Connect SDK),在SDK15中,nrfx驱动源代码在如下目录:

wKgZO2ilKrOAHANAAAJhjHVnqpA873.png

-examples. 该目录包含了丰富的应用示例,不仅包含BLE应用示例,也包含每个外设如何使用的示例,还包含bootloader示例代码。一般来说,开发过程中碰到的大部分问题,都可以在这个目录找到示例。examples目录结构如下所示:

wKgZPGilKrSAI7y1AAGnRmY3Kfs500.png

客户用得最多的两个目录是:ble_peripheral和peripheral。ble_peripheral目录包含了BLE作为从模式的应用示例,而peripheral包含了所有外设应用示例。ble_peripheral目录结构如下所示:

wKgZO2ilKrWADMKmAAMaRmPvOew249.png

peripheral目录结构如下所示:

wKgZPGilKraAZ36uAAHEu7idBTI111.png

在Nordic SDK中,经常会碰到deprecated和experimental目录,他们的作用如下:

deprecated,该目录的内容已被舍弃,并有新版本来替代他们。但为了兼容老产品,SDK还是将其保留下来,比如如下目录:componentsdrivers_nrftwi_masterdeprecated,如果你是新用户,切记不要使用deprecated目录下的API。

experimental 。SDK不断的有new feature/new example出现,有些new feature/new example推出来不久,还没有经过市场大规模验证,对此Nordic会在这些new feature/new example前面加一个前缀:experimental,比如:examplesble_peripheralexperimental_ble_app_buttonless_dfu,碰到experimental一定要小心,里面有可能有bug,希望用户自己进行充分测试,以保证产品的质量。

3. nRF5 SDK和softdevice帮助文档

不管是SDK还是softdevice自有 API,建议首先查看SDK自带的API说明,记住:API说明一般都放在头文件中,而不是.c文件中,里面有该API详细说明和使用注意事项。比如softdevice_enable() API相关说明在头文件softdevice_handler.h中:

wKgZO2ilKraATSDoAAE9o2SNG9s655.png

再比如sd_ble_gatts_hvx API说明文档在头文件ble_gatts.h中:

wKgZPGilKreAevsIAAJLCQFWmm8068.png

再比如ble_advertising_init API说明文档在ble_advertising.h中:

wKgZO2ilKriAYOuXAAGf-4NtKSI917.png

Softdevice还有一份专门的spec,来阐述softdevice工作原理,资源占用情况,性能参数,使用注意事项等,建议大家一定要阅读该份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还有在线帮助文档和离线帮助文档,两者一模一样,离线帮助文档就是通过在线帮助文档生成的,以方便网络不好的用户使用。你可以根据自己的情况选择其中一份帮助文档即可,帮助文档链接:https://infocenter.nordicsemi.com/index.jsp?topic=%2Fcom.nordic.infocenter.sdk5.v15.3.0%2Fexamples.html&cp=5_1_4

wKgZPGilKrmAMgMPAABVi8qiGBA07.jpeg

以SDK15.3.0在线帮助文档为例,其主界面如下所示。展开帮助文档左边的目录,你会发现:帮助文档目录层级跟SDK目录层级是一一对应的。

wKgZO2ilKrmAHCjNAABhr6pmZMA91.jpegwKgZPGilKrqAGxhHAAJz_sTs5Ks004.png

因此对SDK有任何疑问,可以直接去查对应的帮助文档说明,比如如果你想了解nRF5_SDK安装目录examplesperipheralspi这个例子是干什么的,直接找到帮助文档对应的条目: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_9412b96examplesdtmdirect_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安装目录examplesble_peripheralble_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安装目录examplesble_peripheralble_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开发之旅。

审核编辑 黄宇

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • BLE
    BLE
    +关注

    关注

    12

    文章

    709

    浏览量

    64967
  • SDK
    SDK
    +关注

    关注

    3

    文章

    1082

    浏览量

    49594
  • Nordic
    +关注

    关注

    9

    文章

    221

    浏览量

    48247
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    Nordic Semiconductor批量生产nRF52840 SoC可全面支持蓝牙5以及蓝牙Mesh和Thread,为市场带来量产级的最先进多协议无线

    高端nRF52840 SoC结合Nordic最新的nRF5 SDK和S140 协议栈(RF协议栈),使开发人员充分可以利用蓝牙5的性能优势。
    的头像 发表于 03-28 12:28 ?9279次阅读

    如何调试nRF5 SDK

    本文将讲述Nordic nRF5 SDK的主要调试手段,以帮助大家快速定位问题,并解决问题。一般来说,你可以通过打log方式,IDE的debug模式,SDK自带的app_error_c
    发表于 04-26 23:13

    蓝牙Mesh技术正式发布,Nordic第一个推出mesh SDK

    )官方认可蓝牙mesh1.0(Bluetooth mesh 1.0)规范的当天,超低功耗RF专业厂商Nordic Semiconductor宣布推出用于mesh的nRF5软件开发套件(SDK),可让
    发表于 07-21 12:29

    nRF5芯片外设GPIO和GPIOTE介绍

    ,别的IO产生的port event就会被忽略。为此,在处理port event中断的时候,nRF5 SDK app_button模块将每个port event的极性设为toggle,也就是每进入一次
    发表于 02-22 16:38

    nRF5 SDK软件架构和softdevice工作原理

    本文将介绍Nordic nRF5 SDK软件架构以及softdevice工作原理,以加深大家对Nordi
    发表于 03-07 11:40

    使用RTT-STUDIO开发?Nordic nRF5x系列MCU说明

    简介?Nordic nRF5x 系列 MCU 广泛,且广泛、低蓝牙应用。非常适用于多功能蓝牙和 24 GHz 无线应用。基于官方生态的dk16.0版本的基础上,该BSP将SDK和RT-THE的
    发表于 07-25 13:00

    怎么解决studio编译nrf52832 bsp示例程序启动softdevice错误的问题呢?

    /../../../../arm-none-eabi/bin/ld.exe: ./packages/nrf5x_sdk-v16.1.0/components/softdevice/common/nrf_sdh.o:D:\\SJ
    发表于 01-10 16:56

    Nordic Semiconductor最新nRF5 SDK推出安全的签名空中固件升级功能

    Nordic Semiconductor宣布其最新发布的nRF5 SDK v12.0支持安全的签名空中设备固件升级(OTA-DFU),可增强应用升级的安全性,通过使用安全的签名,在给定设备上确保使用经过验证的可信任来源进行应用更
    发表于 09-05 10:19 ?1675次阅读

    Nordic开创蓝牙mesh新解决方案

    蓝牙技术联盟(SIG)官方认可Nordic协议栈,同时全新软件开发套件可让开发人员使用NordicnRF5
    的头像 发表于 09-20 17:13 ?9048次阅读

    Nordic Semiconductor宣布nRF52840和nRF52832 SoC及其支持软件已为蓝牙5准备就绪

    关键词:蓝牙5 , Nordic , nRF52840 , nRF52832 Nordic Semiconductor宣布可提供蓝牙
    发表于 08-05 15:30 ?695次阅读

    讲述Nordic nRF5 SDK的主要调试手段,以帮助大家快速定位问题

    nRF5 SDK日志打印功能是通过nRF_Log模块实现的(上面展示的日志都是通过nRF_Log打印出来的),SDK包含的大部分例子都自带打
    的头像 发表于 04-15 15:38 ?1.4w次阅读
    讲述<b class='flag-5'>Nordic</b> <b class='flag-5'>nRF5</b> <b class='flag-5'>SDK</b>的主要调试手段,以帮助大家快速定位问题

    Nordic nRF5 SDK 学习笔记之七, 功耗评估及电源优化

    NORDIC 官方评估功耗在线测试NORDIC?Online Power Profiler,https://devzone.nordicsemi.com/power/NORDIC 关于低功耗的官方
    发表于 01-06 16:14 ?3次下载
    <b class='flag-5'>Nordic</b> <b class='flag-5'>nRF5</b> <b class='flag-5'>SDK</b> 学习笔记之七,  功耗评估及电源优化

    Nordic nRF51/nRF52开发流程说明

    51422/nRF51802等芯片,开发者可以按照如下流程去评估和开发nRF52/51应用解决方案。 如果你英文比较好的话,建议直接阅读Nordic官方的“nRF5 Getting S
    的头像 发表于 06-17 14:25 ?505次阅读
    <b class='flag-5'>Nordic</b> <b class='flag-5'>nRF</b>51/<b class='flag-5'>nRF</b>52开发流程说明

    nRF5 SDK软件架构及softdevice工作原理

    本文将介绍Nordic nRF5 SDK软件架构以及softdevice工作原理,以加深大家对Nordi
    的头像 发表于 06-23 11:08 ?219次阅读
    <b class='flag-5'>nRF5</b> <b class='flag-5'>SDK</b>软件架构及<b class='flag-5'>softdevice</b>工作原理

    如何调试nRF5 SDK

    本文将讲述Nordic nRF5 SDK的主要调试手段,以帮助大家快速定位问题,并解决问题。一般来说,你可以通过打log方式,IDE的debug模式,SDK自带的app_error_c
    的头像 发表于 06-24 08:59 ?257次阅读
    如何调试<b class='flag-5'>nRF5</b> <b class='flag-5'>SDK</b>