官网下载的2.8版本的EVT

BLE文件夹下两个工程涉及到备份OTA:BackupUpgrade_OTA与BackupUpgrade_IAP

备份升级将FLASH分成了三份,参看BackupUpgrade_OTA工程下OTA.h文件

打开网易新闻 查看精彩图片

先看BackupUpgrade_OTA工程,该工程启动地址为IMAGE_A的地址,从FLASH的0地址启动后去检查image标志判断是否需要跳转到IMAGE_B

打开网易新闻 查看精彩图片

如果固件启动标志是IMAGE_B准确的讲,不是跳转,而是将B固件开始的第一块FLASH复制到0地址也就是IMAGE_A的第一块FLASH覆盖IMAGE_A的中断向量,完成启动。

打开网易新闻 查看精彩图片

接着,收到OTA命令,进行FLASH擦除

这里是否需要针对固件标志进行分开处理?

例程直接将B区的FLASH进行擦除,用于存放新固件,写入后进行校验

编程结束后,将固件标志切换到IAP,然后跳入IAP运行

下面是BackupUpgrade_IAP工程

启动后先读取固件标志,默认为固件A

打开网易新闻 查看精彩图片

如果是固件标志A或者固件标志B或者未知的则直接进入jumpapp

如果是固件标志IAP,将IAP固件FLASH第一块搬进内存,然后擦除固件A区的第一块,再将IAP第一块搬进固件A区的第一块

打开网易新闻 查看精彩图片

然后,进行app跳转

如果固件标志不是IAP,则进行复位

如果固件标志是IAP,,则将固件B区分两步搬进固件A区,先搬除第一区以外的内容,然后再搬第一区

接着切换固件标志A,然后在擦除固件B区第一块,最后进行复位

打开网易新闻 查看精彩图片

总结,这两个例程中固件标志不会出现B固件的,固件B的FLASH是一个暂存区,用于存储固件,然后跳入IAP区执行拷贝和启动

也不会在固件B区直接启动,IAP区的代码执行用户无感。

来源:电子工程世界(EEWorld)作者:90houyidai

还有更多好玩有趣的DIY作品分享,欢迎访问EEWorld社区!