该裸机选项作为基于Zephyr RTOS的nRF Connect SDK的替代开发路径,两者共存在同一环境中,并共享相同的通用工具链。对于仍在使用nRF5 SDK的开发者而言,由于两套SDK在API、架构及工作流程上大同小异,裸机选项能够帮助开发者在无需重大迁移负担的情况下过渡至nRF Connect SDK,我们预计将受到热烈欢迎。
本文将探讨裸机选项的独特之处、关键特性、如何集成到nRF Connect SDK中,以及如何快速完成配置。接下来,我们将深入探讨基于裸机和Zephyr实时操作系统(RTOS)的应用程序在nRF Connect SDK中的性能表现,重点关注内存占用和功耗方面。最后,我们将展望nRF Connect SDK裸机选项的未来发展方向。
裸机选项的关键特性
裸机选项已集成至nRF Connect for VS Code开发环境。安装后,可针对每个项目选择采用裸机选项开发或基于 Zephyr RTOS 的开发模式。这种设计可让用户无需切换场景和环境,即可为每个项目选择合适的基础架构,并且所有操作均在同一编辑器和工具集内完成。
nRF Connect SDK的裸机选项基于经过市场验证的SoftDevice,这是预构建的低功耗蓝牙协议堆栈,该协议堆栈为大多数nRF5 SDK用户所熟悉,并由nrfx提供独立于RTOS以外的底层通用驱动程序。裸机选项的nrfx交付方式与基于Zephyr RTOS的开发相同。
nRF5 SDK与当前nRF Connect SDK裸机选项中nrfx 驱动程序之间的 API 作出了部分更新,这些更新一直是nRF Connect SDK的组成部分,因此需要进行相应调整。然而,双方的整体架构是相似的,使得从nRF5 SDK迁移至nRF Connect SDK裸机选项更为顺畅。
在发布时,裸机选项提供以下功能和示例:
基于nRF54L系列的裸机选项低功耗蓝牙开发
SoftDevice S115
仅支持外设角色,最多支持2个连接
与最新nRF5 SDK SoftDevice (v17)采用相同API,包含Flash API、GATT及GAP API
支持1M/2M物理层协议、ATT及SM协议 支持LE Secure连接、GATT 客户端/服务器、自定义UUID、低功耗蓝牙RSSI QoS、可配置ATT MTU、长ATT MTU及可配置属性表大小
单存储区设备固件升级 (DFU)
在 nRF Connect for VS Code中共享工具链
提供清晰的迁移路径,引导从nRF5 SDK环境过渡至nRF Connect SDK 环境
支持从裸机选项升级至Zephyr RTOS,完全具备nRF Connect SDK全部功能
上市时可用示例:
低功耗蓝牙:心率服务、LED按钮服务、Nordic UART服务、外设功耗分析、连续血糖监测、Hello SoftDevice
外设:按钮、LED、UARTE、LPUARTE、存储器、定时器
不支持的功能:
以下低功耗蓝牙功能:中心功能、编码物理层、扩展广播模式、蓝牙5.0规范以上特性(如信道探测、LE Audio及蓝牙Mesh)
ES
单存储区DFU模式的引入也很重要,该功能在nRF Connect SDK是全新功能,但对nRF5 SDK用户而言并不陌生。本文后续章节将详细阐述其优势与特性,现阶段需要特别说明的是:这项功能计划于近期整合至搭载Zephyr RTOS的nRF Connect SDK中。
nRF Connect SDK,环境中的裸机选项
内存报告
nRF Connect SDK项目配置——无需配置头文件!
nRF终端
west和git
基于CMake的构建系统
快速易用的烧录和擦除工具
由于裸机选项的开发与基于Zephyr RTOS的开发在核心机制上高度一致,当用户认为RTOS能为新应用或开发流程带来额外价值时,从裸机向RTOS的升级将比以往更轻松。
若需深入了解 nRF Connect for VS Code工具集,请参阅博客文章“采用nRF Connect for VS Code加速物联网开发”。
安装nRF Connect SDK,裸机选项
安装VS Code扩展后,请在nRF Connect for VS Code中安装裸机选项:从左上角的欢迎菜单中选择“管理 SDK”,然后点击“安装 SDK”。此时将弹出如下图所示的下拉菜单,提供nRF Connect SDK(含Zephyr RTOS)和nRF Connect SDK裸机两种选项。请选择nRF Connect SDK裸机版本并确认正确版本号(首发时为v0.8.0),即可启动安装流程。
下图所示为下拉菜单中的可用示例。

