1、前言
STM32 MCU 雙 Bank 功能有利于固件升級(jí)的實(shí)現(xiàn)。例如,新固件可以被寫入在未運(yùn)行的bank 中,而當(dāng)前 bank 仍然運(yùn)行舊固件;升級(jí)完成后,可以對(duì)新固件進(jìn)行試運(yùn)行,不合格則進(jìn)行回滾;合格的話則可以簡(jiǎn)單地切換到新固件,減少了系統(tǒng)的停機(jī)時(shí)間。那么,對(duì)于 Security 用戶,如果也使用雙 Bank 功能,會(huì)帶來一些問題,例如,入口地址發(fā)生變化,不符合安全啟動(dòng)的入口地址唯一化的原則;其次,雙 Bank 切換也要求對(duì)兩個(gè)Bank 進(jìn)行正確的同樣設(shè)置,否則,Bank 切換會(huì)導(dǎo)致 Security 漏洞;最后,OEMiROT 并沒有提供雙 Bank 切換的參考代碼。但是,即使是安全升級(jí),依然需要備份回滾的功能,例如,客戶希望,新固件寫入在未運(yùn)行的區(qū)域,而當(dāng)前的區(qū)域仍然運(yùn)行舊代碼;升級(jí)完成后,可以對(duì)新固件進(jìn)行試運(yùn)行,不合格則進(jìn)行回滾;合格則保留。
OEMiROT 是可以支持這樣的需求的。OEMiROT 的 SWAP 功能能夠?qū)π鹿碳M(jìn)行試運(yùn)行,當(dāng)用戶確認(rèn)后,系統(tǒng)默認(rèn)引導(dǎo)新程序,否則繼續(xù)使用舊固件。
2、STM32H563 OEMiROT 的默認(rèn)行為
OEMiROT 的默認(rèn)行為 Overwrite。也就是新的固件會(huì)覆蓋舊的固件。這個(gè)可以從OEMiROT_S_Code_Image.xml 或者 OEMiROT_NS_Code_Image.xml的內(nèi)容可以看出,例如,對(duì)于 OEMiROT_NS_Code_Image.xml 有以下配置。
3、修改成支持 SWAP
OEMiROT 基于 MCUBoot 開發(fā)了相應(yīng)的工具,能夠非常方便的進(jìn)行是否支持 SWAP 的功能。只需要注解掉位于STM32CubeRepositorySTM32Cube_FW_H5_V1.3.0ProjectsNUCLEOH563ZIApplicationsROTOEMiROT_BootInc的 flash_layout.h 中的宏MCUBOOT_OVERWRITE_ONLY。
4、小結(jié)
我們可以看到,使用 STM32Cube 生態(tài)系統(tǒng)很容易根據(jù)客戶自己的升級(jí)需求對(duì) OEMiROT 的固件升級(jí)行為進(jìn)行定制,例如,采用默認(rèn)的覆蓋模式或者支持升級(jí)后確認(rèn)或者備份回滾的功能。