“ 本文通過從芯片手冊,寄存器到代碼實現(xiàn)來梳理ota的bank AB升級方案, 舉例芯片 aurix Tc397”
01—內(nèi)存先行
首先要評估flash夠不夠,如果flash都不夠,就無從SWAP機制可談。
正常情況下,我們的芯片有6塊flash可以用。如下圖
在激活OTA配置的時候,內(nèi)存映射發(fā)生了變化。如下圖
從這兩張圖可以看出來,如果打開OTA配置的話,我們實際上可以用的flash 只有7M. 當(dāng)然如果是別的芯片可用的flash會更少。這點是一開始就需要評估好的。否則芯片提供的機制無法滿足需求。
02—配置初始化流程
這里先放一張圖,芯片手冊提供的標(biāo)準(zhǔn)流程,后面會對每一個步驟進行解析
03—運行時流程
這里也先放一張圖,芯片手冊提供的標(biāo)準(zhǔn)流程,后面會對每一個步驟進行解析
04—軟件實現(xiàn)
從這里開始我們要對第二三兩章的圖進行一一實現(xiàn)。
一般來說是什么樣的流程呢,簡單的來說。下圖
05—讀取當(dāng)前bank
當(dāng)配置完SOTA之后,下一次上電,MCU會做什么呢。會首先讀取UCB里面的SOTA配置信息。發(fā)現(xiàn)了SOTA被配置上了。則要做下面兩件事
因為地址重映射了,訪問路徑變了,什么意思呢?答:訪問自己的pflash路徑變了。直達的路線不給訪問了,都需要走上面的總線。所以讀寫自己pflash速度可能會變慢。
通過下面寄存器自動寫入。
/** 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信息寫入寄存器,沒錯就是下面的寄存器。所以我們可以通過這個寄存器來獲取當(dāng)前所在的bank.
SCU_SWAPCTRL.B.ADDRCFG
到這里第一步讀取當(dāng)前的bank已經(jīng)清楚了,并且也清楚什么時候這個寄存器被賦值的。
下一步根據(jù)當(dāng)前的bank來選擇刷寫的地址。我們配置mcal的flashload都知道這個函數(shù)。
06—根據(jù)當(dāng)前bank來刷寫固件
FlsLoader_ReturnType FlsLoader_Write(const FlsLoader_AddressType TargetAddress, const FlsLoader_LengthType Length, const uint8* const SourceAddressPtr)
這里面其中一個形參就是mcu的具體地址。
在使用SOTA時候,這個地址是需要注意的。也就是最上面我們給出的兩張圖。如果你下一次需要運行在BankB 那么這次刷寫的地址需要有個offset. 好吧,把上面圖復(fù)制下來仔細(xì)說一下。
就是這里當(dāng)我們下一次需要運行在Bank B 我們的hex/s19文件本身的地址是不需要變化的。假設(shè)我們的hex地址開始是0x80001000 那么 這個就需要被刷寫到0x80601000這個地址。當(dāng)我們把地址明確了之后,就和普通的bootloader 刷寫程序一樣。等待刷寫流程走完后。到了我們下一步,配置SOTA 和 寫入 SOTA。這里為什么提了一下寫入呢。因為這個寫SOTA有點特殊,因為這個配置信息是存在UCB里面的UCB_SWAP_ORIG/COPY
。這個位置是可能會把板子搞壞的位置。
07—配置SOTA
最開始的流程圖在這里就用上了。我們這里先不考慮HSM的情況,這塊容易死機。
首先根據(jù)這個圖,直到第一步是要擦除掉現(xiàn)在已經(jīng)有的UCB。除非是第一次。否則都需要先擦除一遍。
但是這里要先注意一下SOTA的狀態(tài),是否enable. 通過下面寄存器進行配置。具體可以看一下手冊解釋。
接上面,擦除方式呢?這里屬于Dflash的位置,用Dflash最原始的辦法就可以了。
擦除完之后就要根據(jù)當(dāng)前的bank來選擇寫入的配置字。其實就是寫入UCB里面。和上面擦除一樣。這里屬于dflash, 寫的方式可以使用dmu.具體寫的內(nèi)容就是下面的兩個位置。根據(jù)上面的參數(shù)即可。
具體數(shù)值呢?就是上面提到的0xAA 或者是0x55。下面的confirm呢?這里是固定的數(shù)據(jù)。
到了這里就到了流程的尾部。
系統(tǒng)reset, reset之后 啟動過程芯片會自動通過ucb的配置,來切換到另一個bank.
審核編輯:湯梓紅
-
芯片
+關(guān)注
關(guān)注
459文章
51952瀏覽量
433965 -
FlaSh
+關(guān)注
關(guān)注
10文章
1657瀏覽量
150690 -
內(nèi)存
+關(guān)注
關(guān)注
8文章
3102瀏覽量
74903 -
SWAP
+關(guān)注
關(guān)注
0文章
51瀏覽量
13102 -
OTA
+關(guān)注
關(guān)注
7文章
600瀏覽量
36056
原文標(biāo)題:OTA-swap Bank AB
文章出處:【微信號:談思實驗室,微信公眾號:談思實驗室】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
STM32H743 FLASH SWAP實現(xiàn)IAP升級出錯了怎么解決?
OTA固件升級教程
嵌入式OTA升級實現(xiàn)原理是什么
什么是在線OTA升級呢
設(shè)備OTA空中升級原理是什么
RT-thread實現(xiàn)U盤升級的一種OTA方案
OTA的升級方法
如何實現(xiàn)OpenHarmony的OTA升級
AB swap不支持啟用cache的應(yīng)用嗎?
在線升級 | 物聯(lián)網(wǎng)中的OTA升級原理
OTA是什么?OTA升級有何用?
在線升級 | 物聯(lián)網(wǎng)中的OTA升級原理

詳解藍牙空中升級(BLE OTA)原理與步驟

OTA軟件升級管理系統(tǒng)

評論