目前做的一个MH1902项目,在线升级部分设计这样的功能逻辑,目前没有什么问题运行正常
-
- 上电进入IAP程序,先判断升级标志位jrTerminalParam.ProgramUpState,0x31为升级,0x21不升级
-
- 若标志位为0x31,通信,擦写APP数据,标志位写0x21,重启
-
- 若标志位为0x21,校验APP程序,没问题修改跳转到APP,修改中断向量表,初始化
-
- 校验APP程序有问题,则继续运行IAP,上报升级失败
-
- 正常运行时检测到进入升级,修改标志位jrTerminalParam.ProgramUpState为0x31,重启
查阅网上其他的方案,其中有点设置IAP, APP1, APP2三个区的方案,上电从IAP开始运行,跳到APP1,接收到升级文件,存储在APP2区域,再次重启时判断APP2区域升级文件是否正确,校验成功则复制到APP1区域,清空APP2,再跳转到APP1继续工作,这也是种方案。