2025 Nordic Tech Tour,中国 →
  1. Home
  2. 博客

    深度技术解析nRF Connect SDK裸机选项方案

深度技术解析nRF Connect SDK裸机选项方案

Nordic Semiconductor

Nordic Semiconductor一直致力于开发基于Zephyr实时操作系统( RTOS)的nRF Connect SDK,并不断发展,提供最佳的工具与软件,助力开发者在Nordic广泛的无线产品组合上构建高度可扩展的物联网应用。然而,不同开发者的需求各异,某些简单应用可能适合采用更精简的方案。为此,新近发布的nRF Connect SDK裸机选项提供了合时宜的裸机编程方案,无需使用Zephyr RTOS便可在nRF54L系列上开发简单低功耗蓝牙应用。

自2018年以来,Nordic Semiconductor一直致力于开发基于Zephyr实时操作系统( RTOS)的nRF Connect SDK,并不断发展,提供最佳的工具与软件,助力开发者在Nordic广泛的无线产品组合上构建高度可扩展的物联网应用。然而,不同开发者的需求各异,某些简单应用可能适合采用更精简的方案。为此,新近发布的nRF Connect SDK裸机选项提供了合时宜的裸机编程方案,无需使用Zephyr RTOS便可在nRF54L系列上开发简单低功耗蓝牙应用。

该裸机选项作为基于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 SDK裸机选项是nRF Connect SDK 环境中新增的替代开发路径,支持在nRF54L系列上进行单线程裸机低功耗蓝牙应用开发。该选项专为开发简单低功耗蓝牙应用的开发者设计,例如需要连接功能的直接数据交换应用(如医疗设备、运动可穿戴设备、追踪器或信标等场景),此类应用毋须使用RTOS或高级功能。

裸机选项已集成至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、存储器、定时器

• DFU模式:MCUboot恢复入口与恢复状态保留

支持的功能:

• 以下低功耗蓝牙功能:中心功能、编码物理层、扩展广播模式、蓝牙5.0规范以上特性(如信道探测、LE Audio及蓝牙Mesh)

• NFC

• ESB

大家可能已经注意到,裸机选项仅支持在nRF54L系列上进行低功耗蓝牙开发。对于需要多协议支持或多任务处理等更高级应用,或者使用其他Nordic器件系列时,推荐使用的工作环境是结合Zephyr RTOS的nRF Connect SDK。

单存储区DFU模式的引入也很重要,该功能在nRF Connect SDK是全新功能,但对nRF5 SDK用户而言并不陌生。本文后续章节将详细阐述其优势与特性,现阶段需要特别说明的是:这项功能计划于近期整合至搭载Zephyr RTOS的nRF Connect SDK中。

nRF Connect SDK环境中的裸机选项

裸机选项最出色的特点之一,在于它与 nRF Connect for VS Code 开发环境深度集成,可让用户无缝使用Nordic最新、最先进的嵌入式固件开发工具。通过nRF Connect SDK裸机选项,用户将获得以下工具,加速裸机环境下的物联网开发:

nRF调试

• 内存报告

• nRF Connect SDK项目配置——无需配置头文件!

• nRF终端

• west和git

• 基于CMake的构建系统

• 快速易用的烧录和擦除工具

采用裸机选项的项目创建、文件与项目管理、板载配置与构建配置、开发与调试,这些操作与采用Zephyr RTOS的nRF Connect SDK几乎完全一致。特别是对于具备裸机开发背景的用户而言,通过nRF Connect SDK裸机选项启动项目开发,是熟悉环境并提升操作熟练度的理想途径,并且无需顾虑RTOS方面。

由于裸机选项的开发与基于Zephyr RTOS的开发在核心机制上高度一致,当用户认为RTOS能为新应用或开发流程带来额外价值时,从裸机向RTOS的升级将比以往更轻松。

若需深入了解 nRF Connect for VS Code工具集,请参阅博客文章“采用nRF Connect for VS Code加速物联网开发”。

安装nRF Connect SDK裸机选项

首先,建议按照此处说明安装 Visual Studio Code 及 nRF Connect for VS Code 扩展:nRF Connect for VS Code。该页面提供下载链接和文档,可帮助用户快速完成设置。

安装VS Code扩展后,请在nRF Connect for VS Code中安装裸机选项:从左上角的欢迎菜单中选择“管理 SDK”,然后点击“安装 SDK”。此时将弹出如下图所示的下拉菜单,提供nRF Connect SDK(含Zephyr RTOS)和nRF Connect SDK裸机两种选项。请选择nRF Connect SDK裸机版本并确认正确版本号(首发时为v0.8.0),即可启动安装流程。

安装完成后,用户已准备就绪。点击“创建新应用” > “复制示例”,将看到SDK选项“0.8.0”及其安装路径(例如nRF Connect SDK裸机选项 对应的C:\ncs\nrf-bm\v0.8.0)。选定后,即可使用nrf-bm示例作为应用开发的起点。

下图所示为下拉菜单中的可用示例。

