隨著嵌入式系統(tǒng)的發(fā)展,產(chǎn)品對(duì)于代碼升級(jí)功能的需求越來(lái)越大。通過(guò)代碼升級(jí),可以實(shí)現(xiàn)諸如支持新功能,修復(fù)故障等目標(biāo)。
代碼升級(jí)本質(zhì)上是對(duì)片上閃存flash(主要是code flash)進(jìn)行擦除和寫(xiě)入的過(guò)程。由于需要在代碼運(yùn)行的同時(shí)實(shí)現(xiàn)對(duì)flash內(nèi)容的操作,因此有些特別需要注意的部分。如:假如在傳輸過(guò)程中出現(xiàn)異常,導(dǎo)致代碼升級(jí)失敗,設(shè)備能否從該狀態(tài)正常啟動(dòng)并恢復(fù)至最近一次升級(jí)前的狀態(tài)。還有,假如向芯片中燒錄的新代碼存在漏洞,或傳輸途徑中遭到破壞,設(shè)備能否檢測(cè)到這種異常并拒絕運(yùn)行該代碼。另外,由于代碼升級(jí)跟芯片的flash結(jié)構(gòu)密切相關(guān),因此該過(guò)程中是否涉及中斷向量表重定位等也需考慮。
代碼升級(jí)的實(shí)現(xiàn)方式多種多樣,系統(tǒng)架構(gòu)也千差萬(wàn)別,如何在眾多方式中找到合適的升級(jí)方式,需要用戶根據(jù)應(yīng)用場(chǎng)景的需求進(jìn)行評(píng)估。
在此,我們介紹一種面向32位微處理器的安全啟動(dòng)代碼框架——MCUboot。
MCUboot都有哪些特定呢?主要是以下幾個(gè):
完全開(kāi)源,持續(xù)更新
支持各種升級(jí)模式:overwrite,swap,direct XIP(Execute In Place)和拷貝到RAM中執(zhí)行
對(duì)新固件Firmware進(jìn)行安全校驗(yàn),且安全校驗(yàn)的級(jí)別可根據(jù)實(shí)際需求選擇
可從升級(jí)異常中恢復(fù)
MCUboot相關(guān)的資源都在哪里呢?您可進(jìn)入MCUboot官網(wǎng)(MCUboot official website),源碼全部托管在GitHub上。頁(yè)面下有一個(gè)md文件,作為MCUboot的官方介紹。
由于MCUboot是一個(gè)系統(tǒng)框架,因此它規(guī)定了對(duì)于芯片的flash劃分,將整個(gè)芯片的存儲(chǔ)空間劃分為Bootloader、Primary Slot和Secondary Slot三個(gè)部分。某種意義上說(shuō),Primary Slot和Secondary Slot互為對(duì)方的備份,在不同的升級(jí)模式下,各slot的作用也有所不同,這一點(diǎn)我們?cè)诤罄m(xù)詳細(xì)介紹。
對(duì)于一個(gè)32位單片機(jī)來(lái)說(shuō),客戶可以自行移植MCUboot以適配當(dāng)前產(chǎn)品,而Renesas FSP(Flexible Software Package靈活軟件包)已經(jīng)幫客戶實(shí)現(xiàn)了該適配,對(duì)于Renesas RA系列產(chǎn)品來(lái)說(shuō),MCUboot相關(guān)的大多數(shù)配置均可通過(guò)界面簡(jiǎn)單添加和配置,就像添加一個(gè)普通的外設(shè)驅(qū)動(dòng)那樣。
靈活配置軟件包FSP
我們以FSP對(duì)MCUboot的支持為例,對(duì)MCUboot的相關(guān)特性進(jìn)行介紹。
首先介紹MCUboot支持的四種升級(jí)模式,分別是Overwrite、Swap、Direct XIP和加載到RAM中執(zhí)行。由于FSP不支持第四種——加載到RAM中執(zhí)行,因?yàn)槲覀冎攸c(diǎn)介紹前三種。
Overwrite模式
MCUboot Overwrite模式圖解
對(duì)于Overwrite模式來(lái)說(shuō),起點(diǎn)是芯片中燒錄了Bootloader和User Application v1.0(初始版本),上電后Bootloader分別檢查Secondary Slot和Primar Slot中的內(nèi)容,由于此時(shí)Secondary Slot為空,因此Bootloader檢查Primary Slot中Image(映像文件)的完整性,確認(rèn)其合法后會(huì)跳轉(zhuǎn)到Primary Slot中的User Application v1.0中執(zhí)行(此時(shí)PC指針運(yùn)行在Primary Slot中,黃色的Execution箭頭標(biāo)識(shí))。
代碼運(yùn)行的過(guò)程中收到了升級(jí)請(qǐng)求,則會(huì)接收新Image并燒錄到Secondary Slot中。對(duì)于接收新Image的途徑,則完全依賴用戶應(yīng)用程序的實(shí)現(xiàn),可以是USB、網(wǎng)口、Modbus等。燒錄完成后,會(huì)執(zhí)行一條軟復(fù)位指令,使得芯片回到復(fù)位向量表處開(kāi)始執(zhí)行Bootloader,此時(shí)Bootloader發(fā)現(xiàn)Secondary Slot中有一個(gè)新的代碼,假如它的版本是v2.0,高于Primary Slot中的v1.0,則會(huì)將Secondary Slot中的內(nèi)容拷貝到Primary Slot中,然后將Secondary Slot擦除。
如果比較整個(gè)過(guò)程的起始狀態(tài)和結(jié)束狀態(tài),我們會(huì)發(fā)現(xiàn),芯片中運(yùn)行的代碼從低版本的v1.0變成了高版本的v2.0,實(shí)現(xiàn)了代碼的升級(jí)。
從Overwrite模式的流程不難看出它的一些特點(diǎn):
由于代碼設(shè)計(jì)比較簡(jiǎn)單,因此Bootloader帶來(lái)的代碼量較小。因此能夠留更多的空間給應(yīng)用程序使用。
Overwrite不支持代碼回滾。即假如芯片中燒錄了新Image,則升級(jí)完成后舊Image不復(fù)存在。
代碼僅在Secondary Slot中備份而非執(zhí)行,最終需拷貝到Primary Slot中執(zhí)行,因此升級(jí)所用的Application Image進(jìn)行編譯/鏈接的地址始終為Primary Slot地址空間。
由于整個(gè)過(guò)程中需要對(duì)flash進(jìn)行兩次擦除(Primary Slot和Secondary Slot)一次寫(xiě)入(Primary Slot),因此整個(gè)Boot的過(guò)程依賴flash的特性,主要是擦寫(xiě)速度。
對(duì)于Renesas RA系列產(chǎn)品來(lái)說(shuō),假如在Stack中添加了MCUboot模塊,則升級(jí)模式的修改界面如下所示。
FSP中MCUboot升級(jí)模式選項(xiàng)
注意:Overwrite Only和Overwrite Only Fast比較類似,唯一的區(qū)別是,后者僅將用到的sectors(此處可以理解為Flash Block)從Secondary Slot拷貝到Primary Slot,未用部分不拷貝。
Swap模式
MCUboot Swap升級(jí)模式圖解
從系統(tǒng)框圖來(lái)說(shuō),Swap模式和Overwrite模式相比,在flash劃分上多了Scratch area,用于存儲(chǔ)兩個(gè)slot交換的中間內(nèi)容。
為簡(jiǎn)化說(shuō)明,對(duì)于Swap模式來(lái)說(shuō),依然假設(shè)起點(diǎn)是芯片中燒錄了Bootloader和User Application v1.0 (位于Primary Slot),代碼運(yùn)行過(guò)程中收到了升級(jí)指令,接收來(lái)自外部的新Image (User Application v2.0),并燒錄到Secondary Slot中,完成后執(zhí)行軟復(fù)位,芯片重新回到Bootloader中運(yùn)行。此時(shí)Bootloader判斷Secondary Slot有更高版本v2.0的代碼,檢查其完整性,確定合法后將Primary Slot中的內(nèi)容和Secondary Slot中的內(nèi)容以Block為單元進(jìn)行交換。
交換完成后,Primary Slot保存了高版本v2.0的Image,而Secondary Slot中保存了低版本v1.0的Image,代碼依然在Primary Slot中執(zhí)行。
Swap模式下的初始狀態(tài),Primary Slot中運(yùn)行的是低版本v1.0 Image,而完成升級(jí)后的結(jié)束狀態(tài)下,Primary Slot中運(yùn)行的是高版本v2.0 Image,因此完成了一次升級(jí)。
從Swap模式的流程可以看出它的一些特點(diǎn):
支持代碼回滾/回退/降級(jí)。由于升級(jí)完成后,低版本v1.0 Image依然存儲(chǔ)在芯片中,因此若在高版本v2.0 上發(fā)現(xiàn)bug需要修復(fù),則可以重新執(zhí)行升級(jí)程序使得代碼回到v1.0。
由于代碼功能較為復(fù)雜,因此Bootloader帶來(lái)的代碼量較大。其他條件一致的情況下,Swap模式的代碼是最大的。又由于保留了Scratch area用于代碼交換,因此留給應(yīng)用程序的空間就更小了。
整個(gè)升級(jí)過(guò)程中對(duì)于Primary Slot和Secondary Slot均執(zhí)行擦和寫(xiě)各一次,因此Boot時(shí)間較長(zhǎng)。
由于flash專門(mén)劃分了Scratch area用于對(duì)兩個(gè)Slot進(jìn)行代碼交換,在升級(jí)過(guò)程中,會(huì)對(duì)該區(qū)域進(jìn)行多次擦寫(xiě)。具體的擦寫(xiě)次數(shù)取決于Scratch area大小和Slot大小,簡(jiǎn)單的計(jì)算方式為,利用Primary Slot除以Scratch area得到的結(jié)果,即對(duì)Scratch area的擦除次數(shù)。寫(xiě)入次數(shù)和擦除次數(shù)相等。
-
單片機(jī)
+關(guān)注
關(guān)注
6056文章
44800瀏覽量
643652 -
嵌入式系統(tǒng)
+關(guān)注
關(guān)注
41文章
3658瀏覽量
130512 -
FSP
+關(guān)注
關(guān)注
0文章
38瀏覽量
7293
原文標(biāo)題:MCUboot系列(1-1)簡(jiǎn)介以及在RA FSP上的支持
文章出處:【微信號(hào):瑞薩MCU小百科,微信公眾號(hào):瑞薩MCU小百科】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
四種支持向量機(jī)用于函數(shù)擬合與模式識(shí)別的Matlab示例程序
DDS AD9910的四種工作調(diào)制模式是什么意思
四種不同供電模式的LED拓?fù)?b class='flag-5'>介紹
介紹AUTOSAR支持的四種功能安全機(jī)制
二維碼的四種主要應(yīng)用模式
WIFI模塊四種工作模式介紹_WIFI模塊工作模式淺析
IEC 61851標(biāo)準(zhǔn)中的四種EV充電模式

GPIO的四種輸入模式介紹

淺析電子負(fù)載常見(jiàn)的的四種工作模式
MCUboot Swap模式升級(jí)的流程和注意事項(xiàng)

變頻器主要支持哪四種模式?有什么區(qū)別?

評(píng)論