只读分享解决方案文档原理方案设计📅 2026-10-14🔖 v3.4.0⏳ 还有3日到期
🔧解决方案&应用市场分析 -> 原理方案设计 -> 主芯片方案调试开发 -> Nordic nRF5系列_开发指南

Nordic nRF5系列_开发指南

同系列 · 原理方案设计
扫码打开本页
微信扫码

1 · 文档导读与阅读路径

这份文档面向已经会写 C、但第一次接触 Nordic 生态的嵌入式工程师。它不假定你用过 Zephyr,也不假定你用过 nRF5 SDK;从「买哪块板子」一路写到「怎么过认证、怎么量产烧录」。

1.1 覆盖范围

文档覆盖 Nordic 短距离无线 SoC 的五代产品:nRF51(Cortex-M0,已 NRND)、nRF52(Cortex-M4F,出货量最大的一代)、nRF53(双核 Cortex-M33)、nRF54L(22 nm 低功耗主力)、nRF54H(320 MHz 多核高性能)。软件侧以 nRF Connect SDK(NCS)为主线,同时给出遗留 nRF5 SDK + SoftDevice 的对照与迁移路径。

  • 硬件:选型对比、封装与料号命名、电源与时钟架构、GPIO/DPPI/EasyDMA。
  • 工具链:nRF Util、nRF Connect for Desktop、nRF Connect for VS Code、west / CMake / Kconfig / Devicetree / sysbuild。
  • 驱动:Zephyr 设备模型下的 GPIO、UART、SPI、TWI、PWM、SAADC、RTC。
  • 无线:蓝牙 LE(GAP/GATT、广播、连接、安全、PHY、Mesh、LE Audio、Channel Sounding)、Thread / Zigbee / Matter、ESB、NFC。
  • 工程化:低功耗设计与 PPK2 实测、安全启动链、DFU/FOTA、调试与测试、量产烧录、认证合规。

1.2 不覆盖什么

  • 不覆盖 nRF91 系列(蜂窝 LTE-M / NB-IoT)与 nRF70 系列(Wi-Fi 协同 IC)的完整开发流程,只在需要协同的章节提到接口。
  • 不重复 Zephyr RTOS 的通用内核教程(线程、信号量、工作队列等),只在影响 Nordic 开发的地方给出最小必要说明。
  • 不给原理图级射频匹配网络的完整计算过程,天线与匹配请查对应 Reference Layout 与产品规范。
  • 不提供法律意义上的认证建议,第 18 章只给流程与清单。

1.3 版本标注约定

Nordic 的软件版本迭代很快,文档里出现的版本号按下面约定理解:

写法含义本文取值
NCS 3.4.xnRF Connect SDK 版本。3.4.0 是首个 LTS,基于 Zephyr 4.4主线行文按 3.4.x
nrfutil 7.x新版 nRF Util(原生二进制 + 插件架构),与旧版 pip 安装的 6.x 完全不兼容命令行全部按 7.x
nRF5 SDK 17.1.1遗留 SDK 终版,维护模式仅在第 19 章出现
SoftDevice S1x0遗留协议栈固件(S112/S113/S132/S140 等)仅在第 19 章对照
SoftDevice ControllerNCS 里的 BLE 控制器(由原 SoftDevice 拆出)第 10 章起

1.4 事实来源与免责

文中所有规格数字来自 Nordic 官网产品页与 docs.nordicsemi.com 技术文档(含 nRF Connect SDK、Zephyr、MCUboot、Trusted Firmware-M 文档集)。电流、灵敏度、发射功率等参数随芯片版本与测试条件变化,量产前必须以所用器件的最新《Product Specification》为准。文中给出的命令与 Kconfig 选项在 NCS 3.4.x 上验证,跨版本可能有改名(尤其是 SB_CONFIG_* 前缀与 sysbuild 相关项)。

1.5 五条阅读路径

路径 A · 新项目立项
选型 → 环境 → 跑通
第 2 章 选型 → 第 4 章 装环境 → 第 6 章 跑通第一个应用 → 第 13 章 做功耗预算。
约 3~4 小时
路径 B · 蓝牙 LE 开发
GAP/GATT → 吞吐 → 安全
第 10 章 广播与连接 → 第 11 章 PHY/DLE/MTU 调优与 Mesh、LE Audio → 第 14 章 配对与密钥存储。
约 6~8 小时
路径 C · 老项目迁移
nRF5 SDK → NCS
第 19 章 的 API 映射表 → 决定走完整 Zephyr 还是 Bare Metal 选项 → 第 15 章 重建 DFU。
按项目规模而定
路径 D · 功耗攻坚
测出来才算数
第 13 章 System ON/OFF、GRTC、DC/DC → PPK2 接线与实测 → Online Power Profiler 反推电池寿命。
约 4~6 小时
路径 E · 量产交付
烧录、密钥、认证
第 14 章 密钥与读保护 → 第 17 章 产线烧录与 UICR → 第 18 章 认证清单。
约 2~3 小时
读法建议

如果你手上已经有 nRF52840 DK 或 nRF54L15 DK,可以直接按路径 A 动手;没有板子也不影响阅读,第 4 章的命令与第 6 章的代码都不依赖硬件,第 13 章的功耗数据可以直接抄去做预算。

2 · nRF5 系列全景与选型

