
自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
ES
大家可能已經注意到,裸機選項僅支持在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加速物聯網開發”。
https://devzone.nordicsemi.com/nordic/nordic-blog/b/blog/posts/accelerate-iot-development-with-nrf-connect-for-vscode
安裝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課程。
https://academy.nordicsemi.com/courses/nrf-connect-sdk-fundamentals/

單存儲區設備固件升級
許多曾使用nRF5 SDK的開發者可能已經熟悉單存儲區DFU功能,并會對nRF Connect SDK裸機選項提供這項功能的消息感到興奮。為了更清楚地說明這一點,我們先探討單存儲區DFU與雙存儲區DFU的區別。
在雙存儲區更新過程中,現有應用映像保存在存儲區0,而接收到的映像則保存在存儲區1。當新映像完全接收完畢后,兩個映像在存儲區中互換位置,新應用即可開始運行。采用雙存儲區設計的核心在于安全性:若刷寫過程中出現異常,可將先前的應用映像作為后備方案恢復,確保系統持續運行直至重試固件升級。
雙存儲區更新存在一個限制:可用代碼空間減少。需要第二個存儲區來容納至少當前應用的大小(甚至更大),這意味著留給應用的非易失性存儲空間相應減少。值得注意的是,圖像壓縮技術可進一步節省部分NVM空間。更多關于圖像壓縮的細節可參閱此篇博客文章:“探索MCUboot壓縮圖像支持的優勢”。
https://devzone.nordicsemi.com/nordic/nordic-blog/b/blog/posts/exploring-the-benefits-of-mcuboots-compressed-image-support
相比之下,單存儲區更新時,新應用映像會直接覆蓋同一存儲區中的現有應用。這帶來兩點影響:應用可用的非易失性存儲器(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按鈕服務示例中可見,裸機與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)時,在兩次廣播事件之間測得的空閑電流(該間隔可獲得穩定的空閑電流數值,同時最大限度減少輸出電容的電流影響);以及單次可連接廣播事件的總體電流。

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的功耗分析結果。

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裸機選項下編程愉快!
精彩活動推薦

中文官網:www.nordicsemi.cn
英文官網:www.nordicsemi.com
微信公眾號:nordicsemi
https://devzone.nordicsemi.com
北京分公司: +86 010 8438 2767
上海分公司: +86 21 6330 0620
深圳分公司: +86 755 8322 0147
sales.cn@nordicsemi.no


點擊“閱讀原文” 探索更多Nordic資訊
如果你是硬件工程師,IDE不是必須安裝的,因為Nordic SDK所有例子都有已經編譯好的hex文件供你使用。