IAP在线升级的思路

2019-07-21 07:13发布

公司最近在STM32在线升级的方案,技术汇总了一下在线升级的设计思路,也想请大家一起来批评指导。
如下图所示,设计一个BOOT程序,BOOT程序的功能是引导程序跳转执行APP1或者APP2程序。
当最开始的时候,先烧录BOOT程序,后烧录APP1程序。在利用串口或者网络的方式将需要升级的APP2程序HEX文件放置到到0X02开始的位置,然后改变BOOT引导到重启到APP2的位置。
到APP2升级APP1的时候亦是如此,
这样设计对存储空间要求比较大。请问还有更优的设计方案吗。?
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
9条回答
aozima
1楼-- · 2019-07-21 10:47
不支持映射地址的,两个APP要单独编译链接,加大了开发难度。
建议在BOOT中做COPY,把 TMP COPY 到 APP1中即可。

这样 APP1 与 TMP(APP2)需要对半分,比较浪费空间,可以对TMP进行压缩处理,这样空间利用率更高些。

另外,因为是COPY到APP1上面运行的,所以不要求TMP也是内部FLASH,用外部SPI FLASH也一样,这样便宜量足。

至于有人担心的变砖问题,说两个APP会好些。
事实上如果新的APP有问题,也得需要人工按键切换才行。
至于boot中自动判断新的APP是否能跑起来,这简直了,都不能跑起来的APP是如何通过测试和预演流程的?
biglu
2楼-- · 2019-07-21 13:10
看要不要支持远程升级,不需要远程升级的话,直接bootloader+app1就够了。升级失败了就在bootloader里等下次升级。
Acuity
3楼-- · 2019-07-21 18:10
最开始公司用的是楼主的方式,发现弊端挺大,就是二楼aozima大神所说,后面就改用了aozima的方式,固件小用内部flash,固件大加一片spi flash,做好校验(各种匹配、CRC等),没出现过升级成砖头的。
jermy_z
4楼-- · 2019-07-21 18:32
同意 aozima 的做法
andychen
5楼-- · 2019-07-21 22:06
 精彩回答 2  元偷偷看……
andychen
6楼-- · 2019-07-22 02:03
biglu 发表于 2018-12-2 17:45
看要不要支持远程升级,不需要远程升级的话,直接bootloader+app1就够了。升级失败了就在bootloader里等下 ...

我觉得BOOT 里面只需要最简单的程序就行。就是COPY 和 程序跳转就行。

一周热门 更多>