3. nRF Connect SDK开发环境搭建

nRF54系列(如nRF54L15、nRF54H20)的软件开发不再使用传统的nRF5 SDK,而是统一收敛到nRF Connect SDK(简称NCS)。NCS不是单一SDK,而是一套以Zephyr RTOS为内核、以west为构建与仓库管理工具、以VS Code为推荐IDE的完整开发平台。理解这三者的分工,是环境搭建能否一次成功的关键:west负责拉取和同步多个Git仓库并驱动构建,Zephyr提供内核、驱动模型与设备树机制,VS Code插件(nRF Connect for VS Code)则把工具链、配置、编译、烧录和调试封装成可视化操作。

工具链与安装方式的选择

NCS提供两种主流安装路径。第一种是Toolchain Manager(随nRF Connect for Desktop安装),它以图形化方式下载指定版本的NCS、配套的Zephyr SDK(含arm-zephyr-eabi交叉编译器、GDB、OpenOCD等)以及Python依赖,适合初学者和需要多版本并存的场景。第二种是手动安装:自行安装Python 3.8+、Git、west、ninja、cmake,再通过west更新仓库,适合需要精细控制或CI环境的开发者。

无论哪种方式,最终都会得到一个“工具链版本 + NCS版本”的组合。例如选择NCS v2.6.0时,Toolchain Manager会安装对应的Zephyr SDK 0.16.x。需要特别注意的是:NCS版本与Zephyr SDK版本必须匹配,混用会导致编译期找不到编译器或链接脚本报错。安装完成后,Toolchain Manager会提供“Open Terminal”入口,该终端已自动设置好ZEPHYR_BASE、PATH等环境变量,后续所有west命令都应在此终端中执行。

west构建系统的工作机制

west是Zephyr项目的元工具,核心概念是manifest(清单)。NCS的manifest文件west.yml位于nrf/west.yml,它声明了Zephyr、nrfxlib、mbedtls、MCUboot等所有依赖仓库的URL和revision。执行west update时,west读取manifest,把每个仓库检出到指定commit,从而保证整个工作区版本一致、可复现。

# 在 Toolchain Manager 打开的终端中
west --version                 # 确认 west 可用
west update                    # 按 manifest 拉取/同步所有仓库
west list                      # 查看各仓库路径与 revision
west build -b nrf54l15dk/nrf54l15/cpuapp \
  zephyr/samples/hello_world   # 指定板级与示例路径
west flash                     # 烧录到开发板

其中-b后的板级标识采用“板名/SoC/核心”的层级写法,nRF54L15 DK对应nrf54l15dk/nrf54l15/cpuapp,nRF54H20 DK则涉及cpuapp与cpuppr等多核目标,写错会导致“board not found”。构建产物默认位于build/zephyr/,其中zephyr.hex是烧录文件,zephyr.elf用于调试。

VS Code插件与Zephyr配置

安装“nRF Connect for VS Code”扩展包后,左侧会出现nRF Connect图标。首次使用需在设置中指定NCS安装路径(Toolchain Manager安装的默认在~/ncs或%USERPROFILE%\ncs)。随后通过“Create a new application”从示例创建工程,插件会自动生成build配置并识别板级。

Zephyr的配置体系由三层构成:Kconfig决定编译哪些功能(如CONFIG_BT=y),设备树(Devicetree)描述硬件资源与外设实例,CMake负责组织构建。工程根目录下的prj.conf用于覆盖默认Kconfig值,boards/<board>.overlay用于追加或修改设备树节点。例如要让nRF54L15的UART0以115200波特率输出日志,可在overlay中调整对应节点,并在prj.conf中确认CONFIG_SERIAL=y与CONFIG_LOG=y。修改配置后,插件会提示“Pristine Build”,因为Kconfig与设备树变更需要重新生成构建缓存,普通增量编译可能不生效。

判断配置是否生效,最直接的方法是查看build/zephyr/.config中对应项是否为=y,以及build/zephyr/zephyr.dts中节点是否按预期生成。这两个文件是Kconfig与设备树的“最终真相”。

编译、烧录与结果判断

在VS Code中点击“Build”后,输出窗口会显示CMake配置、编译进度与内存占用。以hello_world为例,编译成功会输出类似“Memory region Used Size Region Size %age Used FLASH: 28KB 1MB 2.8% RAM: 5KB 256KB 2.0%”的摘要,这是判断工程是否正常的重要依据。若FLASH占用异常偏大,通常说明误开了大量Kconfig选项。

烧录前需确认调试器连接正常。nRF54系列DK板载J-Link,插件会自动识别。点击“Flash”后,若成功会提示“Flashing completed”。此时打开串口终端(插件内置Serial Terminal,或使用外部工具),波特率设为115200,复位开发板,应能看到*** Booting Zephyr OS ***以及Hello World! nrf54l15dk字样。若串口无输出,依次检查:板级是否选对、prj.conf是否启用串口与日志、overlay中UART引脚是否与硬件一致、终端波特率是否匹配。

nRF Connect SDK 环境搭建与构建链路 Toolchain Manager NCS v2.6.0 + Zephyr SDK 0.16.x Python / Git / ninja / cmake 自动设置 ZEPHYR_BASE 与 PATH west manifest (west.yml) zephyr / nrfxlib / mbedtls MCUboot / trusted-firmware-m west update → 版本可复现 VS Code 插件 nRF Connect for VS Code Build / Flash / Debug Serial Terminal 115200 Zephyr 配置三层体系 Kconfig prj.conf 覆盖默认值 Devicetree .overlay 追加/修改节点 CMake 组织构建与链接 构建产物与验证点 zephyr.hex 烧录文件 zephyr.elf 调试符号 .config / zephyr.dts 配置最终真相 nRF54L15 DK J-Link 调试器 UART 115200

整个链路的因果关系可以这样理解:Toolchain Manager解决“工具从哪来”,west manifest解决“代码版本如何对齐”,VS Code插件解决“如何操作”,而Kconfig与设备树解决“编译出什么”。四者缺一不可。实际排障时,建议按“工具链终端能否执行west → west update是否成功 → 板级标识是否正确 → .config与zephyr.dts是否符合预期 → 串口是否有输出”的顺序逐层排查,绝大多数环境问题都能在这一链路中被定位。