2. nRF Connect SDK开发环境搭建
nRF Connect SDK(简称 NCS)是 Nordic 官方为 nRF52、nRF53、nRF91 等系列芯片提供的统一软件开发套件,它把 Zephyr RTOS、协议栈(蓝牙、Thread、Zigbee、蜂窝)、驱动、示例工程和构建系统打包在一起。要开始资产追踪设备的开发,第一步就是把工具链、SDK、编辑器三者的关系理顺,并让一个最小工程真正在开发板上跑起来。本节围绕“装什么、怎么装、怎么验证”展开,最终以 Blinky 点亮 LED 作为环境可用的判据。
一、先理解 NCS 的组成与依赖关系
NCS 并不是一个单独的安装包,而是由几层组件协作构成的。最底层是 工具链:包括 Zephyr SDK(提供 arm-zephyr-eabi 交叉编译器、调试器 GDB、OpenOCD 等)以及 Python 环境(west、pyocd、nrfutil 等脚本工具)。中间层是 SDK 本体:nrf 仓库(应用代码、示例、板级定义)加上 zephyr、mcuboot、nrfxlib、matter 等被 west 管理的多个仓库。最上层是 编辑器与扩展:VS Code 配合 nRF Connect for VS Code 扩展,把构建、烧录、调试、串口终端、设备树查看等操作图形化。
三者关系可以用下面的结构图表示:工具链提供编译与烧录能力,SDK 提供源码与配置,VS Code 扩展负责调度前两者。任何一层缺失,都会在构建或烧录阶段报错,因此安装顺序建议是“先工具链 → 再 SDK → 最后扩展”。
二、安装工具链与 SDK
Nordic 提供了两种主流安装方式:一是使用 nRF Connect for Desktop 中的 Toolchain Manager,二是使用命令行 nrfutil。前者适合初学者,图形界面会自动下载工具链并管理多个 SDK 版本;后者适合需要脚本化、CI 集成的团队。下面以命令行方式说明关键步骤,便于理解每一步到底装了什么。
首先安装 nrfutil(Nordic 的通用命令行工具),然后通过它安装工具链管理器:
# 安装 nrfutil(以 Windows 为例,下载后加入 PATH)
nrfutil install toolchain-manager
# 查看可用 SDK 版本
nrfutil toolchain-manager search
# 安装指定版本 SDK(示例:v2.6.1)
nrfutil toolchain-manager install --ncs-version v2.6.1
# 列出已安装的工具链
nrfutil toolchain-manager list
安装完成后,SDK 通常位于用户目录下的 ncs/v2.6.1,其中 nrf/ 是应用仓库,zephyr/ 是 RTOS 本体,modules/ 下是各协议栈与驱动模块。工具链本身(编译器、GDB、OpenOCD)则放在 toolchains/ 目录中。理解这个目录结构,有助于后续在 VS Code 中正确指定 SDK 路径。
nrfutil toolchain-manager install --install-dir 指定本地路径安装,避免构建时反复拉取依赖。三、配置 VS Code 与 nRF Connect 扩展
VS Code 本身只是编辑器,真正让它具备 NCS 开发能力的是 nRF Connect for VS Code Extension Pack。在扩展市场搜索 “nRF Connect” 并安装后,左侧活动栏会出现 Nordic 图标。首次使用时需要做三件事:
- 指定 SDK 路径:在扩展的 “Manage SDKs” 中添加已安装的
ncs/v2.6.1目录,扩展会自动识别其中的 west 工作区。 - 选择工具链:在 “Manage Toolchains” 中指向
toolchains/下的编译器目录,确保arm-zephyr-eabi-gcc可被调用。 - 配置 Python 环境:扩展会提示创建或选择一个虚拟环境,用于运行 west、pyocd 等脚本。建议使用 SDK 自带的 Python,避免版本冲突。
配置完成后,可以在 VS Code 命令面板执行 nRF Connect: Welcome,如果能看到 “Create a new application”“Open an existing application” 等入口,说明扩展已正常工作。此时再打开一个示例工程,扩展会自动生成 build/ 目录并调用 CMake 与 Ninja 完成配置。
四、创建第一个工程并烧录 Blinky
验证环境最直接的方式是创建 Blinky 示例。在 VS Code 中点击 “Create a new application”,选择 “Copy a sample”,然后在搜索框中输入 blinky。NCS 提供了多个版本的 Blinky,针对 nRF52 和 nRF53 分别有 zephyr/samples/basic/blinky 和 nrf/samples/blinky。对于资产追踪设备常用的 nRF52840 DK 或 nRF5340 DK,选择与板卡匹配的示例即可。
创建工程时需要指定三个关键参数:
- Application name:例如
blinky_nrf52840,仅作为工程目录名。 - Board target:例如
nrf52840dk_nrf52840或nrf5340dk_nrf5340_cpuapp。这个字符串决定了引脚映射、时钟配置和链接脚本。 - Build configuration:通常选择
debug,便于后续单步调试;发布时再切换为release。
工程创建后,VS Code 会自动执行 CMake 配置。如果一切正常,底部终端会输出类似 Building for board nrf52840dk_nrf52840 的信息,并在 build/zephyr/zephyr.hex 生成可烧录文件。此时点击 “Flash” 按钮,扩展会调用 west flash,通过板载 J-Link 将固件写入芯片。
烧录成功的直观现象是开发板上的 LED1 以约 1 秒周期闪烁。Blinky 示例的核心逻辑是:在设备树中通过 aliases 找到 led0 对应的 GPIO,然后在主循环中调用 gpio_pin_toggle_dt() 翻转电平,并用 k_msleep(1000) 控制节奏。如果 LED 不亮,通常需要检查三处:板卡目标是否选错、USB 线是否连接、以及串口终端是否输出了启动日志。
cpuapp 之外的核,或者没有先烧录网络核固件,可能出现应用核无法启动的情况。此时应确认 board target 后缀为 _cpuapp,并按需先烧录 hci_ipc 等网络核示例。五、用构建输出与日志判断环境是否真正可用
LED 闪烁只是最终现象,更可靠的验证是查看构建与运行日志。构建阶段应关注:CMake 是否找到 Zephyr、是否成功解析 prj.conf、链接是否通过。运行阶段可以打开 VS Code 的 “Serial Terminal”,波特率设为 115200,复位开发板后应看到类似 *** Booting Zephyr OS build v3.x.x *** 的启动信息。如果能看到这行日志,说明工具链、SDK、扩展、板卡四者已经打通。
下表汇总了环境搭建过程中最常见的几类问题与排查方向,可作为搭建完成后的自查清单:
| 现象 | 可能原因 | 排查方向 |
|---|---|---|
| CMake 报找不到 Zephyr | SDK 路径未指定或 west 未初始化 | 检查扩展中 SDK 路径,执行 west update |
| 编译报 arm-zephyr-eabi-gcc 不存在 | 工具链未安装或 PATH 未配置 | 在扩展中重新选择 toolchain 目录 |
| 烧录时报 “No board found” | J-Link 驱动缺失或 USB 未识别 | 安装 J-Link 驱动,检查设备管理器 |
| LED 不闪但烧录成功 | board target 与实物不匹配 | 核对开发板丝印与 target 名称 |
| 串口无输出 | 波特率或端口选错 | 设为 115200,选择对应 COM 口 |