Nordic 的短距离无线 SoC 走了五代:nRF51 打开局面,nRF52 出货数十亿,nRF53 首次引入双核,nRF54L 把工艺推到 22 nm,nRF54H 则把性能堆到 320 MHz。这一章把五代放在一张表里对比,并给出选型决策依据。

2.1 五代产品时间线

从架构演进的角度看,Nordic 三十年只做一件事:把「MCU + 射频 + 协议栈」塞进一颗越来越省电的芯片里。每一代的核心变化如下:

系列代表型号CPU关键跃迁当前状态
nRF51nRF51822 / nRF51422 / nRF51824Cortex-M0 16 MHz首次把 BLE + ANT 协议栈做成可升级的 SoftDevice 固件NRND
nRF52nRF52832 / nRF52840 / nRF52833 / nRF52820 / nRF52811 / nRF52810 / nRF52805Cortex-M4F 64 MHz引入 FPU、EasyDMA 全外设、NFC、USB(52840)、802.15.4NCS 3.4.0 起功能完整
nRF53nRF5340双核 Cortex-M33 128 MHz + 64 MHz应用核 / 网络核分离、TrustZone、105 °C 扩展温区主流
nRF54LnRF54L15 / L10 / L05 / LM20ACortex-M33 128 MHz + RISC-V FLPR22 nm 低漏电、Global RTC(System OFF 可跑)、KMU 密钥管理新项目首选
nRF54HnRF54H20多核 Cortex-M33 最高 320 MHz + 多 RISC-V高速 USB 480 Mbps、CAN FD、IronSide 安全隔离区高性能旗舰
nRF5 系列五代演进:工艺、内核与射频同步升级 每一代都在「更高性能」与「更低功耗」两个方向上同时前进 nRF512012M0 · 16 MHzBLE 4.2 / ANT+4 dBm nRF522015M4F · 64 MHzBLE 5.3 / Mesh+8 dBm · USB nRF532019双核 M33128 + 64 MHzTrustZone nRF54L2024M33 128 MHz22 nm · GRTC+8 dBm · KMU nRF54H2024多核 M33320 MHz+10 dBm · CAN FD 工艺:180 nm → 90 nm → 40 nm → 22 nm 灵敏度:−93 dBm → −95 dBm → −96 dBm(nRF54H 达 −99/−104 dBm) SDK:nRF5 SDK(维护模式)→ nRF Connect SDK(主线,Zephyr RTOS)
图 1 · nRF5 系列五代演进路线:工艺、内核、射频指标与 SDK 主线

来源:Nordic Semiconductor 产品页(nRF51/nRF52/nRF53/nRF54L/nRF54H20)与产品规范摘要。

2.2 nRF51 系列:SoftDevice 思路的起点

nRF51 是 Nordic 打进 BLE 市场的第一代产品,已标记 NRND(Not Recommended for New Designs),但存量极大,维护旧产品时仍会遇到。

型号Flash / RAM协议配套 SoftDevice说明
nRF51822256/128 KB / 32/16 KBBLE 4.2S110 / S120 / S130通用型,最经典的入门料号
nRF51422256/128 KB / 32/16 KBBLE + ANTS210 / S310nRF51822 加 ANT 协议栈
nRF51824256 KB / 16 KBBLE 4.2S110 / S120 / S130AEC-Q100 Grade 2 车规级

nRF51 的硬件特征:Cortex-M0 @16 MHz、10-bit ADC、16 通道 PPI、31 个 GPIO、128-bit AES ECB/CCM/AAR 协处理器、片内 LDO 与 Buck DC/DC 两种稳压模式。射频侧 250 kbps / 1 Mbps / 2 Mbps,发射功率 +4 dBm 起(4 dB 步进可调至 −20 dBm)。

新项目不要选 nRF51

除了 NRND 状态,更现实的问题是:nRF51 只在遗留 nRF5 SDK 里有完整支持,NCS 里仅保留 nrf51dk/nrf51822 与 nrf51dongle 两个板级目标用于兼容,没有新的特性开发。要做 BLE 4.2 级别的简单产品,nRF52805 / nRF52810 是更小更便宜的替代。

2.3 nRF52 系列:出货量最大的一代

nRF52 全系 Cortex-M4F @64 MHz,外设带 EasyDMA,配 Nordic 的 PPI(可编程外设互连)。差异集中在 Flash/RAM 容量、USB、802.15.4 与 Coded PHY(Long Range)上。

型号FlashRAMUSB802.15.4Coded PHYTX 功率定位
nRF528401 MB256 KB有有有+8 dBm旗舰,QSPI + CryptoCell-310 + NFC + USB
nRF52833512 KB128 KB有有有+8 dBm105 °C 扩展温区,专业照明
nRF52832512/256 KB64/32 KB无无无+4 dBm通用主力,出货量最大
nRF52820256 KB32 KB有有有+8 dBm带 USB 的低成本款
nRF52811192 KB24 KB无有有+4 dBm带测向的小封装
nRF52810192 KB24 KB无无无+4 dBm入门
nRF52805192 KB24 KB无无无+4 dBm最精简

关键提醒:nRF52832 的射频不支持 IEEE 802.15.4,所以跑不了 Thread / Zigbee;而 nRF52811 虽然只有 24 KB RAM,却是少数带 802.15.4 + Coded PHY 的小封装料号。24 KB RAM 跑完整 Zephyr + BLE 非常紧,做 OTA 双分区基本不可能。

