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 区域的配置写入。
二、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 拒绝。
三、烧录校验与防错机制
烧录完成不等于烧录正确。产线必须建立“写入—回读—比对—记录”的闭环。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 记录。这样即使后续出现批量异常,也能快速定位到具体工位、具体固件版本和具体芯片批次。
总结来说,产线烧录方案的核心不是“选一个工具”,而是把文件、工具、芯片、校验和记录串成一条可拦截、可追溯的链路。nRF Connect Programmer 用于研发验证,nrfjprog 用于自动化产线,批量烧录器用于多工位量产;hex 作为主格式,bin 用于校验,uf2 用于现场升级;每一步都设置校验点,才能把烧录错误挡在出货之前。