创建应用后,用户可通过 VS Code 中的File Explorer (Ctrl + Shift + E)浏览文件和配置。在nRF Connect 视图(Ctrl + Alt + N)中,用户可在左侧的操作菜单中找到构建、烧录和调试按钮,以及内存报告工具,如下图所示。若需深入了解VS Code与nRF Connect SDK,建议在Nordic开发者学院参加nRF Connect SDK Fundamentals课程。

单存储区设备固件升级

许多曾使用nRF5 SDK的开发者可能已经熟悉单存储区DFU功能,并会对nRF Connect SDK裸机选项提供这项功能的消息感到兴奋。为了更清楚地说明这一点,我们先探讨单存储区DFU与双存储区DFU的区别。

双存储区更新过程中,现有应用映像保存在存储区0,而接收到的映像则保存在存储区1。当新映像完全接收完毕后,两个映像在存储区中互换位置,新应用即可开始运行。采用双存储区设计的核心在于安全性:若刷写过程中出现异常,可将先前的应用映像作为后备方案恢复,确保系统持续运行直至重试固件升级。

双存储区更新存在一个限制:可用代码空间减少。需要第二个存储区来容纳至少当前应用的大小(甚至更大),这意味着留给应用的非易失性存储空间相应减少。值得注意的是,图像压缩技术可进一步节省部分NVM空间。更多关于图像压缩的细节可参阅此篇博客文章:“探索MCUboot压缩图像支持的优势”。

相比之下,单存储区更新时,新应用映像会直接覆盖同一存储区中的现有应用。这带来两点影响:应用可用的非易失性存储器(NVM)空间显着增加(通常可用NVM容量大约翻倍),但另一方面是若刷写失败,设备必须重启至DFU模式才能重试刷写,因为没有保留旧有的应用。

简而言之,单存储区DFU方案通过牺牲刷写过程中旧有应用映像的保留,为应用提供了更多的非易失性存储空间。下图概述了双存储区更新与单存储区更新在存储区域上的差异。

性能分析

在裸机选项与RTOS的对比中,前者通常具有更少的RAM、NVM和CPU开销,进而降低功耗,因为RTOS需要更多内存和CPU周期来执行更复杂的任务调度及运行服务。但正如先前博文所述,在无线设备方面内存开销微乎其微,而功耗方面无线电模块是最大的能耗来源,RTOS增加的额外CPU周期影响甚微。可参考先前博文:(+) 破除误解:nRF5 SDK与nRF Connect SDK的技术解析

本节将通过Nordic提供的多个不同示例,深入剖析nRF Connect SDK裸机选项与搭载Zephyr RTOS的nRF Connect SDK在内存占用及功耗方面的实际差异。

内存占用

通常,裸机应用具有较小的代码和内存占用,因为开销极低(例如无需任务调度或内核等内存需求)。我们通过SoftDevice S115深入对比Zephyr RTOS与裸机方案在RAM和NVM资源消耗上的差异。本次测试选取低功耗蓝牙Nordic UART服务(NUS)/外设UART及**外设LED按钮服务(LBS)**进行深入对比,这两个示例均属于无需RTOS或高级功能支持的简单低功耗蓝牙应用。Zephyr RTOS示例则采用nRF Connect SDK v3.1.0及工具链版本v3.1.0。

为了确保公平比较,裸机内存占用还包含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的技术解析”中的做法类似。

低功耗蓝牙LED按钮服务

RAM (kB)

NVM (kB)

nRF Connect SDK Zephyr RTOS (外设LBS 最小)

26.9

156.3

nRF Connect SDK Zephyr RTOS (具有RAM优化的外设LBS最小)

21.4

156.3

nRF Connect SDK裸机 + SoftDevice S115

23.4

153.8

低功耗蓝牙Nordic UART 服务

RAM (kB)

NVM (kB)

nRF Connect SDK Zephyr RTOS (外设l UART最小)

29.9

162.2

nRF Connect SDK Zephyr RTOS (具有RAM优化的UART最小)

24.7

162.2

nRF Connect SDK裸机+ SoftDevice S115

23.1

153.0

例如在最小LED按钮服务示例中可见,裸机与RTOS模式之间的内存占用差异未必显着。裸机选项下确实能节省部分RAM资源,这在特定应用和目标设备中可能具有重要意义,但另一方面可能需要牺牲应用可扩展性为代价。当基于Zephyr RTOS的LBS示例通过缩减堆栈大小进一步优化RAM消耗时,可见其RAM占用量实际上略低于基于裸机选项的示例(约2KB)。