2.4 nRF53 系列:双核分离的第一次尝试

nRF5340 把「跑应用的核」和「跑协议栈的核」物理分开,这是 Nordic 应对「应用代码越来越复杂、协议栈必须实时」的架构答案。

核心CPUFlashRAM职责
应用核(Application Core)Cortex-M33 128 MHz + FPU + DSP1 MB512 KB用户应用、外设、业务逻辑
网络核(Network Core)Cortex-M33 64 MHz256 KB64 KB蓝牙 LE 控制器、802.15.4、多协议调度

其他特征:TrustZone 隔离、Arm CryptoCell-312、USB 2.0、QSPI(支持 XIP 执行外部 Flash)、HS-SPI、105 °C 扩展温区、1.7–5.5 V 供电范围。双核也带来调试复杂度——要调试网络核必须开两个调试会话(详见第 16 章)。

nRF5340 双核架构:应用核与网络核物理分离 应用核 Application Core Arm Cortex-M33 · 128 MHz · FPU + DSP 1 MB Flash · 512 KB RAM · TrustZone 用户应用 + Zephyr RTOS 业务逻辑 · 外设驱动 · 蓝牙 Host(Zephyr) 文件系统 · 网络协议栈 · 安全服务 外设 USB · QSPI · HS-SPI SAADC · PWM · TWI 安全 CryptoCell-312 TF-M / PSA 网络核 Network Core Arm Cortex-M33 · 64 MHz 256 KB Flash · 64 KB RAM SoftDevice Controller 蓝牙 LE 链路层 · 802.15.4 PHY/MAC 多协议分时调度 射频前端 2.4 GHz 收发器 · +3 dBm · 测向支持 由应用核通过 FORCEOFF 信号启停 IPC 核间通信 OpenAMP / rpmsg 共享 RAM + 中断 请求 响应 调试要点:两个核各需一个 GDB 会话;应用核启动代码释放 NETWORK.FORCEOFF 后网络核才开始运行 典型用法:应用核跑 Zephyr 应用与蓝牙 Host,网络核跑 ipc_radio 固件(HCI 透传或完整控制器)
图 2 · nRF5340 双核架构:应用核 / 网络核分工与 IPC 核间通信

2.5 nRF54L 系列:当前新项目首选

nRF54L 是 nRF52 的官方接班人。相比 nRF52840,官方口径是处理能力翻倍、处理效率三倍,同时把工艺推到 22 nm 低漏电节点。

项目nRF54LM20AnRF54L15nRF54L10nRF54L05
CPU128 MHz Arm Cortex-M33
NVM2 MB1.5 MB1.0 MB0.5 MB
RAM512 KB256 KB192 KB96 KB
蓝牙 LE / Channel Sounding有 / 有有 / 有有 / 有有 / 有
Mesh / Zigbee / Thread有有有有
Matter / Sidewalk / Wi-Fi 协处理器有 / 有 / 有有 / 有 / 有有 / 有 / —有 / — / —
TX 功率+8 dBm+8 dBm+7 dBm+7 dBm
灵敏度(BLE / 802.15.4)−96 dBm / −101 dBm
数字接口HS-USB + HS-SPI/UART + 6×SPI/UART/TWI + PDM/TDMHS-SPI/UART + 4×SPI/UART/TWI + PDM + I²S
ADC8 通道,最高 14 bit,最高 2 MS/s
协处理器128 MHz RISC-V FLPR(可跑 SoftPeripherals)
隔离 / 安全TrustZone + 篡改检测 + 抗侧信道加密加速器
工作温度−40~+85 °C−40~+105 °C−40~+105 °C−40~+105 °C
封装CSP98 / QFN52CSP47 / QFN52 / QFN48 / QFN40QFN52 / QFN48 / QFN40QFN52 / QFN48 / QFN40
nRF54L10 / L05 与 L15 引脚兼容

三者在 QFN 封装上引脚对引脚兼容,意味着同一块 PCB 可以从 L05(0.5 MB / 96 KB)一路升到 L15(1.5 MB / 256 KB),不用改板。这是成本敏感型产品做「同平台多档位」的关键设计余量。

性能亮点(官方 @3 V 数据):193 CoreMark/mA、503 CoreMark;射频 RX 3.4 mA、TX @0 dBm 4.8 mA;睡眠电流 0.7 µA 起(System OFF,无 RAM 保持)到 2.9 µA;CSP 封装 +8 dBm / QFN 封装 +7 dBm。

2.6 nRF54H 系列:高性能旗舰

nRF54H20 的目标场景是「原来需要外挂 MCU + 外部 Flash + 无线 SoC」的复杂产品。它把多个 Cortex-M33 和多个 RISC-V 协处理器塞进一颗 4.7×4.3 mm 的 WLCSP。

  • 算力:多核 Cortex-M33 最高 320 MHz,多 RISC-V 协处理器;应用核算力是 nRF5340 应用核的两倍。EEMBC ULPMark-CoreMark:效率取向 515 CoreMark / ULPMark-CM 170,性能取向 1290 CoreMark / ULPMark-CM 132。
  • 存储:2 MB NVM + 1 MB RAM。
  • 射频:第 4 代 2.4 GHz 多协议射频,BLE 1 Mbps 灵敏度 −99 dBm,802.15.4 −104 dBm,TX 最高 +10 dBm,RX 电流低至 1.7 mA(3 V,DC/DC)。
  • 接口:高速 USB 480 Mbps、CAN FD 控制器、2× I3C、14-bit ADC、高性能外部存储接口(400 MBps,支持 XIP / QSPI / xSPI / HyperBus)。
  • 安全:面向 PSA Certified Level 3 设计,IronSide Secure Enclave 隔离安全区、防篡改传感器、抗侧信道加密加速器。
