“ 本文通過(guò)從芯片手冊(cè),寄存器到代碼實(shí)現(xiàn)來(lái)梳理ota的bank AB升級(jí)方案, 舉例芯片 aurix Tc397”
01—內(nèi)存先行
首先要評(píng)估flash夠不夠,如果flash都不夠,就無(wú)從SWAP機(jī)制可談。
正常情況下,我們的芯片有6塊flash可以用。如下圖
在激活OTA配置的時(shí)候,內(nèi)存映射發(fā)生了變化。如下圖
從這兩張圖可以看出來(lái),如果打開(kāi)OTA配置的話,我們實(shí)際上可以用的flash 只有7M. 當(dāng)然如果是別的芯片可用的flash會(huì)更少。這點(diǎn)是一開(kāi)始就需要評(píng)估好的。否則芯片提供的機(jī)制無(wú)法滿足需求。
02—配置初始化流程
這里先放一張圖,芯片手冊(cè)提供的標(biāo)準(zhǔn)流程,后面會(huì)對(duì)每一個(gè)步驟進(jìn)行解析
03—運(yùn)行時(shí)流程
這里也先放一張圖,芯片手冊(cè)提供的標(biāo)準(zhǔn)流程,后面會(huì)對(duì)每一個(gè)步驟進(jìn)行解析
04—軟件實(shí)現(xiàn)
從這里開(kāi)始我們要對(duì)第二三兩章的圖進(jìn)行一一實(shí)現(xiàn)。
一般來(lái)說(shuō)是什么樣的流程呢,簡(jiǎn)單的來(lái)說(shuō)。下圖
05—讀取當(dāng)前bank
當(dāng)配置完SOTA之后,下一次上電,MCU會(huì)做什么呢。會(huì)首先讀取UCB里面的SOTA配置信息。發(fā)現(xiàn)了SOTA被配置上了。則要做下面兩件事
因?yàn)榈刂分赜成淞?,訪問(wèn)路徑變了,什么意思呢?答:訪問(wèn)自己的pflash路徑變了。直達(dá)的路線不給訪問(wèn)了,都需要走上面的總線。所以讀寫(xiě)自己pflash速度可能會(huì)變慢。
通過(guò)下面寄存器自動(dòng)寫(xiě)入。
/** rief CPUx Flash Configuration Register 4 */ typedef struct _Ifx_CPU_FLASHCON4_Bits { Ifx_Strict_32Bit DDIS:1; /**< rief [0:0] Disable direct LPB access (rw) */ Ifx_Strict_32Bit reserved_1:31; /**< rief [31:1] internal Reserved */ } Ifx_CPU_FLASHCON4_Bits;
把當(dāng)前的bank信息寫(xiě)入寄存器,沒(méi)錯(cuò)就是下面的寄存器。所以我們可以通過(guò)這個(gè)寄存器來(lái)獲取當(dāng)前所在的bank.
SCU_SWAPCTRL.B.ADDRCFG
到這里第一步讀取當(dāng)前的bank已經(jīng)清楚了,并且也清楚什么時(shí)候這個(gè)寄存器被賦值的。
下一步根據(jù)當(dāng)前的bank來(lái)選擇刷寫(xiě)的地址。我們配置mcal的flashload都知道這個(gè)函數(shù)。
06—根據(jù)當(dāng)前bank來(lái)刷寫(xiě)固件
FlsLoader_ReturnType FlsLoader_Write(const FlsLoader_AddressType TargetAddress, const FlsLoader_LengthType Length, const uint8* const SourceAddressPtr)
這里面其中一個(gè)形參就是mcu的具體地址。
在使用SOTA時(shí)候,這個(gè)地址是需要注意的。也就是最上面我們給出的兩張圖。如果你下一次需要運(yùn)行在BankB 那么這次刷寫(xiě)的地址需要有個(gè)offset. 好吧,把上面圖復(fù)制下來(lái)仔細(xì)說(shuō)一下。
就是這里當(dāng)我們下一次需要運(yùn)行在Bank B 我們的hex/s19文件本身的地址是不需要變化的。假設(shè)我們的hex地址開(kāi)始是0x80001000 那么 這個(gè)就需要被刷寫(xiě)到0x80601000這個(gè)地址。當(dāng)我們把地址明確了之后,就和普通的bootloader 刷寫(xiě)程序一樣。等待刷寫(xiě)流程走完后。到了我們下一步,配置SOTA 和 寫(xiě)入 SOTA。這里為什么提了一下寫(xiě)入呢。因?yàn)檫@個(gè)寫(xiě)SOTA有點(diǎn)特殊,因?yàn)檫@個(gè)配置信息是存在UCB里面的UCB_SWAP_ORIG/COPY
。這個(gè)位置是可能會(huì)把板子搞壞的位置。
07—配置SOTA
最開(kāi)始的流程圖在這里就用上了。我們這里先不考慮HSM的情況,這塊容易死機(jī)。
首先根據(jù)這個(gè)圖,直到第一步是要擦除掉現(xiàn)在已經(jīng)有的UCB。除非是第一次。否則都需要先擦除一遍。
但是這里要先注意一下SOTA的狀態(tài),是否enable. 通過(guò)下面寄存器進(jìn)行配置。具體可以看一下手冊(cè)解釋。
接上面,擦除方式呢?這里屬于Dflash的位置,用Dflash最原始的辦法就可以了。
擦除完之后就要根據(jù)當(dāng)前的bank來(lái)選擇寫(xiě)入的配置字。其實(shí)就是寫(xiě)入U(xiǎn)CB里面。和上面擦除一樣。這里屬于dflash, 寫(xiě)的方式可以使用dmu.具體寫(xiě)的內(nèi)容就是下面的兩個(gè)位置。根據(jù)上面的參數(shù)即可。
具體數(shù)值呢?就是上面提到的0xAA 或者是0x55。下面的confirm呢?這里是固定的數(shù)據(jù)。
到了這里就到了流程的尾部。
系統(tǒng)reset, reset之后 啟動(dòng)過(guò)程芯片會(huì)自動(dòng)通過(guò)ucb的配置,來(lái)切換到另一個(gè)bank.
審核編輯:湯梓紅
-
芯片
+關(guān)注
關(guān)注
456文章
51192瀏覽量
427306 -
FlaSh
+關(guān)注
關(guān)注
10文章
1642瀏覽量
148683 -
內(nèi)存
+關(guān)注
關(guān)注
8文章
3055瀏覽量
74336 -
SWAP
+關(guān)注
關(guān)注
0文章
51瀏覽量
12918 -
OTA
+關(guān)注
關(guān)注
7文章
587瀏覽量
35392
原文標(biāo)題:OTA-swap Bank AB
文章出處:【微信號(hào):談思實(shí)驗(yàn)室,微信公眾號(hào):談思實(shí)驗(yàn)室】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
OTA固件升級(jí)教程
RK3399平臺(tái)Android鏡像-OTA 本地升級(jí)、OTA遠(yuǎn)程升級(jí)
嵌入式OTA升級(jí)實(shí)現(xiàn)原理是什么
什么是在線OTA升級(jí)呢
設(shè)備OTA空中升級(jí)原理是什么
RT-thread實(shí)現(xiàn)U盤(pán)升級(jí)的一種OTA方案
OTA的升級(jí)方法
如何實(shí)現(xiàn)OpenHarmony的OTA升級(jí)
AB swap不支持啟用cache的應(yīng)用嗎?
在線升級(jí) | 物聯(lián)網(wǎng)中的OTA升級(jí)原理
OTA是什么?OTA升級(jí)有何用?
在線升級(jí) | 物聯(lián)網(wǎng)中的OTA升級(jí)原理
![在線<b class='flag-5'>升級(jí)</b> | 物聯(lián)網(wǎng)中的<b class='flag-5'>OTA</b><b class='flag-5'>升級(jí)</b>原理](https://file.elecfans.com/web2/M00/40/03/pYYBAGJrSWqAb-nSAAAXmKtCFeo833.jpg)
詳解藍(lán)牙空中升級(jí)(BLE OTA)原理與步驟
![詳解藍(lán)牙空中<b class='flag-5'>升級(jí)</b>(BLE <b class='flag-5'>OTA</b>)原理與步驟](https://file1.elecfans.com/web2/M00/8C/58/wKgaomSrYcWAXj_OAAATLcP8Cd8443.png)
OTA軟件升級(jí)管理系統(tǒng)
![<b class='flag-5'>OTA</b>軟件<b class='flag-5'>升級(jí)</b>管理系統(tǒng)](https://file1.elecfans.com/web3/M00/05/BE/wKgZO2eEbl2AHL9hAAA8BowkMfY184.png)
評(píng)論