4. 产线烧录与配置方案

在 nRF 系列芯片的量产交付中,烧录环节是产品从“可运行固件”变成“可出货整机”的第一道关口。它看似只是把固件写进芯片,实际上涉及三个必须同时成立的条件:固件镜像正确、写入过程可控、写入结果可验证。本节围绕工具选择、文件格式、批量方案与防错机制展开,帮助你把烧录从“能写进去”提升到“可追溯、可复现、可拦截错误”。

一、三类烧录工具的分工

Nordic 生态里最常用的烧录入口有三类,它们并不是互相替代,而是分别对应研发、小批量与量产三种场景。

nRF Connect Programmer 是图形化工具,适合研发调试、样机验证和少量烧录。它的优势是直观:拖入 hex 文件、选择芯片型号、点击 Erase & Write 即可完成。它支持读取芯片内存、查看 UICR 区域、合并多个 hex 文件,也支持生成烧录记录。缺点是难以嵌入自动化产线,不适合逐台重复操作。

nrfjprog 是命令行工具,是自动化脚本和产线工位的核心。它可以直接调用 J-Link 探针,完成擦除、烧录、校验、复位、读回等动作。典型命令如下:

nrfjprog --program firmware.hex --chiperase --verify --reset
nrfjprog --memrd 0x10001000 --n 4
nrfjprog --readcode readback.hex

第一条命令完成整片擦除、烧录、校验并复位;第二条读取 UICR 中 4 个字节,常用于确认配置是否写入;第三条把芯片内代码读回,用于比对或留档。nrfjprog 的价值在于可脚本化、可返回退出码,便于产线判断成功与失败。

批量烧录器 则是面向多工位、多通道的量产设备,例如支持一拖四、一拖八的离线烧录器,或带机械臂的自动烧录机。选型时要重点看:支持芯片型号、是否支持 hex/bin/uf2、是否支持序列号写入、是否支持校验回读、单次烧录节拍、通道数、是否支持 MES 对接。对于 nRF52/nRF53 系列,还要确认烧录器是否支持 SoftDevice 与 Application 的分区写入,以及 UICR 区域的配置写入。

nRF 产线烧录链路与防错节点 烧录文件 .hex(含地址) .bin(纯数据) .uf2(拖拽) 烧录工具 nRF Connect Programmer nrfjprog(命令行) 批量烧录器(多通道) 目标芯片 Flash 代码区 UICR 配置区 FICR 只读信息 校验与防错 --verify 回读比对 CRC / Hash 校验 序列号 / MAC 写入 量产防错机制(按拦截顺序) ① 文件防错 版本号 / 哈希 / 命名 ② 芯片防错 型号 / 版本 / 空片检测 ③ 写入防错 擦除 / 写入 / 校验 ④ 配置防错 UICR / 序列号 / 密钥 ⑤ 记录防错 日志 / MES 绑定 任一节点失败即拦截,不允许流入下一工位

二、hex、bin、uf2 的差异与选用

三种文件格式的本质区别在于“是否携带地址信息”和“是否适合拖拽烧录”。

hex 是 Intel HEX 格式,每行包含地址、数据和校验和,可以描述多个不连续的内存段。nRF 的 SoftDevice、Application、Bootloader 往往分布在不同的 Flash 地址,因此量产固件通常以 hex 形式交付,或者把多个 hex 合并成一个完整 hex。合并时要注意地址不能重叠,否则会覆盖。

bin 是纯二进制数据,不带地址。烧录时必须显式指定起始地址,例如 nrfjprog --program app.bin --baseaddr 0x26000。bin 的优点是体积小、便于做哈希比对;缺点是地址信息丢失,一旦起始地址写错,固件就会写到错误位置,甚至覆盖 SoftDevice。

uf2 是微软提出的拖拽式格式,内部按 512 字节块封装,每块带目标地址和校验。它适合带 UF2 Bootloader 的设备,用户把 uf2 文件拖到 U 盘即可烧录。量产中如果使用 UF2,要确认 Bootloader 版本、UF2 家族 ID 与芯片型号匹配,否则会被 Bootloader 拒绝。

量产交付建议:以 hex 作为主交付格式,bin 用于哈希校验和差分升级,uf2 仅用于带 Bootloader 的现场升级或返修场景。

三、烧录校验与防错机制

烧录完成不等于烧录正确。产线必须建立“写入—回读—比对—记录”的闭环。nrfjprog 的 --verify 会在写入后逐字节回读比对,失败时返回非零退出码,脚本据此判定工位失败。对于批量烧录器,要确认其是否支持“烧录后自动校验”,以及校验失败时是否报警并锁定工位。

除了回读比对,还可以在固件中预置 CRC 或哈希。例如在 Flash 末尾写入固件 CRC32,产线烧录后由测试工装读取该值并与上位机计算的期望值比对。这种方式不依赖烧录器,适合作为二次校验。

防错机制要覆盖五个节点:

  • 文件防错:固件命名包含项目、版本、日期,烧录前校验 SHA256,防止拿错版本。
  • 芯片防错:读取 FICR 中的型号与版本,确认是 nRF52832 还是 nRF52840,避免烧错芯片。
  • 写入防错:先整片擦除,再写入,再校验;禁止在未擦除的芯片上直接覆盖写入。
  • 配置防错:UICR 中的 REGOUT0、PSELRESET、APPROTECT 等配置必须与硬件匹配,写错会导致芯片无法启动或无法调试。
  • 记录防错:每台设备记录烧录时间、工位号、固件版本、芯片 ID、校验结果,并与 MES 绑定,便于追溯。

四、产线烧录方案示例

以一个 nRF52840 产品为例,量产固件由 SoftDevice S140、Application 和 Bootloader 组成,分别位于 0x00000、0x26000 和 0xF8000。产线采用 nrfjprog 脚本 + 一拖四烧录器,单次节拍约 25 秒。烧录脚本核心逻辑如下:

nrfjprog --eraseall
nrfjprog --program s140.hex --verify
nrfjprog --program app.hex --verify
nrfjprog --program bootloader.hex --verify
nrfjprog --memwr 0x10001014 --val 0x000F8000
nrfjprog --memrd 0x10001014 --n 4
nrfjprog --reset

其中 --memwr 向 UICR 写入 Bootloader 起始地址,--memrd 回读确认。若回读值与写入值不一致,脚本立即退出并报警。烧录完成后,工装读取芯片 ID 和固件 CRC,写入 MES 记录。这样即使后续出现批量异常,也能快速定位到具体工位、具体固件版本和具体芯片批次。

注意:nRF52 系列在写入 UICR 后通常需要复位才能生效;APPROTECT 一旦启用,可能关闭调试接口,量产前必须确认该配置与返修策略一致,避免无法重新烧录。

总结来说,产线烧录方案的核心不是“选一个工具”,而是把文件、工具、芯片、校验和记录串成一条可拦截、可追溯的链路。nRF Connect Programmer 用于研发验证,nrfjprog 用于自动化产线,批量烧录器用于多工位量产;hex 作为主格式,bin 用于校验,uf2 用于现场升级;每一步都设置校验点,才能把烧录错误挡在出货之前。