使用srec_cat合并OpenBLT Bootloader与量产固件时遇启动地址警告及无法启动问题
解决方法
1. 给固件补全执行起始地址
srec_cat报的警告是因为firmware.srec里没有SREC格式要求的执行起始地址记录。STM32固件的入口是复位向量表的第二个条目,也就是0x08008004,直接执行这条命令给固件补上:
srec_cat firmware.srec -generate 0x08008004 -4 -execute 0x08008004 -o firmware_with_start.srec
2. 合并处理后的固件与Bootloader
用补全起始地址后的固件文件和Bootloader合并:
srec_cat bootloader.srec firmware_with_start.srec -o combined.srec
3. 添加Bootloader识别用的魔术字
OpenBLT的Bootloader启动时,会检查固件起始地址(0x08008000)是否存在特定魔术字(比如0x5AA5),以此判断固件是否有效。你用Microboot烧录时工具会自动添加这个魔术字,但原始firmware.srec里没有,所以得手动补上:
srec_cat firmware_with_start.srec -generate 0x08008000 -2 -constant 0x5AA5 -o firmware_with_magic.srec
再重新合并:
srec_cat bootloader.srec firmware_with_magic.srec -o combined.srec
4. 验证合并结果
用srec_info检查合并后的文件,确认地址范围覆盖Bootloader(08000000 - 0800381F)和固件(08008000 - 0806CE43),且执行起始地址正确:
srec_info combined.srec
补充说明
单独烧Bootloader再用Microboot刷固件能正常工作,是因为Microboot烧录时会自动补全魔术字、起始地址这些Bootloader需要的识别信息;而直接合并原始固件文件时这些信息缺失,导致Bootloader认不出固件,卡在Bootloader模式,设备自然无法启动。
内容的提问来源于stack exchange,提问作者kpasta79
相关产品推荐
相关产品推荐

