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 → 最后扩展”。

nRF Connect SDK 开发环境三层结构 VS Code + nRF Connect 扩展 构建 / 烧录 / 调试 / 串口 / 设备树查看 nRF Connect SDK(west 管理多仓库) nrf 应用仓库 zephyr RTOS nrfxlib 协议栈 mcuboot 工具链与命令行工具 Zephyr SDK(arm-zephyr-eabi) Python + west nrfutil / OpenOCD nRF52/53 开发板 LED1 USB 安装顺序:工具链 → SDK → VS Code 扩展;任一层缺失都会导致构建或烧录失败

二、安装工具链与 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 图标。首次使用时需要做三件事:

  1. 指定 SDK 路径:在扩展的 “Manage SDKs” 中添加已安装的 ncs/v2.6.1 目录,扩展会自动识别其中的 west 工作区。
  2. 选择工具链:在 “Manage Toolchains” 中指向 toolchains/ 下的编译器目录,确保 arm-zephyr-eabi-gcc 可被调用。
  3. 配置 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 线是否连接、以及串口终端是否输出了启动日志。

nRF5340 是双核架构,Blinky 默认运行在应用核(cpuapp)上。如果误选了 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 报找不到 ZephyrSDK 路径未指定或 west 未初始化检查扩展中 SDK 路径,执行 west update
编译报 arm-zephyr-eabi-gcc 不存在工具链未安装或 PATH 未配置在扩展中重新选择 toolchain 目录
烧录时报 “No board found”J-Link 驱动缺失或 USB 未识别安装 J-Link 驱动,检查设备管理器
LED 不闪但烧录成功board target 与实物不匹配核对开发板丝印与 target 名称
串口无输出波特率或端口选错设为 115200,选择对应 COM 口