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)

安装步骤

  1. 安装 VS Code + nRF Connect for VS Code Extension Pack

  2. 安装 J-Link 驱动

  3. 参考: https://docs.nordicsemi.com/bundle/ncs-latest/page/nrf/installation/recommended_versions.html

  4. 安装 nRF Util ```bash # 安装常用子命令 nrfutil install device toolchain-manager sdk-manager completion

# 启用命令行补全 nrfutil completion install powershell # Windows nrfutil completion install bash # Linux ```

  1. 安装 SDK 和 Toolchain
  2. 推荐使用 VS Code nRF Connect 插件安装
  3. 中国用户选择 "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)

  1. 设备发出蓝牙广播
  2. Controller 扫描并连接
  3. 交换凭证、建立安全会话
  4. 设备加入 Matter Fabric

3.5 例程位置

nrf/samples/matter/
├── lock/           # 门锁例程
├── light/         # 灯泡例程
├── window_covering/ # 窗帘例程
└── template/      # 模板

四、固件升级 (OTA/DFU)

4.1 升级方式

方式 描述
蓝牙 OTA 通过 BLE 空中升级
MCUboot 双区备份安全升级
FOTA 固件无线升级

4.2 MCUboot 升级流程

  1. 双区备份: A区运行、B区接收
  2. 镜像校验: 签名验证
  3. Swap/Overwrite: 切换新固件
  4. 回滚机制: 启动失败自动恢复

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