介紹MCUboot支持的四種升級(jí)模式,分別是Overwrite、Swap、Direct XIP和加載到RAM中執(zhí)行。由于FSP不支持第四種——加載到RAM中執(zhí)行,因?yàn)槲覀冎攸c(diǎn)介紹前三種。
Direct XIP(Execute In Place)模式

MCUboot Direct XIP模式流程圖
接下來我們看第三種升級(jí)模式,Direct XIP(Execute In Place),跟前兩種模式Overwrite和Swap最大的不同在于,代碼是就地執(zhí)行的,即升級(jí)后的代碼直接在Secondary Slot中執(zhí)行。
上電后芯片中燒錄的是Bootloader和Primary Slot中User Application v1.0,運(yùn)行的過程中,芯片收到升級(jí)指令,接收新firmware并燒錄到Secondary Slot中,然后跳轉(zhuǎn)至Secondary Slot中執(zhí)行。
如果查看升級(jí)操作的起始狀態(tài)和結(jié)束狀態(tài)會(huì)發(fā)現(xiàn),芯片從運(yùn)行Primary Slot中的低版本v1.0代碼變?yōu)檫\(yùn)行Secondary Slot中的高版本v2.0代碼,因此完成了一次升級(jí)。
從Direct XIP模式的流程可以看出它的一些特點(diǎn):
支持代碼回滾/回退/降級(jí)。由于升級(jí)完成后,低版本v1.0 Image依然存儲(chǔ)在芯片中,因此若在高版本v2.0 上發(fā)現(xiàn)bug需要修復(fù),則有機(jī)會(huì)重新執(zhí)行升級(jí)程序使得代碼回到v1.0。
升級(jí)過程中不涉及對(duì)flash的擦除和寫入操作,因此Boot時(shí)間較短,是三種模式中時(shí)間最短的。
關(guān)于各種模式之間的更多細(xì)節(jié)比較,請(qǐng)參考下圖中的內(nèi)容:

各升級(jí)模式特性比較
關(guān)于Secondary Slot的屬性,既可以是片上flash,也可以是外部flash。FSP對(duì)外部的支持為QSPI Flash,可以映射到地址總線上的存儲(chǔ)空間。假如利用外部flash如QSPI作為Secondary slot,則不支持Direct XIP模式。
另外,由于映像文件Image的傳輸途徑可能具有潛在風(fēng)險(xiǎn),又或者使用外部flash存儲(chǔ)新Image擔(dān)心被盜用,則推薦使用加密存儲(chǔ)的方式。假如使用加密存儲(chǔ),則不支持Direct XIP模式。
前面提到了MCUboot可以實(shí)現(xiàn)安全boot,即判斷目標(biāo)Image的完整性和合法性,根據(jù)結(jié)果決定是否執(zhí)行固件升級(jí)操作,這個(gè)過程也可以叫做安全校驗(yàn)。
安全校驗(yàn)的設(shè)計(jì)可謂豐儉由人,整體的原則是,安全級(jí)別越高,帶來的代碼量增加越大,啟動(dòng)時(shí)間越長(zhǎng)。
MCUboot的安全校驗(yàn)意味著,待更新的Image文件需要增加一些標(biāo)識(shí),才能被bootloader識(shí)別,原始的文件無法通過安全校驗(yàn)。
下面的圖展示了處理后的Application Image各部分信息。

利用Python腳本處理后的Application Image
MCUboot的安全校驗(yàn)的實(shí)現(xiàn)方式包括:
增加Header,位于更新后的Bootloader和Application實(shí)際起始地址中間。其中包含了豐富的信息,比較關(guān)鍵的部分如Image的版本及大小。
增加TLV (Type Length Value),緊跟在Application之后。其中包含了Image文件對(duì)應(yīng)的HASH哈希值和對(duì)Image文件生成的簽名信息。
增加Trailer,位于Slot頂端,和TLV之間會(huì)填充固定數(shù)值。根據(jù)升級(jí)模式的不同,Trailer的格式和含義也不同,在此不展開。值得一提的是,對(duì)于Swap模式,Trailer中包含了Bootloader進(jìn)行升級(jí)時(shí)的判斷標(biāo)志,更多細(xì)節(jié)請(qǐng)參考MCUboot官網(wǎng)對(duì)于此部分的說明。
由于Bootloader占用了flash空間0地址開始的部分且大小幾乎不變,因此在設(shè)計(jì)的時(shí)候,需評(píng)估flash的空間劃分,使得Bootloader盡量小以讓出更多空間給Application利用。關(guān)于Bootloader優(yōu)化,我們不在本章中展開說明。
決定Bootloader大小的關(guān)鍵要素有以下幾個(gè):
升級(jí)模式,Overwrite最小,Swap最大
安全校驗(yàn)的級(jí)別,級(jí)別越高代碼量越大
對(duì)于Flash劃分,需要遵循的基本原則是,每個(gè)區(qū)域(Bootloader,Primary Slot和Secondary Slot)均占據(jù)完整的Block size,具體到RA產(chǎn)品,請(qǐng)?jiān)谟布謨?cè)中確認(rèn)Block size的值。
以RA6M4 1M Code Flash產(chǎn)品為例,共有38個(gè)Block,其中低8個(gè)Block大小為8KB,高地址上的Block大小均為32KB。

RA6M4 Flash Block地址信息
本章總結(jié)
本篇我們介紹了MCUboot的基本概念和設(shè)計(jì)的基本原則,后續(xù)的文章中,會(huì)針對(duì)每一種升級(jí)模式,做更詳細(xì)的說明。
-
芯片
+關(guān)注
關(guān)注
462文章
53491瀏覽量
458386 -
燒錄
+關(guān)注
關(guān)注
8文章
305瀏覽量
36918 -
FSP
+關(guān)注
關(guān)注
0文章
47瀏覽量
7642
發(fā)布評(píng)論請(qǐng)先 登錄
四種支持向量機(jī)用于函數(shù)擬合與模式識(shí)別的Matlab示例程序
四種不同供電模式的LED拓?fù)?b class='flag-5'>介紹
STM32芯片GPIO的四種輸入模式和四種輸出模式
介紹AUTOSAR支持的四種功能安全機(jī)制
二維碼的四種主要應(yīng)用模式
IEC 61851標(biāo)準(zhǔn)中的四種EV充電模式
GPIO的四種輸入模式介紹
淺析電子負(fù)載常見的的四種工作模式
介紹MCUboot支持的四種升級(jí)模式(1)
MCUboot Swap模式升級(jí)的流程和注意事項(xiàng)
變頻器主要支持哪四種模式?有什么區(qū)別?

介紹MCUboot支持的四種升級(jí)模式(2)
評(píng)論