如何實現(xiàn)基于英飛凌TRAVEO? T2G系列芯片的Dual Bank方案架構(gòu)實現(xiàn)OTA功能
最近在 英飛凌開發(fā)者論壇 中注意到,許多開發(fā)者都在討論和提問關(guān)于如何實現(xiàn)基于TRAVEO? T2G系列芯片的OTA(Over-The-Air,遠程升級技術(shù))更新應(yīng)用。為了幫助大家更好地基于TRAVEO? T2G系列芯片的Dual Bank方案架構(gòu)實現(xiàn)OTA功能,本文將簡要介紹其原理,并提供相關(guān)的資源和示例代碼,希望能夠為大家提供參考和幫助。(作者:英飛凌 Yang Jannie)
本文引用地址:http://2s4d.com/article/202504/469654.htmOTA(Over-the-Air) 是一種通過無線通信協(xié)議遠程更新設(shè)備固件的軟件更新方法,在現(xiàn)代智能汽車和聯(lián)網(wǎng)汽車的快速發(fā)展下,在汽車應(yīng)用中越來越受到重視。 通過OTA更新,設(shè)備制造商可以在設(shè)備部署后修復(fù)漏洞、添加新功能或優(yōu)化性能,而無需物理接觸設(shè)備。 它既可以提升用戶體驗和安全性,又降低維護成本和環(huán)境影響做出貢獻,為汽車行業(yè)的持續(xù)發(fā)展和創(chuàng)新提供了強大支持。
TRAVEO? T2G 系列支持雙區(qū)(Dual Bank)模式,允許RWW(Read While Write)功能。 Dual Bank 是一種支持OTA更新的存儲架構(gòu),它使用兩個獨立的存儲區(qū)來確保固件更新的可靠性和安全性。Dual bank技術(shù)通常涉及A/B分區(qū)機制,在OTA更新過程中,新固件會先被下載到備用分區(qū),下載完成后,系統(tǒng)會在下次啟動時從新分區(qū)啟動??蛻艨梢曰谄涮厥獾膁ual bank 模式進行相同位置的固件更新,提升了固件更新的靈活性和效率。
參考文檔
AN220242
AN229058
TRAVEO? T2G Dual Bank劃分
TRAVEO? T2G芯片的閃存分為Code Flash和Work Flash。
Code Flash用于存儲程序代碼, 即芯片的固件或軟件。
Work Flash用于存儲數(shù)據(jù), 即程序運行時需要存儲的數(shù)據(jù),例如配置信息、日志數(shù)據(jù)等。
在Dual Bank模式下, Code Flash被劃分為兩個獨立存儲體(Logical Bank 0和Logical Bank 1),在不同mapping下,存儲體地址互換,以支持動態(tài)重映射。以下圖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 位實現(xiàn)對模式的控制。
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 位進行配置。需要注意的是這幾位在復(fù)位時都會被清除。ROM boot和flash boot不會改變這些配置。換句話說,TRAVEO? T2G系列MCU在 Arm ? Cortex ? -M0+應(yīng)用程序啟動之前總是以Single Bank模式啟動。應(yīng)用程序需要根據(jù)實際需求手動配置Dual Bank功能。
TRAVEO? T2G Dual Bank模式優(yōu)勢
高可靠性: dual bank結(jié)構(gòu)允許在一個bank進行更新的同時,另一個bank繼續(xù)執(zhí)行當前的固件。這種方式確保了更新過程中設(shè)備的正常運行,避免了因更新失敗導(dǎo)致的系統(tǒng)崩潰。
無縫切換: 更新完成后,系統(tǒng)可以無縫切換到新固件,無需長時間的停機或重啟過程。
容錯能力: 如果在更新過程中出現(xiàn)問題,系統(tǒng)可以回滾到舊版本固件,保證設(shè)備的穩(wěn)定性和可靠性。
減少停機時間: 由于更新可以在后臺進行,設(shè)備的停機時間大大減少,提高了設(shè)備的可用性。
安全性: TRAVEO? T2G系列MCU配備硬件安全模塊,提供強大的加密和認證機制,確保OTA更新的安全性和完整性。
更新固件實現(xiàn)流程
固件更新:
假設(shè)CM4/7用戶程序代碼運行在Bank 0即處于Mapping A映射時,接收到通過車輛局域網(wǎng)(如CAN FD或以太網(wǎng))發(fā)送的固件更新請求和數(shù)據(jù)。
CM0+用戶程序開始擦除整個Bank 1的code flash區(qū)域和特定的work flash區(qū)域,其中work flash區(qū)域需要放置remap參數(shù),用于標識下一次復(fù)位后需要設(shè)置Mapping A還是Mapping B,即最新程序存儲于bank 0還是bank 1中。在此示例中,將更新bank 1的code flash,故而下一次復(fù)位后將使用Mapping B。
完成flash擦除后,CM0+用戶程序?qū)⑾嗤腃M0+用戶程序代碼復(fù)制到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參數(shù),以便在下一次復(fù)位時切換應(yīng)用程序代碼。
系統(tǒng)啟動與切換
在復(fù)位后,CM4/7和CM0+開始執(zhí)行ROM boot程序。CM4/7進入等待中斷(WFI)狀態(tài),直到CM0+使能它。
CM0+完成ROM boot和flash boot后,執(zhí)行其用戶程序代碼。在CM0+用戶程序配置FLASHC_FLASH_CTL 寄存器MAIN_BANK_MODE位為dual bank模式,并讀取work flash中的remap參數(shù)。
如果從work flash讀取的數(shù)據(jù)是預(yù)期值,CM0+會跳轉(zhuǎn)到SRAM代碼,然后通過設(shè)FLASHC_FLASH_CTL 寄存器的MAIN_MAP位將code flash 的mapping切換為“Mapping B”。需要注意的是,改變這一位將改變flash的映射,故必須將此部分切換mapping操作的代碼置于SRAM中執(zhí)行,而不能繼續(xù)在flash中執(zhí)行。
在完成切換操作后,code flash bank 0的地址將與code flash bank 1的地址交換。
CM0+跳回到code flash中執(zhí)行程序并使能CM4/7。CM4/7和CM0+運行程序地址不變,但此時執(zhí)行的已是bank 1中的新代碼。
請訪問以下鏈接下載相關(guān)示例代碼:
TRAVEO? T2G SDL
TRAVEO? T2G Sample driver Library Code Examples
如果您在實現(xiàn)過程中遇到問題,可以嘗試在社區(qū)中尋找答案,可能已經(jīng)有人提出了相同的困擾并得到了解決。
Community熱帖舉例:
關(guān)于使用CYT4BB7CEBQ0AESGS切換bank總是死機問題
MSP指針跳轉(zhuǎn)
CYT2B75-OTA-flash-driver
如果您還未曾使用過TRAVEO? T2G 系列芯片,可以點擊這里快速入門:
TRAVEO? T2G MCU初次使用者快速上手:編譯器IAR
TRAVEO? T2G MCU初次使用者快速上手:編譯器Green Hills
TRAVEO? T2G MCU初次使用者快速上手:編譯器GCC
評論