嵌入式 IAP 升级功能(#02)升级方案
flowchart LR %%{init: { "flowchart": { "curve": "basis" } } }%% A(在引导程序中集成通信协议栈与解压还原算法)~~~B(在应用程序中集成通信协议栈与解压还原算法)
思路(#1):引导程序主导
具体分工 | 引导程序 | 应用程序 |
---|---|---|
编程操作 | ✔ | |
通信协议 | 完备的通信协议栈 | |
文件解压 | ✔ | |
差分还原 | ✔ |
思路(#2):应用程序主导
具体分工 | 引导程序 | 应用程序 |
---|---|---|
编程操作 | ✔ | |
通信协议 | 完备的通信协议栈 | |
文件解压 | ✔ | |
差分还原 | ✔ |
思路(#3):两者各取所长
具体分工 | 引导程序 | 应用程序 |
---|---|---|
编程操作 | ✔ | |
通信协议 | 基础的通信协议栈 | 完备的通信协议栈 |
文件解压 | ✔ | |
差分还原 | ✔ |
方案(#0)
内部flash存储空间划分 | 内部flash存储空间细分 |
---|---|
引导程序存储区 bootloader |
中断向量表 |
引导程序 | |
应用程序存储区 | 重定向的中断向量表 |
应用程序 | |
参数数据存储区 | 掉电不丢失的系统参数 |
设备收到升级指令后,重启进入或跳转进入引导程序。进入引导程序后首先擦除应用程序存储区,然后等待接收新版应用程序(直接写入到升级文件存储区),等接收完毕且校验无误后跳转至应用程序,至此升级完成。
方案(#1)
内部flash存储空间划分 | 内部flash存储空间细分 |
---|---|
引导程序存储区 bootloader |
中断向量表 |
引导程序 | |
应用程序存储区 | 重定向的中断向量表 |
应用程序 | |
升级数据存储区 | 解压后的新版程序 |
接收到的压缩文件 | |
参数数据存储区 | 掉电不丢失的系统参数 |
或
内部flash存储空间划分 | 内部flash存储空间细分 |
---|---|
引导程序存储区 bootloader |
中断向量表 |
引导程序 | |
应用程序存储区 | 重定向的中断向量表 |
应用程序 | |
参数数据存储区 | 掉电不丢失的系统参数 |
外部flash存储空间划分 | 外部flash存储空间细分 |
升级数据存储区 | 解压后的新版程序 |
接收到的压缩文件 |
思路(#1)
设备收到升级指令后,重启进入或跳转进入引导程序。进入引导程序后首先擦除升级文件存储区,然后等待接收新版应用程序(暂时存放至升级文件存储区),等接收完毕且校验无误后,擦除旧版应用程序,然后将升级文件存储区中的新版应用程序拷贝/解压/差分还原至应用程序存储区,最后跳转至应用程序,至此升级完成。
思路(#2)
设备收到升级指令后,首先擦除升级文件存储区,然后等待接收新版应用程序(暂时存放至升级文件存储区),等接收完毕且校验无误后,将升级文件存储区中的新版应用程序拷贝/解压/差分还原至新版程序存储区,重启进入或跳转进入引导程序。进入引导程序后对新版程序进行二次校验,校验通过后擦除旧版应用程序,然后将新版程序存储区中的新版应用程序拷贝至应用程序存储区,最后跳转至应用程序,至此升级完成。
思路(#3)
设备收到升级指令后,首先擦除升级文件存储区,然后等待接收新版应用程序(暂时存放至升级文件存储区),等接收完毕且校验无误后,将升级文件存储区中的新版应用程序拷贝/解压/差分还原至新版程序存储区,重启进入或跳转进入引导程序。进入引导程序后对新版程序进行二次校验,校验通过后擦除旧版应用程序,然后将新版程序存储区中的新版应用程序拷贝至应用程序存储区,最后跳转至应用程序,至此升级完成。
抹除应用程序有效标识后,重启进入或跳转进入引导程序。进入引导程序后等待通信,若收到升级指令,首先擦除升级文件存储区,然后等待接收新版应用程序(暂时存放至升级文件存储区),等接收完毕且校验无误后,擦除旧版应用程序,然后将升级文件存储区中的新版应用程序拷贝(不支持解压和差分还原)至应用程序存储区,最后跳转至应用程序,至此升级完成。
方案(#2)
内部flash存储空间划分 | 内部flash存储空间细分 |
---|---|
引导程序存储区 bootloader |
中断向量表 |
引导程序 | |
应用程序存储区 (1) |
重定向的中断向量表 |
应用程序 | |
应用程序存储区 (2) |
重定向的中断向量表 |
应用程序 | |
参数数据存储区 | 掉电不丢失的系统参数 |
思路(#1)
设备收到升级指令后,重启进入或跳转进入引导程序。进入引导程序后首先擦除备份应用存储区,然后等待接收新版应用程序(直接写入到备份应用存储区),等接收完毕且校验无误后,翻转APP1与APP2的有效标识,并根据标识跳转至正确的应用程序,至此升级完成。
思路(#2)
设备收到升级指令后,首先擦除备份应用存储区,然后等待接收新版应用程序(直接写入到备份应用存储区),等接收完毕且校验无误后,翻转APP1与APP2的有效标识,重启进入或跳转进入引导程序,在引导程序中根据标识跳转至正确的应用程序,至此升级完成。
思路(#3)
设备收到升级指令后,首先擦除备份应用存储区,然后等待接收新版应用程序(直接写入到备份应用存储区),等接收完毕且校验无误后,翻转APP1与APP2的有效标识,重启进入或跳转进入引导程序,在引导程序中根据标识跳转至正确的应用程序,至此升级完成。
抹除应用程序有效标识后,重启进入或跳转进入引导程序。进入引导程序后等待通信,若收到升级指令,首先擦除备份应用存储区,然后等待接收新版应用程序(直接写入到备份应用存储区),等接收完毕且校验无误后,翻转APP1与APP2的有效标识,并根据标识跳转至正确的应用程序,至此升级完成。
方案(#3)
内部flash存储空间划分 | 内部flash存储空间细分 |
---|---|
引导程序存储区 bootloader |
中断向量表 |
引导程序 | |
应用程序存储区 (1) |
重定向的中断向量表 |
应用程序 | |
应用程序存储区 (2) |
重定向的中断向量表 |
应用程序 | |
升级数据存储区 | 解压后的新版程序 |
接收到的压缩文件 | |
参数数据存储区 | 掉电不丢失的系统参数 |
或
内部flash存储空间划分 | 内部flash存储空间细分 |
---|---|
引导程序存储区 bootloader |
中断向量表 |
引导程序 | |
应用程序存储区 (1) |
重定向的中断向量表 |
应用程序 | |
应用程序存储区 (2) |
重定向的中断向量表 |
应用程序 | |
参数数据存储区 | 掉电不丢失的系统参数 |
外部flash存储空间划分 | 外部flash存储空间细分 |
升级数据存储区 | 解压后的新版程序 |
接收到的压缩文件 |
思路(#1)
设备收到升级指令后,重启进入或跳转进入引导程序。进入引导程序后首先擦除升级文件存储区,然后等待接收新版应用程序(暂时存放至升级文件存储区),等接收完毕且校验无误后,擦除备份应用存储区,然后将升级文件存储区中的新版应用程序拷贝/解压/差分还原至备份应用存储区,最后翻转APP1与APP2的有效标识,并根据标识跳转至正确的应用程序,至此升级完成。
思路(#2)
设备收到升级指令后,首先擦除升级文件存储区,然后等待接收新版应用程序(暂时存放至升级文件存储区),等接收完毕且校验无误后,擦除备份应用存储区,然后将升级文件存储区中的新版应用程序拷贝/解压/差分还原至备份应用存储区,翻转APP1与APP2的有效标识,重启进入或跳转进入引导程序,在引导程序中根据标识跳转至正确的应用程序,至此升级完成。
思路(#3)
设备收到升级指令后,首先擦除升级文件存储区,然后等待接收新版应用程序(暂时存放至升级文件存储区),等接收完毕且校验无误后,擦除备份应用存储区,然后将升级文件存储区中的新版应用程序拷贝/解压/差分还原至备份应用存储区,翻转APP1与APP2的有效标识,重启进入或跳转进入引导程序,在引导程序中根据标识跳转至正确的应用程序,至此升级完成。
抹除应用程序有效标识后,重启进入或跳转进入引导程序。进入引导程序后等待通信,若收到升级指令,首先擦除升级文件存储区,然后等待接收新版应用程序(暂时存放至升级文件存储区),等接收完毕且校验无误后,擦除备份应用存储区,然后将升级文件存储区中的新版应用程序拷贝(不支持解压和差分还原)至备份应用存储区,最后翻转APP1与APP2的有效标识,并根据标识跳转至正确的应用程序,至此升级完成。