nRF54H20 不是「即插即用」

它使用 SUIT(Software Updates for Internet of Things) 作为更新架构,且必须先完成供应(provisioning)——写入 Secure Domain Firmware(SDFW)与 System Controller Firmware(SCFW),并设置正确的 lifecycle state,应用固件才会运行。只烧一个 zephyr.hex 上去板子毫无反应,这是新手最常见的「板子坏了」误判。详见第 15.7 节。

2.7 横向选型速查

选型决定后立刻要面对的三件事:4 · 装环境13 · 做功耗预算18 · 过认证。若是从老项目迁移,先看 19 · 迁移路径。

场景首选备选决策依据
新建 BLE 传感器 / 信标nRF54L05 / L10nRF52810成本优先,BLE 广播类应用不需要大 RAM
新建 BLE 可穿戴 / 需要 OTAnRF54L15nRF52840双分区 DFU 至少要保证 256 KB 级 Flash 余量
Matter / Thread / Zigbee 网关节点nRF54L15 / LM20AnRF52840802.15.4 + BLE 并发,协议栈 RAM 占用高
USB HID 键鼠 / DonglenRF54LM20AnRF52840nRF54LM20A 带高速 USB(480 Mbps)
LE Audio / 复杂音频nRF54H20nRF5340等时通道 + 高算力 + 大内存
边缘 ML / 传感器融合nRF54H20—320 MHz 多核 + 1 MB RAM + 400 MBps 外部存储接口
工业 / 高温(105 °C)nRF54L15nRF52833 / nRF5340温区与长期供货承诺
车规nRF51824(仅存量)—AEC-Q100 Grade 2,新项目需向 Nordic 确认

2.8 料号与封装命名规则

Nordic 的完整料号形如 nRF52840-QIAA-R7,拆开看:

字段示例含义
系列 + 型号nRF52840芯片型号
封装代码QIAAQ = aQFN,I = 73 pin,AA = 代号;常见还有 QFAA(QFN48)、CIAA(WLCSP)、QDAA(QFN40)
卷带 / 托盘-R7 / -R / -TR7 = 7″ 卷带(最小 1000),R = 13″ 卷带(最小 3000),T = 托盘(如 490)
版本后缀-xxAAFlash/RAM 档位与修订版本,参考设计文件名里常见

模组方面,Nordic 自己不出模组,但有庞大的第三方模组伙伴网络(ezurio/Laird、Fanstel、Raytac、MinewSemi、MOKO、Panasonic、Insight SiP、Holyiot、KAGA FEI、Lierda、Feasycom、Abluetech、BoBlinker、HJSIP 等),提供 PCB 天线 / 芯片天线 / uFL 座 / trace pin 等多种形态。选模组的直接收益是射频认证可以复用,设计风险与上市周期大幅下降。

3 · 硬件架构与核心子系统

这一章讲所有 nRF5 芯片共有的骨架:CPU、内存、电源、时钟、GPIO、事件互连与 DMA。理解了这套骨架,nRF51 到 nRF54 的外设驱动写法就都能对上号。

3.1 CPU、内存与总线

系列CPUFPU/DSPTrustZoneCache内存类型
nRF51Cortex-M0 16 MHz无无无Flash + RAM
nRF52Cortex-M4F 64 MHzFPU无有(部分型号)Flash + RAM
nRF53双核 Cortex-M33 128 / 64 MHzFPU + DSP有有Flash + RAM
nRF54LCortex-M33 128 MHz(+ Cortex-M0+ 电源管理)FPU + DSP有有RRAM(NVM)+ RAM
nRF54H多核 Cortex-M33 ≤320 MHz + 多 RISC-VFPU + DSP有有RRAM(NVM)+ RAM
nRF54 的存储是 RRAM,不是 Flash

官方文档把 nRF54 的非易失性存储称为 NVM 或 RRAM(阻变存储器)。它带来两个工程差异:一是写入粒度与擦除行为与传统 NOR Flash 不同,移植自己写的 Flash 存储层时不能照抄 nRF52 的 nrf_fstorage 时序假设;二是 NCS 为 nRF54L 提供了 RRAM 保护机制(bootloader RRAM protection),可在启动链里把关键区域锁掉。

3.2 电源架构

nRF5 芯片内部有两套稳压方案可选,这是功耗优化的第一道闸门:

模式适用电压特点工程建议
片内 Buck DC/DC2.1 ~ 3.6 V(视型号)效率高,射频工作电流可降 30%~50%只要电压允许就一定要开,需外接电感(典型 10 µH)
片内 LDO1.75 ~ 3.6 VBOM 少一个电感,静态电流略高超小体积或成本极致敏感时用
LDO bypass1.75 ~ 1.95 V外部直接供 1.8 V 给 CPU 域与 nPM 系列 PMIC 配合时使用

