官網(wǎng)下載的2.8版本的EVT
BLE文件夾下兩個工程涉及到備份OTA:BackupUpgrade_OTA與BackupUpgrade_IAP
備份升級將FLASH分成了三份,參看BackupUpgrade_OTA工程下OTA.h文件
![]()
先看BackupUpgrade_OTA工程,該工程啟動地址為IMAGE_A的地址,從FLASH的0地址啟動后去檢查image標志判斷是否需要跳轉(zhuǎn)到IMAGE_B
![]()
如果固件啟動標志是IMAGE_B準確的講,不是跳轉(zhuǎn),而是將B固件開始的第一塊FLASH復(fù)制到0地址也就是IMAGE_A的第一塊FLASH覆蓋IMAGE_A的中斷向量,完成啟動。
![]()
接著,收到OTA命令,進行FLASH擦除
這里是否需要針對固件標志進行分開處理?
例程直接將B區(qū)的FLASH進行擦除,用于存放新固件,寫入后進行校驗
編程結(jié)束后,將固件標志切換到IAP,然后跳入IAP運行
下面是BackupUpgrade_IAP工程
啟動后先讀取固件標志,默認為固件A
![]()
如果是固件標志A或者固件標志B或者未知的則直接進入jumpapp
如果是固件標志IAP,將IAP固件FLASH第一塊搬進內(nèi)存,然后擦除固件A區(qū)的第一塊,再將IAP第一塊搬進固件A區(qū)的第一塊
![]()
然后,進行app跳轉(zhuǎn)
如果固件標志不是IAP,則進行復(fù)位
如果固件標志是IAP,,則將固件B區(qū)分兩步搬進固件A區(qū),先搬除第一區(qū)以外的內(nèi)容,然后再搬第一區(qū)
接著切換固件標志A,然后在擦除固件B區(qū)第一塊,最后進行復(fù)位
![]()
總結(jié),這兩個例程中固件標志不會出現(xiàn)B固件的,固件B的FLASH是一個暫存區(qū),用于存儲固件,然后跳入IAP區(qū)執(zhí)行拷貝和啟動
也不會在固件B區(qū)直接啟動,IAP區(qū)的代碼執(zhí)行用戶無感。
來源:電子工程世界(EEWorld)作者:90houyidai
還有更多好玩有趣的DIY作品分享,歡迎訪問EEWorld社區(qū)!
特別聲明:以上內(nèi)容(如有圖片或視頻亦包括在內(nèi))為自媒體平臺“網(wǎng)易號”用戶上傳并發(fā)布,本平臺僅提供信息存儲服務(wù)。
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.