单存储区设备固件升级
在双存储区更新过程中,现有应用映像保存在存储区0,而接收到的映像则保存在存储区1。当新映像完全接收完毕后,两个映像在存储区中互换位置,新应用即可开始运行。采用双存储区设计的核心在于安全性:若刷写过程中出现异常,可将先前的应用映像作为后备方案恢复,确保系统持续运行直至重试固件升级。
双存储区更新存在一个限制:可用代码空间减少。需要第二个存储区来容纳至少当前应用的大小(甚至更大),这意味着留给应用的非易失性存储空间相应减少。值得注意的是,图像压缩技术可进一步节省部分NVM空间。更多关于图像压缩的细节可参阅此篇博客文章:“探索MCUboot压缩图像支持的优势”。
简而言之,单存储区DFU方案通过牺牲刷写过程中旧有应用映像的保留,为应用提供了更多的非易失性存储空间。下图概述了双存储区更新与单存储区更新在存储区域上的差异。
性能分析
本节将通过Nordic提供的多个不同示例,深入剖析nRF Connect SDK裸机选项与搭载Zephyr RTOS的nRF Connect SDK在内存占用及功耗方面的实际差异。
内存占用
为了确保公平比较,裸机内存占用还包含SoftDevice S115对NVM和RAM的使用,包括SoftDevice所需的最坏情况调用堆栈。以下内存占用数值摘自SoftDevice S115 v9.0.0-3.prototype版本说明:
- NVM 107.0 kB
- RAM 4.9 kB(最小值,可能因sd_ble_enable()配置而异)
- 最坏情况调用堆栈1.8 kB
因此,SoftDevice的总体RAM占用由最小值4.9 kB + 最坏情况调用堆栈1.8 kB = 6.7 kB构成。此外,SoftDevice RAM 还包含应用编译时定义的可配置部分,该部分在不同样本间可能存在差异。针对当前样本,SoftDevice RAM 的动态部分约为 4.1 kB,SoftDevice总体内存占用为 10.8 kB。此部分将在下表的RAM 数值中予以体现。
最小低功耗蓝牙定位服务(LBS)和NUS示例的RAM和NVM数值如下表所示。最小构建版本已剔除应用生产版本不需要的功能,这些功能耗费大量内存,例如日志记录和调试功能。对于基于Zephyr RTOS的nRF Connect SDK的LBS示例,该表格还展示了通过缩减堆栈大小实现的进一步RAM优化后的内存占用情况,其优化方法与博文“破除误解:nRF5 SDK 和nRF Connect SDK的技术解析”中的做法类似。
在第二个示例(Nordic UART服务)中,RAM和NVM消耗的差异更为显着。但若设备具备充足RAM资源,则需权衡RTOS带来的RAM开销与扩展性提升孰轻孰重。同样地,通过启用包含RAM优化的最小化构建,Zephyr RTOS版本与裸机版本的应用数值便趋于可比。
选定的nRF Connect SDK搭配Zephyr RTOS示例需要额外占用约3至9 kB NVM,这相当于示例NVM消耗的2%至6%增幅。
本次分析的核心结论是:RTOS在RAM和NVM上均存在内存开销,但开销在整体架构中的影响程度高度依赖于应用场景和设备规格。值得注意的是,RTOS内核导致的RAM增加基本属于静态消耗,不会随着应用规模呈线性增长,因此对于小型应用而言,RTOS造成的RAM开销远大于大型复杂应用。
同样值得注意的是,对于裸机选项,用户可能不会遇到任何内存开销问题。然而,当应用的复杂度开始提升时,用户需要添加功能来处理新增的复杂性,而这些附加功能将导致RAM消耗增加,若优化得当,增幅可能较小;但根据具体实现方式,其开销也可能与RTOS模式的开销相当甚至更大。
功耗分析
额外的处理器活动会导致功耗增加。接下来,我们将了解搭载Zephyr RTOS的nRF Connect SDK对功耗的影响,并将其与裸机方案进行对比。
比较功耗的最佳起点是nRF Connect SDK裸机选项和搭载Zephyr的nRF Connect SDK均提供的功耗剖析示例。通常示例应用在出厂时并未针对功耗进行优化,而是侧重于调试和理解应用的工作原理。而功耗剖析示例则经过了最大限度的优化,以实现最低功耗。
广播期间的功耗剖析
分析结果还包含以下数据:采用长广播间隔(1000 ms)时,在两次广播事件之间测得的空闲电流(该间隔可获得稳定的空闲电流数值,同时最大限度减少输出电容的电流影响);以及单次可连接广播事件的总体电流。
平均电流(可连接广播模式,100 ms间隔):85.9 uA
平均电流(可连接广播间隔100 ms):85.7 uA
连接状态下的功耗剖析
平均电流消耗:11.5 uA
平均电流消耗:11.5 uA
因此,在低功耗设备上,实现最低功耗的最佳方式通常是确保应用尽可能频繁地进入睡眠状态(即低功耗状态),同时尽可能减小空闲电流和收发电流。在RTOS环境中,这意味着需要更精细地配置空闲任务;而在裸机系统中预测和优化空闲功耗通常更为直接简便。
260