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