01
什么是SOTA?
SOTA全稱是云端軟件升級(Software updates Over The Air),就是指在不連接燒寫器的情況下,通過CAN、UART或其它通訊方式,實現(xiàn)應用程序的更新。 在進行SOTA時,需要把舊的應用程序擦除,把新的應用程序?qū)懭?。常?guī)的實現(xiàn)方式需要分別開發(fā)BootLoader程序和APP程序,MCU上電先運行BootLoader,BootLoader根據(jù)情況選擇是否跳轉(zhuǎn)到APP和是否進行程序更新。具體來說有以下幾種方式: 方案一:更新程序時,由APP接收更新數(shù)據(jù)并暫存于Flash,再將APP更新標志位置位;MCU重啟時,BootLoader檢查更新標志位,如有效,則擦除舊的APP,再將暫存于Flash的新APP數(shù)據(jù)寫入APP運行地址處。該方案的優(yōu)點是更新數(shù)據(jù)的接收由APP完成,BootLoader不需要通訊協(xié)議棧,代碼量更小,且數(shù)據(jù)傳輸中斷時,原有APP不損壞。缺點是需要額外的Flash空間暫存更新數(shù)據(jù)。 方案二:BootLoader中內(nèi)置通訊協(xié)議棧,更新時,先向MCU發(fā)送指令使其跳轉(zhuǎn)到BootLoader,之后先擦除舊APP,在接收新APP的同時直接將其寫入Flash的APP運行地址處。該方案的優(yōu)點是不需要額外的Flash暫存數(shù)據(jù),缺點是BootLoader代碼更復雜,且如果數(shù)據(jù)傳輸發(fā)生中斷,舊的APP將不能被恢復。該方案更適合Flash容量較小的MCU。 方案三:將方案一和方案二相結(jié)合,即在BootLoader程序中內(nèi)置通訊協(xié)議棧,更新時,先向MCU發(fā)送指令使其跳轉(zhuǎn)到BootLoader,之后接收更新數(shù)據(jù)的時候,采用方案一的方法,先將數(shù)據(jù)暫存于Flash,待數(shù)據(jù)全部接收完成后再擦除舊的APP,寫入新的APP。該方案結(jié)合了方案一和方案二的優(yōu)點,且能在沒有APP或APP損壞的狀態(tài)下實現(xiàn)程序更新。缺點是BootLoader代碼量更大,F(xiàn)lash空間占用更大。 方案四:在Flash中劃分出兩塊相同大小的區(qū)域,分為A區(qū)和B區(qū),都用來存放APP,但同一時間下只有一個區(qū)的APP是有效的,分別設置一個標志位標識其有效性。初始狀態(tài)下先將APP寫入A區(qū),更新的時候,將新的APP寫入B區(qū),再把A區(qū)的APP擦除,同時更新兩個區(qū)的有效性標志位狀態(tài)。BootLoader中判斷哪個區(qū)的APP有效,就跳轉(zhuǎn)到哪個區(qū)運行。這種方法不需要重復拷貝APP數(shù)據(jù),但最大的一個缺陷是AB區(qū)的APP程序運行地址不同,需要分別編譯,從而使得可應用性大大降低。 經(jīng)過上面的分析,可以看出來每種方案都有其優(yōu)缺點,對于Flash容量較小的MCU,通常采用方案二,因為沒有過多的空間暫存APP更新數(shù)據(jù)。但對于TC3XX這一類的MCU來說,F(xiàn)lash容量通常都很大,足夠用,所以通常要先把APP暫存下來再進行更新,防止數(shù)據(jù)傳輸中斷導致APP不可用。上面的方案一、三、四都能實現(xiàn),但并不完美。TC3XX系列的SOTA機制更類似于方案四,但它的Flash支持兩種地址映射方式,從而使得APP編譯時不需要區(qū)分AB區(qū),使用相同的地址即可,從而避免了方案四的硬傷,為我們提供了一種最佳的SOTA方案。
02
TC3XX的Flash地址映射方式
我們以TC397的Flash為例,用于存儲程序代碼的PFlash的標準地址映射方式(Standard Address Map)如下,表中PF0-PF5代表物理意義上的5塊Flash。 第二種地址映射方式被稱為 Alternate Address Map,如下表所示,標準模式下PF0-1的地址范圍現(xiàn)在被映射到了PF2-3,PF4的地址范圍被映射到了PF5。
03
TC3XX的SOTA功能描述
當SOTA功能激活時,PFLash被劃分為兩部分,一部分用來存儲可執(zhí)行代碼(active bank),另一部分可用來讀取和寫入(inactive bank)。當APP更新完畢后,兩個部分互換,即切換上面兩種地址映射方式。在標準模式下使用PF0-1和PF4作為active bank,后文稱作組A,在Alternate模式下使用PF2-3和PF5作為active bank,后文稱作組B,就可以實現(xiàn)上述方案四,且能寫入完全相同的APP程序,以相同的地址進行運行。 需要注意的是,所有NVM操作都是通過DMU使用PFLASH的物理系統(tǒng)地址執(zhí)行的,也就是說,NVM操作總是使用標準的地址映射,而不管選擇使用哪種地址映射。“NVM操作”是一個術(shù)語,用于任何針對FLASH的命令,如程序、擦除等,但不包括讀取和執(zhí)行代碼。 有關(guān)SOTA地址映射的參數(shù)在Flash中的UCB(User Configuration Block)中進行配置,在UCB中配置后,只有當下次MCU復位的時候才會更新配置。
04
SOTA的配置參數(shù)
(1)SOTA Mode Enable 該參數(shù)決定是否開啟SOTA模式,在寄存器Tuning Protection Configuration中的SWAPEN進行配置,定義如下: (2)Bank Swap 在UCB_SWAP區(qū)域中,對SOTA模式下使用哪種地址映射進行配置。 UCB_SWAP區(qū)域包含以下內(nèi)容:
其中最重要的是前四個,我們分別來看一下: ① MARKERLx (x=0-15)
MARKERL中的SWAP就是標記使用標準地址映射還是Alternate地址映射。 ② MARKERHx (x=0-15)
MARKERH中存著與之相對應的MARKERLx.SWAP的入口地址,是用來做校驗的。 ③ CONFIRMATIONLx (x=0-15)
CONFIRMATIONL是確認代碼,要寫入固定的0x57B5327F,上面的MARKERLx.SWAP才有效。 ④ MARKERHx (x=0-15)
MARKERH中存著與之對應的 CONFIRMATIONLx.CODE的入口地址,也是用來做校驗的。 ?
05
SOTA的初始化配置
初始化狀態(tài)是使用標準地址映射,此時SOTA模式未啟用。按以下步驟啟用SOTA: ① 用燒寫器把APP燒寫進PFlash的組A地址處。 ② 向MARKERL0寫入0x00000055。 ③ 向MARKERH0寫入MARKERL0的系統(tǒng)地址。 ④ 向CONFERMATIONL0寫入0x57B5327F。 ⑤ 向CONFERMATIONH0寫入CONFERMATIONL0的系統(tǒng)地址。 ⑥ 將UCB_OTP0中SWAPEN標志位置為Enable。 ⑦ 重啟MCU。 經(jīng)過上面的步驟,就事MCU進入了SOTA模式,其中步驟②-⑤是為了啟用標準地址映射。手冊中給了如下的流程圖供參考,其中一些加解密的步驟我這里省略了,暫時沒有詳細研究:
06
SOTA的后續(xù)配置
上面說的是第一次啟用SOTA時的配置,下面我們就來看一下SOTA啟用后,進行APP更新的步驟: ① 將新的APP寫入PFlash中未激活的部分,即上文提到的Inactive Bank,并進行準確性校驗。 ② 如果新的APP被寫入組B,則向MARKERLx.SWAP寫入0x000000AA,啟用Alternate地址映射模式;如果新的APP被寫入組A,則向MARKERLx.SWAP寫入0x00000055,啟用標準地址映射模式。(x是0-15的值,從0開始向上遞增,由上文可知UCB_SWAP最多能存儲16組標志值,存滿后再擦除重新寫入。) ③ MARKERHx.ADDR、CONFIRMATIONLx.CODE和CONFIRMATIONHx.ADDR配置同上文。 ④ 向CONFIRMATIONL(x-1).CODE再次寫入0xFFFFFFFF,來使上一組UCB_SWAP值失效。向PFlash再次寫入全1的值不會導致PFlash操作錯誤。 手冊中給了下面這個流程圖供參考: ? 以上就是Tricore TC3XX系列SOTA機制的介紹,我目前也只是看了手冊,還沒有實際運用過,有不正確的地方歡迎大家交流討論。 最后只要將此文章分享至朋友圈,集20個贊,截圖后臺發(fā)給小編,即可獲取下圖小編整理的一些TC3XX的資料。
責任編輯:彭菁
-
軟件
+關(guān)注
關(guān)注
69文章
5121瀏覽量
88961 -
APP
+關(guān)注
關(guān)注
33文章
1585瀏覽量
73823 -
程序
+關(guān)注
關(guān)注
117文章
3824瀏覽量
82443 -
Aurix
+關(guān)注
關(guān)注
1文章
73瀏覽量
11268
原文標題:AURIX TC3XX系列的SOTA機制詳解
文章出處:【微信號:eng2mot,微信公眾號:汽車ECU開發(fā)】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
AURIX? TC3XX如何暫時僅啟用/禁用CAN中斷?
SWAP是否適用于兩個用于TC3xx系列控制器的獨立軟件?
GCC和TASKING有什么區(qū)別?應該為AURIX? TC3xx選擇什么?
TSIM是否支持TC3xx系列在沒有硬件的情況下調(diào)試應用程序?
英飛凌AURIX單片機TC3xx系列助力自動駕駛和電動交通發(fā)展
英飛凌AURIX單片機TC3xx系列助力電動交通發(fā)展
關(guān)于英飛凌AURIX?單片機TC3xx系列的性能和應用
英飛凌 AURIX 單片機 培訓文檔鏈接

AURIX? TC3xx NVM是非易失性存儲器學習筆記

英飛凌AURIX TC3xx和TRAVEO T2G系列微控制器介紹

TC3xx芯片DMU介紹

評論