固件升级功能
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) //新固件已更新完成
应用程序接收新固件
升级过程图
状态切换图
粗黑线是应用程序中的状态切换,点线是启动程序中的状态切换。
异常情况
③ :传入的固件名与已有固件名不同,或者文件长度超过了代码空间尺寸,则忽略此次升级。
⑥ :CRC32校验失败,终止升级,状态复位。
⑨ :启动程序,检测到状态连续三次为FINISHED,表示新固件没有运行起来,则启用备份固件,再次更新固件。
⑩ :搬运代码完成后,校验错误。重新校验收到的新固件。校验有问题则使用备份程序。
风险
如果没有备份程序,涉及到启用备份程序的地方就会让设备变砖。
启动程序接收新固件
升级过程图
状态切换图
粗黑线是应用程序中的状态切换,点线是启动程序中的状态切换。
异常情况
③ :传入的固件名与已有固件名不同,或者文件长度超过了代码空间尺寸,则忽略此次升级。
⑦ :CRC32校验失败,有暂存区时切换为NULL状态,然后跳转到应用程序,反之继续停留在START状态重新请求固件
⑪ :搬运代码完成后,校验错误后再重新搬运一次。校验依然有问题则切换到START状态重新请求固件。
⑫ :再次进入启动程序时检测到为FINISHED状态,且连续三次,表示新固件没有运行起来,切换到START状态重新请求固件。