最近在英飛凌開發者論壇中注意到,許多開發者都在討論和提問關於如何實現基於TRAVEO™ T2G系列晶片的OTA(Over-The-Air,遠程升級技術)更新應用。為了幫助大家更好地基於TRAVEO™ T2G系列晶片的Dual Bank方案架構實現OTA功能,本文將簡要介紹其原理,並提供相關的資源和示例代碼,希望能夠為大家提供參考和幫助。(作者:英飛凌 Yang Jannie)
OTA(Over-the-Air) 是一種通過無線通信協議遠程更新設備固件的軟體更新方法,在現代智能汽車和聯網汽車的快速發展下,在汽車應用中越來越受到重視。通過OTA更新,設備製造商可以在設備部署後修復漏洞、添加新功能或優化性能,而無需物理接觸設備。它既可以提升用戶體驗和安全性,又降低維護成本和環境影響做出貢獻,為汽車行業的持續發展和創新提供了強大支持。
TRAVEO™ T2G 系列支持雙區(Dual Bank)模式,允許RWW(Read While Write)功能。Dual Bank 是一種支持OTA更新的存儲架構,它使用兩個獨立的存儲區來確保固件更新的可靠性和安全性。Dual bank技術通常涉及A/B分區機制,在OTA更新過程中,新固件會先被下載到備用分區,下載完成後,系統會在下次啟動時從新分區啟動。客戶可以基於其特殊的dual bank 模式進行相同位置的固件更新,提升了固件更新的靈活性和效率。
TRAVEO™ T2G Dual Bank劃分
TRAVEO™ T2G晶片的閃存分為Code Flash和Work Flash。
-
Code Flash用於存儲程序代碼,即晶片的固件或軟體。
-
Work Flash用於存儲數據,即程序運行時需要存儲的數據,例如配置信息、日誌數據等。
在Dual Bank模式下, Code Flash被劃分為兩個獨立存儲體(Logical Bank 0和Logical Bank 1),在不同mapping下,存儲體地址互換,以支持動態重映射。以下圖CYT2B7晶片為例:
-
Mapping A:
Logical Bank 0地址:
0x1000_0000-0x1008_8000,
Logical Bank 1地址:
0x1200_0000-0x1208_8000
-
Mapping B:
Logical Bank 0地址:
0x1200_0000-0x1208_8000,
Logical Bank 1地址:
0x1000_0000-0x1008_8000

從上圖CYT2B7晶片的memory map可見,TRAVEO™ T2G系列的code flash可以分成Single Bank 模式和Dual Bank 模式。通過配置FLASHC_FLASH_CTL寄存器的MAIN_BANK_MODE位與MAIN_MAP位實現對模式的控制。
-
MAIN_BANK_MODE位
(FLASHC_FLASH_CTL[12]):
置1啟用Dual Bank模式,置0返回Single Bank模式1。
-
MAIN_MAP位
(FLASHC_FLASH_CTL[8]):
僅在Dual Bank模式下有效,0選擇Mapping A,1選擇Mapping B
當然,Work Flash也可配置為Single Bank模式或Dual Bank模式,可通過FLASHC_FLASH_CTL寄存器的WORK_BANK_MODE位與WORK_MAP位進行配置。需要注意的是這幾位在復位時都會被清除。ROM boot和flash boot不會改變這些配置。換句話說,TRAVEO™ T2G系列MCU在 Arm® Cortex®-M0+應用程序啟動之前總是以Single Bank模式啟動。應用程序需要根據實際需求手動配置Dual Bank功能。
-
高可靠性:dual bank結構允許在一個bank進行更新的同時,另一個bank繼續執行當前的固件。這種方式確保了更新過程中設備的正常運行,避免了因更新失敗導致的系統崩潰。
-
無縫切換:更新完成後,系統可以無縫切換到新固件,無需長時間的停機或重啟過程。
-
容錯能力:如果在更新過程中出現問題,系統可以回滾到舊版本固件,保證設備的穩定性和可靠性。
-
減少停機時間:由於更新可以在後台進行,設備的停機時間大大減少,提高了設備的可用性。
-
安全性:TRAVEO™ T2G系列MCU配備硬體安全模塊,提供強大的加密和認證機制,確保OTA更新的安全性和完整性。
更新固件實現流程
固件更新:
-
假設CM4/7用戶程序代碼運行在Bank 0即處於Mapping A映射時,接收到通過車輛局域網(如CAN FD或以太網)發送的固件更新請求和數據。
-
CM0+用戶程序開始擦除整個Bank 1的code flash區域和特定的work flash區域,其中work flash區域需要放置remap參數,用於標識下一次復位後需要設置Mapping A還是Mapping B,即最新程序存儲於bank 0還是bank 1中。在此示例中,將更新bank 1的code flash,故而下一次復位後將使用Mapping B。
-
完成flash擦除後,CM0+用戶程序將相同的CM0+用戶程序代碼複製到Bank 1,並編程新的CM4/7用戶程序代碼。需要注意的是,以CYT2B7晶片為例,無論是運行在Mapping A需要更新bank 1的程序還是運行在Mapping B需要更新bank 0,更新地址皆處於0x1200_0000-0x1208_8000,而非0x1000_0000-0x1008_8000。
-
最後,CM0+更新work flash中的remap參數,以便在下一次復位時切換應用程序代碼。
系統啟動與切換:

-
在復位後,CM4/7和CM0+開始執行ROM boot程序。CM4/7進入等待中斷(WFI)狀態,直到CM0+使能它。
-
CM0+完成ROM boot和flash boot後,執行其用戶程序代碼。在CM0+用戶程序配置FLASHC_FLASH_CTL 寄存器MAIN_BANK_MODE位為dual bank模式,並讀取work flash中的remap參數。
-
如果從work flash讀取的數據是預期值,CM0+會跳轉到SRAM代碼,然後通過設FLASHC_FLASH_CTL 寄存器的MAIN_MAP位將code flash 的mapping切換為“Mapping B”。需要注意的是,改變這一位將改變flash的映射,故必須將此部分切換mapping操作的代碼置於SRAM中執行,而不能繼續在flash中執行。
-
在完成切換操作後,code flash bank 0的地址將與code flash bank 1的地址交換。
-
CM0+跳回到code flash中執行程序並使能CM4/7。CM4/7和CM0+運行程序地址不變,但此時執行的已是bank 1中的新代碼。
請訪問以下鏈接下載相關示例代碼:
如果您在實現過程中遇到問題,可以嘗試在社區中尋找答案,可能已經有人提出了相同的困擾並得到了解決。
Community熱帖舉例:
如果您還未曾使用過TRAVEO™ T2G 系列晶片,可以點擊這裡快速入門:
評論