OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 4420|回复: 7

IAP升级问题。KEIL IROM的设置

[复制链接]

28

主题

104

帖子

0

精华

初级会员

Rank: 2

积分
150
金钱
150
注册时间
2018-1-11
在线时间
64 小时
发表于 2022-5-4 22:09:45 | 显示全部楼层 |阅读模式
20金钱
先说下我的问题。正常一个bootloader,一个APP跳转是没问题的。然后我想搞两个APP。具体的流程如下
Flash总大小为1M字节(1024KB) ,再考虑到擦除的时候只能扇区擦除。分配如下
扇区0-2    总大小48KB   存bootloader代码
扇区 3     总大小16KB    存boottable表
扇区4-7    总大小448KB   存APP1
扇区8-11   总大小512KB   存APP2
为了保证APP1和APP2区一样大,我们规定APP固件大小不能大于448KB
bootloader代码仅仅用来读取boottable表来确定应该跳转到哪个APP。在应用中需要升级的时候,先读取table。
如果当前是运行在APP1区,则将固件写入APP2区,校验正确之后修改table。软件复位之后就能运行APP2新的固件。

然后我发现这样的话,我生成两个固件的时候必须要自己先区分APP1和APP2,两个固件要分别做工程,偏移的地址不一样(要修改IROM1的内容),那这样太容易搞混了。

当然,我也可以把APP1区作为代码运行区。APP2区作为新固件存放区。但是这样的话总是没有两个运行区好的。

所以想请教下有什么方法吗?我自己对比了APP生成bin文件时候修改IROM偏移和不修改,两bin文件是有不同的。

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

28

主题

104

帖子

0

精华

初级会员

Rank: 2

积分
150
金钱
150
注册时间
2018-1-11
在线时间
64 小时
 楼主| 发表于 2022-5-4 22:26:59 | 显示全部楼层
不修改的话,bootloader会不停的复位运行,我看了bin文件,向量表明显的不对。
回复

使用道具 举报

28

主题

104

帖子

0

精华

初级会员

Rank: 2

积分
150
金钱
150
注册时间
2018-1-11
在线时间
64 小时
 楼主| 发表于 2022-5-5 10:10:28 | 显示全部楼层
回复

使用道具 举报

3

主题

821

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
3359
金钱
3359
注册时间
2011-11-10
在线时间
207 小时
发表于 2022-5-5 13:24:20 | 显示全部楼层
把你所有固件合成一个HEX文件烧录即可。
回复

使用道具 举报

28

主题

104

帖子

0

精华

初级会员

Rank: 2

积分
150
金钱
150
注册时间
2018-1-11
在线时间
64 小时
 楼主| 发表于 2022-5-5 13:31:44 | 显示全部楼层
c2007s 发表于 2022-5-5 13:24
把你所有固件合成一个HEX文件烧录即可。

升级的时候肯定是使用的bin文件啊,hex是带地址信息的。不是合并烧录的问题。我的bootloader,boottable,APP1,第一次次烧录的时候我就是进行了bin文件合并之后烧录的。
回复

使用道具 举报

3

主题

821

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
3359
金钱
3359
注册时间
2011-11-10
在线时间
207 小时
发表于 2022-5-5 20:56:45 | 显示全部楼层
bin文件下载下来,MCU自己更换偏移地址。
你这样子搞两个运行区,没什么实际意义。如果升级了新固件,又想返回旧版本,那再次IAP就行了,
程序简单可靠。
回复

使用道具 举报

28

主题

104

帖子

0

精华

初级会员

Rank: 2

积分
150
金钱
150
注册时间
2018-1-11
在线时间
64 小时
 楼主| 发表于 2022-5-5 21:38:50 | 显示全部楼层
c2007s 发表于 2022-5-5 20:56
bin文件下载下来,MCU自己更换偏移地址。
你这样子搞两个运行区,没什么实际意义。如果升级了新固件,又想 ...

一个bootloader区,一个APP区,我做了没问题。因为工作中有遇到OTA的方式就是两个区,感觉用起来很好用,用户体验要比一个区好,一个区的OTA完了,复位之后先将固件从存放区搬运到APP区。再个这个纯属想搞清楚这里为什么会这样。

我可能比较鱼,还是没理解MCU自己偏移是如何偏移。我的APP肯定是设置了向量偏移的,但是实际测试确实是有问题,同样一份APP代码,修改了IROM和没修改(0X0800 0000)生成的bin文件是不一样的。
回复

使用道具 举报

28

主题

104

帖子

0

精华

初级会员

Rank: 2

积分
150
金钱
150
注册时间
2018-1-11
在线时间
64 小时
 楼主| 发表于 2022-5-5 21:48:05 | 显示全部楼层
c2007s 发表于 2022-5-5 20:56
bin文件下载下来,MCU自己更换偏移地址。
你这样子搞两个运行区,没什么实际意义。如果升级了新固件,又想 ...

然后我发现我的APP代码里面设置好向量表偏移值后,keil我直接把IROM前面的勾给去掉,生成的bin文件就和我修改IROM(0X0801 0000) 生成的bin文件一样了。我不知道是不是因为勾上了,动态加载的时候这里就起作用了
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-2-25 18:01

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表