外部配套方面,Nordic 提供 nPM 系列 PMIC:nPM1100(超小体积双模 Buck + 电池充电)、nPM1300 / nPM1304(带电量计与系统管理)、nPM2100(超低静态电流,适合纽扣电池)。nRF54L15 DK 上就用 nPM1300 给 SoC 供电,可用 Board Configurator 桌面应用把 VDD 从默认 1.8 V 改成 3.0 V。

最容易踩的功耗坑:忘记开 DC/DC

在 NCS 里 DC/DC 由设备树控制,默认是关闭的。必须在板级 DTS 或 overlay 里显式使能:

&dcdc {
    status = "okay";
};

实测对比非常夸张:nRF54L15 DK 睡眠电流在误用 LDO 时可高达 8.35 mA,使能 DC/DC 后降到 1.8 ~ 3.0 mA。另外要确认 nordic,pm-ext-flash-supply 指向 DC/DC 节点,否则外部 Flash 仍走 LDO。

3.3 时钟系统

时钟源频率精度用途备注
HFXO32 MHz±20 ~ ±40 ppm射频与高速外设基准必须用外部晶振,射频通信不能靠内部 RC
HFINT32 MHz低启动阶段 / 无射频场景上电默认时钟,射频前切到 HFXO
LFXO32.768 kHz±20 ~ ±250 ppmRTC 低功耗计时、BLE 连接时序连接态 BLE 对精度敏感,建议外接
LFRC32.768 kHz±250 ppm 左右无外部 32 kHz 晶振时兜底需定期校准(NCS 可启用自动校准)
GRTC32.768 kHz—nRF54L 全局 RTC可在 System OFF 下继续运行,电流低至约 0.8 µA @3 V

GRTC(Global Real-Time Counter)是 nRF54L 系列新增的关键模块。传统 nRF52 进 System OFF 后只有 GPIO 检测能唤醒,时间信息全丢;nRF54L 的 GRTC 在 System OFF 里继续走时,既能做定时唤醒,又能保持系统时间戳连续——这对「长时间深度睡眠 + 周期性上报」的产品是架构级的简化。

3.4 GPIO 与 GPIOTE

nRF5 的 GPIO 端口按 P0.x / P1.x 编号,每个引脚可通过 CONFIG 寄存器自由分配给任意外设(SPI、TWI、UART、PWM、SAADC 等),这是 Nordic 相对很多 MCU 的显著优势——引脚不绑定外设,Layout 自由度极高。

GPIOTE(GPIO Tasks and Events)负责把引脚电平变化变成可被 PPI/DPPI 路由的事件,或反过来让事件直接翻转引脚。典型用法:用 gpiote + dppi 实现「定时器比较匹配 → 自动翻转 LED」,全程 CPU 不参与。

/* Zephyr 侧推荐写法:用 gpio_dt_spec 从设备树拿引脚 */
#include <zephyr/drivers/gpio.h>

static const struct gpio_dt_spec led = GPIO_DT_SPEC_GET(DT_ALIAS(led0), gpios);

void main(void)
{
    gpio_pin_configure_dt(&led, GPIO_OUTPUT_ACTIVE);
    while (1) {
        gpio_pin_toggle_dt(&led);
        k_msleep(500);
    }
}

3.5 从 PPI 到 DPPI:事件互连的演进

PPI(Programmable Peripheral Interconnect)是 Nordic 的招牌设计——让外设之间直接互相触发,不需要 CPU 中断参与,是低功耗的关键。三代实现如下:

机制芯片通道数特征
PPInRF51 / nRF5216 ~ 20固定通道组,需成对配置 EEP/TEP
DPPInRF53 / nRF54更多可配置通道,支持通道组(Group)与订阅/发布模型
PPIBnRF54H 跨域—跨电源域的 PPI 桥接

在 Zephyr 侧这些细节被封装成 nrfx_dppi / nrfx_gppi 抽象,应用层通常用 Kconfig 选项(如 CONFIG_NRFX_DPPI)或直接让驱动内部申请通道,无需手写寄存器。

3.6 EasyDMA

nRF5 的数字接口(SPIM、TWIM、UARTE、SAADC、QSPI、I2S、PDM)几乎都带 EasyDMA:驱动只要给一个 RAM 缓冲区地址与长度,硬件自己搬数据,完成后发一个 END 事件。这带来两个约束:

  • 缓冲区必须位于 RAM 中。把 const 数组放在 Flash 里直接喂给 EasyDMA 会触发总线错误或静默失败——这是移植代码时极高频的坑。
  • 缓冲区不能被编译器优化掉或中途改地址。DMA 传输期间要保证缓冲区有效,Zephyr 驱动通常用异步 API + 回调解决。

3.7 外设清单对照

外设nRF51nRF52832nRF52840nRF5340nRF54L15nRF54H20
UART / UARTE11(EasyDMA)221×HS + 4多
SPI / SPIM2(无 DMA)34(含 HS 32 MHz)41×HS + 4多
TWI / TWIM22224多 + 2×I3C
SAADC10-bit12-bit 200 ksps12-bit 200 ksps12-bit14-bit 2 MS/s14-bit
USB——FS 12 MbpsFS 12 Mbps—(LM20A 有 HS)HS 480 Mbps
QSPI / XIP——32 MHz QSPIQSPI XIP—xSPI 400 MBps
NFC—NFC-ANFC-ANFC-A有有
CAN—————CAN FD
I²S / PDM—有有有有 / TDM有
比较器 / LPCOMP有有有有有有
QDEC有有有有有有

