固件升级功能

IAP全局状态:
#define B_IAP_STA_NULL (0)       //空闲状态
#define B_IAP_STA_START (1)      //开始获取新固件      
#define B_IAP_STA_READY (2)      //新固件已准备好
#define B_IAP_STA_FINISHED (3)   //新固件已更新完成

应用程序接收新固件

升级过程图

输入图片说明

状态切换图

../_images/IAP_APP.png

粗黑线是应用程序中的状态切换,点线是启动程序中的状态切换。

异常情况

③ :传入的固件名与已有固件名不同,或者文件长度超过了代码空间尺寸,则忽略此次升级。

⑥ :CRC32校验失败,终止升级,状态复位。

⑨ :启动程序,检测到状态连续三次为FINISHED,表示新固件没有运行起来,则启用备份固件,再次更新固件。

⑩ :搬运代码完成后,校验错误。重新校验收到的新固件。校验有问题则使用备份程序。

风险

如果没有备份程序,涉及到启用备份程序的地方就会让设备变砖。

启动程序接收新固件

升级过程图

输入图片说明

状态切换图

../_images/IAP_BOOT.png

粗黑线是应用程序中的状态切换,点线是启动程序中的状态切换。

异常情况

③ :传入的固件名与已有固件名不同,或者文件长度超过了代码空间尺寸,则忽略此次升级。

⑦ :CRC32校验失败,有暂存区时切换为NULL状态,然后跳转到应用程序,反之继续停留在START状态重新请求固件

⑪ :搬运代码完成后,校验错误后再重新搬运一次。校验依然有问题则切换到START状态重新请求固件。

⑫ :再次进入启动程序时检测到为FINISHED状态,且连续三次,表示新固件没有运行起来,切换到START状态重新请求固件。