NCS开发指南
Nordic nRF 开发完全指南
整理自博客园 iini 和 jayant97 的系列文章
一、NCS (nRF Connect SDK) 入门
1.1 什么是 NCS?
NCS (nRF Connect SDK) 是 Nordic 最新一代 SDK,支持: - 短距离 2.4G: Bluetooth LE, BLE Mesh, Thread, Zigbee, PAwR, LE Audio, Channel Sounding - Wi-Fi: nRF700x 系列 (低功耗 Wi-Fi 6) - 蜂窝: nRF91 系列 (NB-IoT, CAT-M1) - 其他: Matter, HomeKit, FindMy, Amazon Sidewalk, ANT+
NCS 基于 Zephyr RTOS,使用 CMake + Kconfig + DeviceTree 配置系统。
1.2 NCS vs nRF5 SDK 怎么选?
| 芯片系列 | 推荐 SDK |
|---|---|
| nRF51 / nRF52 | nRF5 SDK (经典) |
| nRF54 / nRF53 / nRF70 / nRF91 | NCS (必须) |
| nRF52 + 新特性 (Mesh/Matter/测向) | NCS |
nRF5 SDK 已进入维护阶段,不再增加新特性。
1.3 开发环境搭建 (Windows/Linux/MacOS)
必须安装的工具
| 软件 | 用途 |
|---|---|
| Visual Studio Code | IDE |
| SEGGER J-Link | 调试器驱动 |
| nRF Connect for Desktop | 桌面工具集 |
| nRF Util | 命令行工具 (包管理器) |
| NCS Toolchain | 编译工具链 (GCC/CMake/Python/Ninja) |
安装步骤
-
安装 VS Code + nRF Connect for VS Code Extension Pack
-
安装 J-Link 驱动
-
参考: https://docs.nordicsemi.com/bundle/ncs-latest/page/nrf/installation/recommended_versions.html
-
安装 nRF Util ```bash # 安装常用子命令 nrfutil install device toolchain-manager sdk-manager completion
# 启用命令行补全 nrfutil completion install powershell # Windows nrfutil completion install bash # Linux ```
- 安装 SDK 和 Toolchain
- 推荐使用 VS Code nRF Connect 插件安装
- 中国用户选择 "Mainland China" 服务器 (国内镜像加速)
SDK 安装目录结构
ncs/
├── toolchains/
│ ├── v2.9.0/
│ └── v3.0.0/
├── v2.9.0/ # SDK 源码
│ ├── nrf/ # Nordic 主仓库
│ ├── zephyr/ # Zephyr RTOS
│ ├── modules/ # 第三方模块
│ └── mcuboot/ # Bootloader
└── v3.0.0/
1.4 创建第一个工程
方式一: 基于例程创建
# 在 VS Code 中
1. 打开 nRF Connect 插件
2. Applications → Create New Application
3. 选择 "Copy a sample"
4. 选择例程 (如: peripheral_uart)
5. 选择目标开发板
方式二: 命令行
# 进入 NCS 命令行环境
nrfutil toolchain-manager launch --ncs-version v2.9.0 --shell
# 编译
west build -b nrf52840dk/nrf52840
# 烧录
west flash
1.5 开发板型号命名规则
nrf54l15dk/nrf54l15/cpuapp
│ │ │
│ │ └── cpuapp: 应用核 (M33)
│ │ cpunet: 网络核
│ │ ns: 非安全域 (TrustZone)
│ │
│ └── 芯片型号
│
└── 开发板名称 (dk = Development Kit)
1.6 编译与配置系统
Kconfig - 软件配置
- 作用: 定义编译选项 (宏)
- 文件:
Kconfig,prj.conf,*.conf - 工具:
nRF Kconfig GUI,menuconfig
DeviceTree - 硬件配置
- 作用: 定义外设、GPIO、中断等硬件信息
- 文件:
*.dts,*.dtsi,*.overlay - 工具: DeviceTree Visual Editor
重要文件
| 文件 | 作用 |
|---|---|
| CMakeLists.txt | 项目构建配置 |
| Kconfig | 配置项定义 |
| prj.conf | 默认配置 |
| app.overlay | 设备树覆盖 (通用) |
| boards/xxx.overlay | 设备树覆盖 (特定板) |
| pm_static.yml | 存储分区配置 |
1.7 常见问题解决
中文 Windows 编码问题
NCS v2.9.x 需要修改:
# zephyr/scripts/list_boards.py 第 229 行
with open(board_yml.open('r'), encoding='utf-8') as f:
NCS v3.1.x 需要修改:
# nrf/scripts/partition_manager.py 多处添加 encoding='utf-8'
Git 文件权限问题
# 在 SDK 根目录执行
west forall -c 'git config core.filemode false'
west forall -c 'git submodule foreach --recursive git config core.filemode false'
二、Bluetooth LE 开发
2.1 核心概念
- GAP: 广播、连接、扫描
- GATT: 服务、特性、属性
- Profile: 设备行为规范
- Service/Characteristic: 数据单元
- UUID: 服务标识 (16/32/128 位)
2.2 配对与安全
| 配对方法 | 安全等级 | 用途 |
|---|---|---|
| Just Works | 低 | 简单配对 |
| Passkey Entry | 中 | 输入密码 |
| OOB | 高 | 外部认证 |
2.3 典型例程
| 例程 | 说明 |
|---|---|
| peripheral_uart | 蓝牙串口透传 |
| peripheral_lbs | LED 按键服务 |
| central_uart | 中央设备透传 |
| ble_peripheral | 通用外设 |
三、Matter 开发
3.1 Matter 是什么?
Matter 是 CSA 联盟制定的智能家居统一标准,基于 IPv6,支持 Wi-Fi/Thread/Ethernet 三种传输协议。
核心特性: - 多生态兼容 (Apple HomeKit / Google Home / Amazon Alexa) - 统一应用层协议 - PKI 安全体系 - 支持 OTA 升级
3.2 Matter 网络架构
┌─────────────┐ ┌─────────────┐
│ Thread │────▶│ Border │────▶ Wi-Fi / Ethernet
│ 设备 │ │ Router │
└─────────────┘ └─────────────┘
│
┌──────▼──────┐
│ Matter │
│ Controller │
└─────────────┘
3.3 支持的 nRF 芯片
| 芯片 | 支持模式 |
|---|---|
| nRF54L15 | Matter over Thread |
| nRF54L10 | Matter over Thread |
| nRF5340 | Matter over Thread / Wi-Fi |
| nRF52840 | Matter over Thread |
Matter over Wi-Fi 需要额外 nRF7002/7001 协处理器
3.4 Matter 开发要点
数据模型
Node → Endpoint → Cluster → Attribute/Command/Event
- Node: Matter 设备实例
- Endpoint: 功能模块 (如门锁、温度传感器)
- Cluster: 功能集合 (OnOff, DoorLock, etc.)
- Attribute: 状态数据
- Command: 操作命令
- Event: 状态变化记录
配网 (Commissioning)
- 设备发出蓝牙广播
- Controller 扫描并连接
- 交换凭证、建立安全会话
- 设备加入 Matter Fabric
3.5 例程位置
nrf/samples/matter/
├── lock/ # 门锁例程
├── light/ # 灯泡例程
├── window_covering/ # 窗帘例程
└── template/ # 模板
四、固件升级 (OTA/DFU)
4.1 升级方式
| 方式 | 描述 |
|---|---|
| 蓝牙 OTA | 通过 BLE 空中升级 |
| MCUboot | 双区备份安全升级 |
| FOTA | 固件无线升级 |
4.2 MCUboot 升级流程
- 双区备份: A区运行、B区接收
- 镜像校验: 签名验证
- Swap/Overwrite: 切换新固件
- 回滚机制: 启动失败自动恢复
4.3 相关工具
nrfutil- 命令行升级工具nrf connect for desktop- 图形化工具
五、Zephyr 设备树与驱动
5.1 DeviceTree 语法
// 节点定义
uart0: uart@c6000 {
compatible = "nordic,nrf-uarte";
reg = <0xc6000 0x1000>;
interrupts = <0xc6 0x1>;
status = "okay";
current-speed = <115200>;
};
5.2 节点访问 API
// 获取节点 ID
#define UART0 DT_NODELABEL(uart0)
// 读取属性
uint32_t baud = DT_PROP(UART0, current-speed);
// 读取 GPIO
DT_NODELABEL(led0)
5.3 pinctrl 引脚复用
&pinctrl {
uart0_default: uart0_default {
group1 {
psels = <NRF_PSEL(UART_TX, 0, 6)>,
<NRF_PSEL(UART_RX, 0, 8)>;
};
};
};
六、开发工具链
6.1 nRF Util 子命令
| 命令 | 功能 |
|---|---|
| device | 设备烧录、擦除、恢复 |
| toolchain-manager | 工具链管理 |
| sdk-manager | SDK 管理 |
| dfu | 固件升级 |
| ble-sniffer | 蓝牙抓包 |
| trace | 跟踪调试 |
6.2 常用 west 命令
west build -b <board> # 编译
west flash # 烧录
west debug # 调试
west zepyr-export # 导出 Zephyr
west update # 更新 SDK
west boards # 列出支持的板子
6.3 J-Link 常用操作
# 擦除
nrfjprog --eraseall
# 烧录
nrfjprog --program firmware.hex --verify
# 恢复
nrfjprog --recover
# 查看设备
nrfjprog --ids
七、参考资源
官方文档
- https://docs.nordicsemi.com/bundle/ncs-latest/
博客
- iini: https://www.cnblogs.com/iini
- jayant97: https://www.cnblogs.com/jayant97
nRF Connect SDK 仓库
- https://github.com/nrfconnect/sdk-nrf
整理日期: 2026-03-11