3.8 UICR 与 OTP:出厂配置信息放在哪

UICR(User Information Configuration Registers)是一块独立于主 Flash 的小区域,用来放不能被普通擦除清掉的信息。典型用途:

  • UICR->CUSTOMER[n]:放客户自定义数据,如 OpenThread 的 EUI-64 地址、产品序列号。
  • 引脚默认配置:如 NFC 引脚是当 GPIO 还是当 NFC 天线引脚,靠 UICR 决定。
  • 引导相关:APPROTECT、SECURE APPROTECT、 bootloader 地址等。

写入方式(以 Thread 的 EUI-64 为例):

nrfutil device x-write --serial-number <snr> --address 0x10001080 --value 0x11223344
nrfutil device x-write --serial-number <snr> --address 0x10001084 --value 0x55667788
nrfutil device reset --reset-kind=RESET_PIN
UICR 写错会锁死芯片

UICR 的某些位(尤其是 APPROTECT / ERASEPROTECT)一旦写错,普通的 nrfutil device erase 无法恢复,需要走 CTRL-AP 擦除(nrfutil device recover) 流程。量产治具脚本里对 UICR 的写操作必须有二次确认与回读校验。

4 · 开发环境搭建:nRF Connect SDK 与工具链

Nordic 现在的工具链是「一套 SDK + 三个入口」。这一章把三条安装路线全部走一遍,并给出 CI/服务器场景下的无头安装方案。

4.1 三条安装路线怎么选

路线入口适合优点缺点
一键安装nRF Connect for VS Code 扩展绝大多数开发者自动装 SDK + 工具链 + VS Code 配置,图形化管理多版本依赖 VS Code,磁盘占用大
命令行nrfutil toolchain-managerCI、服务器、无 GUI 环境可脚本化、可离线部署、可精确锁定版本需要自己配环境变量
手动 westwest init + west update需要改 SDK 源码、做上游贡献完全可控,能切分支做开发依赖要自己解决,最容易出错

4.2 路线一:nRF Connect for VS Code(推荐)

  1. 安装 VS Code(1.86 以上)。
  2. 在扩展市场搜索 nRF Connect,安装 Nordic 官方扩展包(会连带装 nRF Kconfig、nRF DeviceTree、nRF Terminal、nRF Debug 等子扩展)。
  3. 打开扩展侧边栏的 Welcome 面板,点击 Install Toolchain,选择要装的 NCS 版本(新项目选 3.4.0 LTS 或更新的 3.4.x)。
  4. 选择安装路径(Windows 建议 C:\ncs\v3.4.0,路径不要有空格与中文)。
  5. 等待下载完成——这一步会拉下 SDK 全部仓库 + 工具链 + Python 依赖,国内网络可能需要几十分钟到数小时,建议挂代理或选夜间时段。
  6. 装完后点 Open VS Code,扩展会自动设置好 ZEPHYR_BASE、工具链路径等环境变量。
VS Code 扩展提供什么

除了安装器,它还提供:图形化 Build Configuration(选板子、选 Kconfig fragment、开 Debug 选项、加 sysbuild)、nRF Terminal(串口 + RTT 双通道)、nRF Debug(基于 Microsoft Debug Adapter,支持多核与多镜像)、Kconfig / Devicetree 图形编辑器、Memory Report 与 Partition Manager Report。

4.3 路线二:nrfutil 命令行(CI 友好)

新版 nrfutil(7.x) 是原生二进制 + 插件架构,与旧版 pip 装的 6.x 完全不兼容。第一件事是装二进制本体,然后按需装子命令:

# 1. 下载 nrfutil 放到 PATH(Windows 建议 C:\Nordic\nrfutil\)
nrfutil --version

# 2. 安装需要的子命令
nrfutil install device          # 烧录 / 擦除 / 复位 / 调试
nrfutil install toolchain-manager  # SDK 与工具链管理

# 3. 列出并安装 SDK 工具链
nrfutil toolchain-manager list
nrfutil toolchain-manager install --install-dir <路径> --ncs-版本号 v3.4.0

# 4. 进入该工具链环境后即可 west build / west flash
nrfutil toolchain-manager launch --ncs-version v3.4.0 -- west build -b nrf54l15dk/nrf54l15/cpuapp
子命令用途常用动作
device设备操作(主力)list / program / erase / reset / recover / x-write / x-provision-keys
toolchain-managerSDK 与工具链list / install / launch / remove / search
nrf5sdk-tools遗留 nRF5 SDK DFU 包pkg generate
tracenRF91 modem 追踪start / stop
ble-snifferBLE 嗅探—
npmnPM 系列 PMIC 配置—

4.4 路线三:手动 west(做 SDK 开发时用)

# 1. 建工作区
mkdir ncs && cd ncs
python3 -m venv .venv && source .venv/bin/activate
pip install west

# 2. 拉 manifest 仓库(sdk-nrf 就是 manifest repo)
west init -m https://github.com/nrfconnect/sdk-nrf --mr v3.4.0
west update            # 拉取 zephyr / mcuboot / tfm / mbedtls / nrfxlib 等全部模块
west zephyr-export     # 导出 ZEPHYR_BASE 与 CMake 包