在第二个示例(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模式的开销相当甚至更大。

功耗分析

相较于裸机选项,RTOS需要额外的CPU周期来执行上下文切换及运行服务(例如信令、向任务发送消息以及延迟任务执行)。例如当高优先级任务发生中断时,RTOS调度器需执行上下文切换,这可能额外消耗数百个CPU周期。

额外的处理器活动会导致功耗增加。接下来,我们将了解搭载Zephyr RTOS的nRF Connect SDK对功耗的影响,并将其与裸机方案进行对比。

比较功耗的最佳起点是nRF Connect SDK裸机选项和搭载Zephyr的nRF Connect SDK均提供的功耗剖析示例。通常示例应用在出厂时并未针对功耗进行优化,而是侧重于调试和理解应用的工作原理。而功耗剖析示例则经过了最大限度的优化,以实现最低功耗。

广播期间的功耗剖析

在nRF54L15开发板上使用功耗剖析示例完成广播功耗分析,同时采用了搭载Zephyr RTOS的nRF Connect SDK和nRF Connect SDK裸机选项。下面将以表格和图表形式呈现不同广播场景下的功耗分析结果:可连接广播模式(100 ms广播间隔)与不可连接广播模式(1000ms广播间隔)。

分析结果还包含以下数据:采用长广播间隔(1000 ms)时,在两次广播事件之间测得的空闲电流(该间隔可获得稳定的空闲电流数值,同时最大限度减少输出电容的电流影响);以及单次可连接广播事件的总体电流。

广播电流消耗

平均电流, 100 ms 间隔可连接 (uA)

平均电流, 1000 ms 间隔不可连接 (uA)

空闲电流 (uA)

广播事件 (mA)

nRF Connect SDK Zephyr RTOS

85.9

10.3

2.9

3.9

nRF Connect SDK 裸机选项

85.7

11.8

3.0

3.9

nRF Connect SDK 搭载 Zephyr RTOS,外设功耗剖析示例,源表模式功耗分析:可连接广播模式采用100 ms间隔,不可连接广播模式采用 1000 ms间隔。通过 Board Configurator 应用禁用了 UART。

平均电流(可连接广播模式,100 ms间隔):85.9 uA

平均电流(不可连接广播,间隔1000 ms):10.3 uA

在间隔1000ms的不可连接广播事件之间测得的空闲电流:2.9 uA

可连接广播事件:3.9 mA

nRF Connect SDK 裸机选项,低功耗蓝牙功率剖析示例(源表模式):可连接广播间隔100 ms,不可连接广播间隔1000 ms。通过Board Configurator应用禁用了UART。

平均电流(可连接广播间隔100 ms):85.7 uA

平均电流(不可连接广播,1000 ms 间隔):11.8 uA

在间隔1000 ms的不可连接广播事件之间测量的空闲电流:3.0 uA

可连接广播事件:3.9 mA

连接状态下的功耗剖析

除广播功能外,还同时使用nRF Connect SDK(搭载Zephyr RTOS)和nRF Connect SDK裸机选项,在nRF54L15 DK上通过功耗剖析示例对连接功耗进行了分析。下文以表格和图表形式呈现了连接间隔为360 ms的功耗分析结果。

连接电流消耗

平均电流, 360 ms 间隔 (uA)

nRF Connect SDK Zephyr RTOS

11.5

nRF Connect SDK裸机选项

11.5

nRF Connect SDK 搭载 Zephyr RTOS,外设功耗剖析示例,采用360 ms连接间隔的连接功耗分析。通过 Board Configurator 应用禁用了 UART。

平均电流消耗:11.5 uA

nRF Connect SDK裸机选项,功耗剖析示例,采用360 ms间隔的连接功耗分析。通过Board Configurator应用禁用了UART。

平均电流消耗:11.5 uA

通过对搭载Zephyr RTOS的nRF Connect SDK与裸机选项nRF Connect SDK中广播和连接功能的功耗分析可知,两者功耗的差异微乎其微,在多数应用场景下可忽略不计。这表明至少在简单应用中,调度和上下文切换产生的额外CPU周期消耗并不显着,不足以对功耗产生实质性影响。

值得注意的是,对于具备无线连接功能的典型物联网应用,射频收发功耗才是功耗曲线的主要影响因素,而该功耗并不受RTOS或裸选项的影响。这也部分解释了为何裸机选项与RTOS模式的功耗差异微乎其微。

因此,在低功耗设备上,实现最低功耗的最佳方式通常是确保应用尽可能频繁地进入睡眠状态(即低功耗状态),同时尽可能减小空闲电流和收发电流。在RTOS环境中,这意味着需要更精细地配置空闲任务;而在裸机系统中预测和优化空闲功耗通常更为直接简便。

后续规划

探讨nRF Connect SDK裸机选项的入门方法并深入剖析技术细节后,我们展望未来,了解一下裸机选项在v1.0.0版本发布前的后续规划。

如关键特性章节所述,SoftDevice S115仅作为外设角色软件堆栈运行,因此不支持扫描、中心节点及多角色功能。然而,我们预计客户希望在裸机选项下获得这些功能,因此很高兴告知用户:中心节点支持计划作为SoftDevice S145版本的一部分而增添,将于今年晚些时候推出。S145版本还将新增编码物理层(Coded PHY)与扩展广播模式(Extended Advertising)支持。

此外,如前所述,虽已在裸机选项实现单存储区DFU功能支持,后续也将集成至搭载Zephyr RTOS的nRF Connect SDK中。计划在近期发布的v0.9.0版本中增添HID鼠标键盘示例及PairManager功能。

祝各位用户在nRF Connect SDK裸机选项下编程愉快!

 

订阅Nordic新闻简报

了解最新信息!订阅后即可获取最新Nordic及物联网资讯

立即订阅