1.背景介绍:
简单的IAP技术是:boot分区+1个APP区;
在升级的过程中,boot程序会把原先的APP区擦除,再把新的bin文件拷贝到APP区,完成升级;
风险:
在升级过程中突然断电,会导致原先的APP被擦除,新的APP未成功写入,设备变砖,无法通过预留的通信接口升级程序,只能程序烧录。
考虑到这种风险:现在将flash分区划为3分区:
boot区+APP1区+APP2区;
APP1存储老固件;APP2存储新固件;
总结:上述操作的目的是:保证flash上在同一时刻至少有1份可使用的APP;
升级流程:
从APP进入boot后,开始接受上位机发送过来的bin文件,bin文件存储在APP2区,bin文件接受完成后,擦除APP1并且把APP2的内容拷贝到APP1。
如果APP2接收失败则运行老固件;
如果APP2接收成功,则把APP2拷贝到APP1,运行APP1;
如果APP2接受成功,但是把APP2拷贝到APP1的过程中拷贝失败,则擦除APP1重新把APP2拷贝到APP1;
核心问题:APP2区作为临时存储区,APP1才是真正运行的APP区;
1)只有APP2成功接收运行擦除APP1;
2)在APP1被擦除并拷贝新固件时,即使失败了,APP2也存在;
总结:上述操作的目的是:保证flash上在同一时刻至少有1份可使用的APP;
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------/
flash分区:
流程图:
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------/
2.地址配置
boot烧写地址及分区配置
起始地址0x08000000,
占用空间0x8000(32K)
APP1烧写地址及分区配置
起始地址0x0800 8000,
占用空间0x18000(96K)
完整的设计思路,程序和上位机 过几天再贴