双备份bootloader程序更新

2019-12-13 18:31发布

大家有没有做过这种bootloader,
如果刷写过程中失败,则自动切换到上一次正常的App。
目前的思路是Flash分为3部分:Bootloader + App1 + App2

目前的难点是App1和App2里面的程序中断向量表啥的肯定不一致,没法做到统一。



友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
26条回答
shian0551
1楼-- · 2019-12-14 14:52
LZ的b+a+a方法很好.可以验证应用的完整性
foxpro2005
2楼-- · 2019-12-14 19:08
楼上多好都没有考虑到在写入时发生断电或其它意外的情况, 如果系统中有SPI Flash,可以把接收到的数据放里面, 然后再来长级FLASH。
还有一种存储结构划分方式:
| bootloader | + | app | + | iap flag + iap firmware data |

在升级更新APP区域前 :先是对IAP区接收的固件数据做过校验的(也可以是在接收这个固件时就进行了校验的,以保证正确性), 如果正确设置相应的IAP Flag标志, 然后再进行APP区的固件刷写, 刷写成功后再设置IAP Flag相应的标志。

这样就应该不会有出现两个中断向量的问题, 同时也应该能有效防止变砖的可能性。
star_tale
3楼-- · 2019-12-14 20:24
4楼正解
823032003
4楼-- · 2019-12-14 23:57
lvfv 发表于 2019-1-31 20:13
你可以这样想,App2只做接收用,验证App2完整之后,再把2覆盖到1,

把app2刷到app1的过程,如果有异常掉电会有问题。。
zchong
5楼-- · 2019-12-15 01:05
 精彩回答 2  元偷偷看……
lvfv
6楼-- · 2019-12-15 02:37
823032003 发表于 2019-2-1 06:45
把app2刷到app1的过程,如果有异常掉电会有问题。。

已经确保2是完整的了,就算掉电,也只是1不完整,重新上电,继续刷1就行了。

一周热门 更多>