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