# 3. 装 Python 依赖
pip install -r zephyr/scripts/requirements.txt
pip install -r nrf/scripts/requirements.txt
pip install -r bootloader/mcuboot/scripts/requirements.txt
west update 之后一定要再跑一次

切换 NCS 版本后,模块清单(west.yml)会变,必须重跑 west update,否则会出现「编译时报某个头文件找不到」但 SDK 明明存在的诡异现象。版本切换的完整顺序:git checkout <tag> → west update → west zephyr-export → -p always 重编译。

4.5 驱动与权限

平台需要做什么不做会怎样
Windows安装 SEGGER J-Link Software and Documentation Packnrfutil device list 看不到板子
Linux加 udev 规则(Nordic 官网提供 .rules 文件),或临时用 sudo普通用户无 USB 访问权限
macOS首次运行 nrfutil 被 Gatekeeper 拦截,去「系统设置 → 隐私与安全性」点「仍要允许」命令直接被系统拒绝
板子识别不到,先查这三样

① USB 线:充电线遍地都是,必须用确认能传数据的线;② J-Link 驱动:没装或版本太旧;③ Linux 权限:缺 udev 规则。这三项覆盖了绝大多数「板子坏了」的误报。用 nrfutil device list 验证:

$ nrfutil device list
004400012345  SEGGER J-LINK  nRF54L15-DK  /dev/ttyACM0

4.6 目录结构与磁盘占用

NCS 工作区由 west 管理的多个 Git 仓库组成,完整安装(含工具链)通常占用 20 ~ 35 GB,多版本并存时按版本数线性增长。核心目录:

目录内容你会不会改
nrf/Nordic 特有的应用、示例、库、驱动、板级定义参考 / 复制
zephyr/Zephyr RTOS 内核、驱动框架、构建系统一般不改
bootloader/mcuboot/MCUboot 引导加载器配置签名密钥时会用到
modules/其他模块(mbedtls、lz4、tinycbor、LVGL 等)不改
nrfxlib/Nordic 预编译库(SoftDevice Controller、crypto、BLE 控制器等)不改
modules/tee/tfm/Trusted Firmware-M改安全配置时

4.7 验证:从零编译并烧录

  1. 进入任一示例目录,如 nrf/samples/hello_world(Zephyr 侧为 zephyr/samples/hello_world)。
  2. 编译:west build -b nrf54l15dk/nrf54l15/cpuapp
  3. 烧录:west flash(或 nrfutil device program --firmware build/zephyr/zephyr.hex --traits jlink)
  4. 看输出:串口 115200-8-N-1,或在 VS Code 里开 nRF Terminal。
板子目标名(board target)怎么拼

NCS 用 <board>/<soc>/<variant> 三段式。常见形态:nrf54l15dk/nrf54l15/cpuapp、nrf52840dk/nrf52840、nrf5340dk/nrf5340/cpuapp、nrf5340dk/nrf5340/cpunet、nrf52840dk/nrf52840/ns(非安全域)。用 west boards 可列出全部支持的目标。

5 · 工程结构与构建系统

NCS 的构建系统叠了五层:west 管仓库、CMake 管编译、Kconfig 管配置、Devicetree 管硬件、sysbuild 管多镜像。这五层的关系搞清楚,编译报错就有一半能自己定位。

nRF Connect SDK 软件栈分层:应用 / 协议 / RTOS / 硬件抽象 / 芯片 应用程序 Application 用户业务代码 · main() · 线程 · 回调 · 产品逻辑 协议与中间件 Bluetooth Host · Mesh · Thread/Zigbee · Matter · NFC MQTT / CoAP / LwM2M · TLS/DTLS · MCUmgr DFU Nordic 库与示例 nRF Cloud · Modem 库 · nRF Profiler · 传感器驱动 Application Event Manager · Settings / NVS / ZMS Zephyr RTOS 内核(线程 / 同步 / 中断)· 设备模型 · 日志 · Shell · 测试框架 构建系统:CMake + Kconfig + Devicetree + west + sysbuild nrfxlib(Nordic 预编译库) SoftDevice Controller(BLE 链路层) nrf_security(PSA Crypto)· nrf_modem · 802.15.4 库 MCUboot / TF-M MCUboot:引导 + DFU 镜像校验与交换 TF-M:PSA 安全服务 / 隔离 / 密钥管理 硬件抽象与驱动 Zephyr 驱动(gpio / uart / spi / i2c / adc / pwm / counter)· nrfx 底层 HAL 硬件 nRF51 / nRF52 / nRF53 / nRF54L / nRF54H · 2.4 GHz 射频 · 外设 · 安全引擎
图 3 · nRF Connect SDK 软件栈分层:从应用一路向下到芯片

5.1 一个最小工程的目录结构

my_app/
├── CMakeLists.txt          # 工程入口,至少 3 行
├── prj.conf                # Kconfig 配置(主)
├── Kconfig                 # 可选:自定义 Kconfig 选项
├── src/
│   └── main.c
├── boards/
│   ├── nrf54l15dk_nrf54l15_cpuapp.overlay   # 板级设备树覆盖
│   └── nrf52840dk_nrf52840.conf             # 板级专属配置
├── sysbuild.conf           # 多镜像构建配置(MCUboot / NSIB 等)
├── VERSION                 # 应用版本号(DFU 用)
└── build/                  # 构建产物(west build 生成)

