官网下载的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社区!
特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。
Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.