4. nRF Connect Programmer与命令行工具
在nRF生产测试与自动化烧录中,图形化的nRF Connect Programmer适合人工验证与快速排查,而真正进入产线、CI或批量工位时,命令行工具才是主力。本节围绕三条命令链展开:nrfjprog负责通过调试探针直接操作芯片(擦除、烧录、校验、读回、复位),mergehex负责把多个Intel HEX文件合并成一个可一次性烧录的镜像,nrfutil负责生成DFU升级包、管理设备与执行更高层的烧录/升级流程。理解它们与J-Link、CMSIS-DAP的底层交互,才能判断一条命令为什么成功或失败。
一、工具分工与底层链路
nrfjprog是Nordic官方命令行烧录工具,它并不直接“对着芯片说话”,而是通过调试探针的驱动接口访问芯片的调试访问端口(DAP),再经AHB-AP访问NVMC(非易失存储器控制器)完成擦写。使用J-Link时,nrfjprog调用SEGGER的J-Link DLL;使用CMSIS-DAP探针(如nRF5340 DK板载调试器、DAPLink)时,则通过CMSIS-DAP接口与DAP通信。两者最终都落到同一组底层操作:ERASEPAGE、ERASEALL、写Flash、读Flash、复位并运行。
mergehex是纯离线工具,不接触硬件,只做HEX文件的地址空间合并与冲突检测。nrfutil则是包管理与设备操作的集合,例如nrfutil pkg generate生成DFU包,nrfutil device子命令可执行擦除、烧录、复位等操作,其底层同样可走J-Link或CMSIS-DAP。三者的关系可以概括为:mergehex准备镜像,nrfjprog/nrfutil把镜像写进芯片,nrfutil还额外承担升级包与设备管理。
二、nrfjprog:擦除、烧录、校验、读回
nrfjprog的典型生产命令序列如下。先确认探针与芯片被识别:
nrfjprog --ids
nrfjprog --deviceversion
接着执行全片擦除。对nRF52系列,--eraseall会擦除整个Flash并复位UICR区域;若只想擦除应用区,可用--erasepage指定页地址。擦除后烧录合并镜像:
nrfjprog --eraseall -f nrf52
nrfjprog --program merged.hex --verify -f nrf52
nrfjprog --reset -f nrf52
其中--verify会在写入后逐字节回读比对,是生产环节最关键的防错步骤。若需要把芯片内容读回做比对或留档,可用:
nrfjprog --readcode readback.hex -f nrf52
nrfjprog --readuicr uicr.hex -f nrf52
读回后可用mergehex或文本比对工具与原始镜像比较。注意:启用了读保护(APPROTECT)的芯片无法读回,此时--readcode会失败,这本身也是判断保护状态的一种手段。
三、mergehex:镜像合并与冲突检测
mergehex把多个HEX按地址空间合并。若两个文件在同一地址有重叠数据,mergehex会报冲突并拒绝输出,这正是它比手工拼接更安全的地方。典型用法:
mergehex --merge softdevice.hex app.hex bootloader.hex settings.hex \
--output merged.hex
合并前应确认各镜像的地址布局:SoftDevice通常从0x00000000开始,Bootloader位于高端地址,settings区在Bootloader之后。若地址重叠,先检查链接脚本或分区配置,而不是强行合并。合并后的单一HEX可被nrfjprog一次性烧录,减少产线命令数量与出错概率。
四、nrfutil:DFU包与设备操作
nrfutil在产线中常用于生成DFU升级包,以及通过device子命令执行烧录。生成一个应用DFU包:
nrfutil pkg generate --hw-version 52 --sd-req 0x0100 \
--application app.hex --application-version 1 app_dfu.zip
其中--sd-req指定所依赖的SoftDevice版本,--hw-version对应硬件版本。生成后用nrfutil device program烧录,或通过串口/BLE执行DFU升级。nrfutil的device命令底层同样调用探针接口,因此J-Link与CMSIS-DAP的差异会体现在设备枚举与连接速度上。
五、J-Link与CMSIS-DAP的差异与排障
J-Link通常速度更快、支持更多高级功能(如RTT、实时读取),在量产工位中更常见;CMSIS-DAP则胜在开放、成本低,常见于开发板板载调试器。两者在nrfjprog中的选择通过--probe或环境变量控制。常见问题与判断:
- 找不到设备:先跑
nrfjprog --ids,无输出则检查USB连接、驱动与探针固件。 - 擦除失败:可能是读保护已开启,需先
--recover解除保护,该操作会全片擦除。 - 校验失败:检查供电是否稳定、时钟是否正常,或镜像地址是否与芯片型号匹配。
- CMSIS-DAP连接慢:可降低SWD时钟或改用J-Link进行量产烧录。
--eraseall、--program --verify、--reset写成一条批处理或脚本,并在每步后检查返回码。nrfjprog返回0表示成功,非0需立即停线排查,避免不良品流入下一工位。六、一条可复用的产线命令模板
下面给出一个可直接参考的烧录脚本骨架(示例参数,需按实际芯片与镜像调整):
@echo off
set CHIP=nrf52840_xxAA
set IMG=merged.hex
nrfjprog --eraseall -f %CHIP%
if errorlevel 1 goto FAIL
nrfjprog --program %IMG% --verify -f %CHIP%
if errorlevel 1 goto FAIL
nrfjprog --reset -f %CHIP%
echo PASS
exit /b 0
:FAIL
echo FAIL
exit /b 1
该模板把擦除、烧录校验、复位串成闭环,并用返回码决定PASS/FAIL。实际产线中还可加入读回比对、UICR写入、MAC地址写入等步骤。理解nrfjprog、mergehex、nrfutil各自职责以及它们与J-Link/CMSIS-DAP的交互层次,就能在出现异常时快速定位是镜像问题、探针问题还是芯片保护问题,而不是盲目重试。