最小 CMakeLists.txt:

cmake_minimum_required(VERSION 3.20.0)
find_package(Zephyr REQUIRED HINTS $ENV{ZEPHYR_BASE})
project(my_app)

target_sources(app PRIVATE src/main.c)

5.2 Kconfig:功能开关

Kconfig 决定「编译哪些代码进去」。三个层级,优先级从低到高:板级默认 defconfig → 应用 prj.conf → 命令行 -DCONFIG_XXX=y。

# prj.conf 示例:开启蓝牙 + 日志 + RTT 后端
CONFIG_BT=y
CONFIG_BT_PERIPHERAL=y
CONFIG_BT_DEVICE_NAME="MyDevice"
CONFIG_LOG=y
CONFIG_LOG_BACKEND_RTT=y
CONFIG_USE_SEGGER_RTT=y

改配置的三种方式:

方式命令 / 文件何时用
直接编辑prj.conf永久生效,最常用
菜单界面west build -t menuconfig探索有哪些选项
命令行临时west build -- -DCONFIG_LOG_MODE_IMMEDIATE=y快速试验,不写进文件
改了 Kconfig 一定要干净重建

Kconfig 会引发大范围的条件编译,增量构建经常漏掉依赖变化。凡是改了 prj.conf 出现莫名其妙的链接错误,先 west build -p always(或 VS Code 里选 Pristine Build)再判断。

5.3 Devicetree:硬件描述

Devicetree(DTS)描述「板子上有什么硬件、接在哪个引脚」。Zephyr 用它替代传统的 #define PIN_X 12 写法,应用通过 DT_ALIAS / DT_NODELABEL 拿句柄。

/* boards/nrf54l15dk_nrf54l15_cpuapp.overlay —— 给板子加一个 I2C 传感器 */
&i2c1 {
    status = "okay";
    bme280@76 {
        compatible = "bosch,bme280";
        reg = <0x76>;
    };
};

/* 打开 DC/DC(功耗优化必做) */
&dcdc {
    status = "okay";
};
文件类型命名作用
SoC dtsinrf54l15.dtsi芯片级,厂商提供,不改
板级 dtsnrf54l15dk_nrf54l15.dts开发板定义,不改
overlayboards/<board>.overlay项目改硬件就改它
shieldboards/shields/<name>.overlay可复用的扩展板定义

5.4 sysbuild 与 Partition Manager:多镜像时代

现代 nRF 产品很少只有一份固件:至少会有 bootloader + 应用,双核芯片还有 网络核镜像,nRF54H 还有 Secure Domain / System Controller 固件。sysbuild 负责把这些镜像一起构建,Partition Manager 负责把它们摆进 Flash。

# sysbuild.conf —— 打开 MCUboot
SB_CONFIG_BOOTLOADER_MCUBOOT=y

# 或打开 nRF Secure Immutable Bootloader(NSIB)
SB_CONFIG_SECURE_BOOT_APPCORE=y

# 或两者串联:NSIB 做不可变根,MCUboot 做可升级二级
SB_CONFIG_SECURE_BOOT_APPCORE=y
SB_CONFIG_BOOTLOADER_MCUBOOT=y
概念前缀作用范围例子
应用 KconfigCONFIG_应用镜像CONFIG_BT=y
Sysbuild KconfigSB_CONFIG_整个多镜像系统SB_CONFIG_BOOTLOADER_MCUBOOT=y
镜像专属配置b0_ / mcuboot_单个子镜像-Db0_FILE_SUFFIX=minimal
Partition ManagerPM_ / pm.ymlFlash / RAM 分区pm_static.yml

5.5 构建产物都在哪

build/
├── zephyr/
│   ├── zephyr.hex          # 烧录用(最常用)
│   ├── zephyr.elf          # 调试用(含符号)
│   ├── zephyr.bin
│   ├── .config             # 最终生效的 Kconfig 全量
│   └── zephyr.dts          # 最终展开的设备树
├── my_app/
│   └── zephyr/
│       ├── zephyr.signed.bin     # MCUboot 签名镜像(DFU 用)
│       └── app_update.bin        # DFU 传输用
├── mcuboot/
│   └── zephyr/zephyr.hex         # MCUboot 自身镜像
├── merged.hex                    # 合并后的完整镜像
├── partitions.yml                # 分区布局
└── build.ninja
调试三件套

① build/zephyr/.config —— 查「我这个配置到底开没开」;② build/zephyr/zephyr.dts —— 查「这个引脚到底被谁占了」;③ build/partitions.yml —— 查「Flash 空间到底怎么分的」。绝大多数配置类问题靠这三个文件就能定位。

5.6 常用命令速查

命令作用
west build -b <board>构建
west build -p always干净重建(改配置后必用)
west build -t menuconfig图形化配置
west build -t guiconfigGUI 配置(需装依赖)
west flash烧录(只擦被覆盖的页)
west flash --erase全片擦除后烧录
west flash --snr <snr>指定调试器序列号
west debug / west attach启动 GDB 会话 / 附着到运行中的目标
west update更新所有模块(切版本后必跑)
west boards列出支持的板子
west spdx生成 SBOM(合规交付用)