官網下載的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.