[nrf52][SDK17] 如何使用官方BootLoader
前言本文记录 nRF52 系列芯片在开发过程中BootLoader 与 APP 固件的烧录方法。内容包括 BootLoader 单独烧录、以及将 BootLoader、MBR、Settings 与 APP 合并后一次性烧录的完整流程并附上可直接使用的批处理脚本方便后续开发与量产。1. 环境准备安装 nRF Command Line Tools包含 nrfjprog、mergehex 等工具准备 nRF5 SDK 17.0.2路径示例nRF5_SDK_17.0.2_d674dde准备 micro-ecc 加密库放入external\micro-ecc目录使用 Keil 编译 BootLoader 工程与 APP 工程2. BootLoader 单独烧录下面是 BootLoader 单独烧录的完整流程编译 BootLoader 工程准备 MBR 文件nrfjprog --eraseall 擦除芯片烧录 BootLoader 固件烧录 MBR 引导文件nrfjprog --reset 复位芯片烧录完成整个流程按「擦除 → 烧录 BootLoader → 烧录 MBR → 复位」的顺序执行其中 MBR 必须单独烧录否则 BootLoader 无法正常启动。编译 BootLoader 工程生成nrf52_boot_usb_dfu.hex将mbr_nrf52_2.4.1_mbr.hex复制到工程根目录编写program.bat脚本依次执行擦除、烧录 BootLoader、烧录 MBR、复位芯片完整的program.bat脚本如下echo off echo eraseall nrfjprog --eraseall echo program boot.hex nrfjprog --program .\out\nrf52_boot_usb_dfu.hex --verify echo program mbr_nrf52_2.4.1_mbr.hex nrfjprog --program .\mbr_nrf52_2.4.1_mbr.hex --verify echo reset chip nrfjprog --reset脚本关键步骤说明nrfjprog --eraseall擦除芯片全部 Flash确保烧录前芯片处于干净状态nrfjprog --program .\out\nrf52_boot_usb_dfu.hex --verify烧录 BootLoader 固件--verify会在烧录后自动校验数据一致性nrfjprog --program .\mbr_nrf52_2.4.1_mbr.hex --verify烧录 MBR 引导文件MBR 必须单独烧录否则 BootLoader 无法正常启动nrfjprog --reset复位芯片使新烧录的固件生效3. APP 一次性烧录Boot MBR Settings APP使用 nrfutil 生成 settings 文件使用 mergehex 合并 BootLoader、Settings、APP 三个 hex 文件擦除芯片后烧录合并文件再烧录 MBR 文件并复位芯片完整的program_app.bat脚本如下echo off echo generate settings file nrfutil settings generate --family NRF52 --application .\out\nrf52_app.hex --application-version 1 --bootloader-version 1 --bl-settings-version 1 .\out\settings.hex echo merge boot settings app mergehex --merge .\out\nrf52_boot_usb_dfu.hex .\out\settings.hex .\out\nrf52_app.hex --output .\out\app_merged.hex echo eraseall nrfjprog --eraseall echo program merged hex nrfjprog --program .\out\app_merged.hex --verify echo program mbr_nrf52_2.4.1_mbr.hex nrfjprog --program .\mbr_nrf52_2.4.1_mbr.hex --verify echo reset chip nrfjprog --reset脚本关键步骤说明nrfutil settings generate根据 APP 固件生成 settings 文件其中--application-version与--bootloader-version需与工程配置一致--bl-settings-version为 BootLoader 的 settings 版本号mergehex --merge将 BootLoader、Settings、APP 三个 hex 文件合并为一个app_merged.hex实现一次烧录nrfjprog --eraseall擦除芯片全部 Flash确保烧录前芯片处于干净状态nrfjprog --program .\out\app_merged.hex --verify烧录合并后的固件文件--verify会在烧录后自动校验数据一致性nrfjprog --program .\mbr_nrf52_2.4.1_mbr.hex --verify烧录 MBR 引导文件MBR 必须单独烧录否则 BootLoader 无法正常启动nrfjprog --reset复位芯片使新烧录的固件生效4. 常见错误与排查4.1 nrfjprog 烧录失败错误提示ERROR: Unable to connect to the target device. ERROR: Could not connect to the debug probe.原因分析芯片处于低功耗模式或已进入 DFU 模式调试接口被关闭J-Link 驱动未安装或版本过旧接线松动、供电不足或目标板未上电芯片被--eraseall擦除后处于空白状态但连接时序异常解决步骤检查 J-Link 与目标板的 SWD 接线SWDIO、SWCLK、GND、VTref确认目标板已上电重新安装或升级 J-Link 驱动确保 nRF Command Line Tools 与 J-Link 版本兼容按住目标板复位键执行以下命令强制连接nrfjprog --recover恢复成功后重新执行擦除与烧录nrfjprog --eraseall nrfjprog --program .\out\nrf52_boot_usb_dfu.hex --verify nrfjprog --reset4.2 mergehex 合并报错错误提示ERROR: The input files overlap in memory. ERROR: Failed to merge files: address range conflict.原因分析BootLoader、Settings、APP 三个 hex 文件的地址区间存在重叠APP 工程的链接脚本.icf或.ld起始地址设置错误与 BootLoader 占用的 Flash 区间冲突Settings 文件生成时使用的起始地址与 BootLoader 的 settings 页地址不一致解决步骤使用mergehex --info查看各 hex 文件的地址分布mergehex --info .\out\nrf52_boot_usb_dfu.hex mergehex --info .\out\settings.hex mergehex --info .\out\nrf52_app.hex确认 APP 工程的 Flash 起始地址正确。以 nRF52832 为例BootLoader 通常占用末尾 0x10000 字节APP 起始地址应设为0x1F000APP_START_ADDRESS 0x1F000若地址冲突修改 APP 工程链接脚本后重新编译再执行合并mergehex --merge .\out\nrf52_boot_usb_dfu.hex .\out\settings.hex .\out\nrf52_app.hex --output .\out\app_merged.hex4.3 settings 版本不匹配错误提示ERROR: Bootloader version mismatch. Expected: 1, Actual: 2. ERROR: Settings page is invalid or corrupted.原因分析nrfutil settings generate中的--bootloader-version与 BootLoader 工程中配置的版本号不一致--application-version与 APP 工程中定义的版本号不一致--bl-settings-version与 BootLoader 期望的 settings 页版本不匹配解决步骤查看 BootLoader 工程源码中的版本宏定义例如nrf_dfu_types.h或nrf_dfu_settings.h#defineBOOTLOADER_VERSION1#defineAPP_VERSION1#defineDFU_SETTINGS_VERSION1使用与工程配置一致的版本号重新生成 settings 文件nrfutil settings generate --family NRF52 --application .\out\nrf52_app.hex --application-version 1 --bootloader-version 1 --bl-settings-version 1 .\out\settings.hex重新合并并烧录mergehex --merge .\out\nrf52_boot_usb_dfu.hex .\out\settings.hex .\out\nrf52_app.hex --output .\out\app_merged.hex nrfjprog --eraseall nrfjprog --program .\out\app_merged.hex --verify nrfjprog --reset总结本文提供了 BootLoader 单独烧录与 Boot MBR Settings APP 合并烧录两种方案并给出了可直接复用的批处理脚本。实际开发中可根据需求选择对应流程注意烧录顺序与文件路径配置。参考资料nRF5 SDK 17.0.2 官方文档nRF Command Line Tools 用户手册micro-ecc 加密库说明