boot 和 APP 合并一起 就跑不起来,Contex-M0 内核

[复制链接]
ljxh401 发表于 2025-8-18 12:20 | 显示全部楼层 |阅读模式
本帖最后由 ljxh401 于 2025-8-18 12:26 编辑

我的boot 运行地址空间 0x800 0000 长度 0x2000,
通过TF卡读取文件,升级到 地址0x800 2000 中
我的App运行地址空间 0x800 2000
在先烧录 boot,然后用SD卡升级app 进运行地址 0x800 2000 的方式  boot 和 app 都正常

但是 为了 出货方便,将 boot 和 app 用 J-Flash 打开 boot.hex  然后merge app.hex 生成一个 bootX.hex
烧录到板上,boot 完全启动不起来,地址检查了几次了,没有问题的
CPU型号是 MM32F0144

理论上 怎么都能跑前面的boot的,即使 app 部分数据出错,只要 app 数据跟 boot 地址 不冲突
J-Flash 也没有提示地址冲突
 楼主| ljxh401 发表于 2025-8-18 12:22 | 显示全部楼层
我的boot 运行地址空间 0x800 0000 长度 0x2000,
通过TF卡读取文件,升级到 地址0x800 2000 中


我的App运行地址空间 0x800 2000


在先烧录 boot,然后用SD卡升级app 进运行地址 0x800 2000 的方式  boot 和 app 都正常

但是 为了 出货方便,将 boot 和 app 用 J-Flash 打开 boot.hex  然后merge app.hex 生成一个 bootX.hex
烧录到板上,boot 完全启动不起来,地址检查了几次了,没有问题的
CPU型号是 MM32F0144
ayb_ice 发表于 2025-8-18 16:34 | 显示全部楼层
直接合并两个HEX文件,其中去掉一个结束行就可以了
yjmwxwx 发表于 2025-8-18 17:43 | 显示全部楼层
没试试用JLINK直接把能运行的BOOT和APP从芯片读出来吗,这样就不用手工合并了
星塔守护 发表于 2025-8-18 18:21 | 显示全部楼层
分别对比下合并hex文件和APP、boot文件,看下是不是合并生成软件的问题
 楼主| ljxh401 发表于 2025-8-18 19:04 | 显示全部楼层
ayb_ice 发表于 2025-8-18 16:34
直接合并两个HEX文件,其中去掉一个结束行就可以了

结束行 是 boot 的 的hex 最后8个字节的 00 吗?
难道系统启动过程中 在这里做了什么标记吗
 楼主| ljxh401 发表于 2025-8-18 19:30 | 显示全部楼层
我觉得是 MM32 ISP V1.02 的软件问题
 楼主| ljxh401 发表于 2025-8-18 19:39 | 显示全部楼层
本帖最后由 ljxh401 于 2025-8-18 19:43 编辑

我将合并的hex 文件 用 hex2bin 转换为 bin文件
然后在bin文件中 删除 app 地址部分的数据 生成一个boot.bin
然后将这个boot.bin bin2hex 生成一个新的 boot_new.hex
烧录这个boot_new.hex 可以正常运行
应该是 烧录软件 的bug, 我估计
再试试将 boot 和 app 中间的空余空间 全部设置为 0x00 看程序能不能跑
 楼主| ljxh401 发表于 2025-8-18 19:47 | 显示全部楼层
本帖最后由 ljxh401 于 2025-8-18 19:52 编辑

最终测试结果:
我将 合并后的 hex 文件 中间的 0xFF 全部设置为 0x00 合并后的程序就能正常跑了
但是我如果使用 boot 升级 的话 ,中间空缺部分 应该还是 0xFF 的,不影响程序运行
所以应该就是这个sb的ISP软件的bug
Dick Hou 发表于 2025-8-19 10:00 | 显示全部楼层
可靠的方法如前网友所述,将可运行的MCU,整个FLASH读出来,保存单个hex文件,以后直接烧写这个hex
ayb_ice 发表于 2025-8-19 10:16 | 显示全部楼层
ljxh401 发表于 2025-8-18 19:04
结束行 是 boot 的 的hex 最后8个字节的 00 吗?
难道系统启动过程中 在这里做了什么标记吗 ...

:00000001FF
这是结束行,就是文件最后一行
dffzh 发表于 2025-8-19 13:35 | 显示全部楼层
直接用jflash软件合并boot.hex和app.hex两个文件,操作上肯定是可以的,我们也这么用过:


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
mini1986 发表于 2025-8-21 15:23 | 显示全部楼层
uboot单独跑没有问题,IAR编译的程序烧进去也没有问题。用uboot去引导IAR程序,就失败了,我现在还在查问题......
 楼主| ljxh401 发表于 2025-8-21 19:09 | 显示全部楼层
本帖最后由 ljxh401 于 2025-8-21 19:10 编辑
dffzh 发表于 2025-8-19 13:35
直接用jflash软件合并boot.hex和app.hex两个文件,操作上肯定是可以的,我们也这么用过:

我就是这样做的,但是板子只有 ISP 接口,我用ISP的软件烧录进去就不行
将两个芯片中间数据 的0xFF 填充为 0x00 就OK了,
所以应该是这个ISP软件的神经病
您需要登录后才可以回帖 登录 | 注册

本版积分规则

52

主题

230

帖子

4

粉丝
快速回复 在线客服 返回列表 返回顶部

52

主题

230

帖子

4

粉丝
快速回复 在线客服 返回列表 返回顶部