最近恩智浦在Github發(fā)布了一套基于MCU的OTA工程,該工程支持i.MX RT系列,且支持security的相關(guān)功能,得到了用戶的廣泛關(guān)注。
這套工程是基于恩智浦的EVK開發(fā)板,板載Flash的容量也就決定了整個OTA工程的存儲結(jié)構(gòu)。但是不同容量的flash,OTA的存儲結(jié)構(gòu)也不盡相同。本文將最近支持客戶時的一些經(jīng)驗予以總結(jié),當(dāng)大家更換flash的時候,可以更快的完成OTA工程配置。本文介紹的方案為基于Remap功能實現(xiàn)OTA的方法。整個OTA的存儲結(jié)構(gòu)可以用下圖進行表示,即 SBL(Secure Bootloader), OTA Flag Data,Slot1,Slot2和Customer Data區(qū)域。
SBL的主要功能是用于在芯片POR啟動后,根據(jù)OTA flag data的信息,決定存儲在Slot1或者Slot2的程序進行運行。除此之外,還支持程序的驗簽,回滾等功能。
OTA Flag Data區(qū)域主要是用于存儲OTA升級過程中的一些標(biāo)志位信息,根據(jù)相關(guān)的標(biāo)志位信息SBL進行image升級,回滾和跳轉(zhuǎn)到對應(yīng)的slot運行程序。
Slot1和Slot2用于存儲應(yīng)用程序。
Customer Data用于存儲客戶的一些信息(可選項,非必須)。
本文將就上述幾個區(qū)域的存儲空間分配,及中間的一些需要注意的點予以介紹。
基本的硬件環(huán)境是i.MX RT1010-EVK開發(fā)板,客戶的實際需求是使用一顆容量為512KB的Flash,且不需要使用Security相關(guān)的功能。因此在禁用Security功能后,使用IAR編譯出一個大小為25KB的SBL.bin文件。由于OTA中使用的Remap功能需要4KB對齊,以及Flash的最小擦除容量是4KB,因此SBL分配的容量是28KB,則此時SBL的地址分配空間為:FunctionAdd_StartAdd_End
SBL0x6000 00000x6000 6FFF
OTA Flag data盡管只有32Bytes的數(shù)據(jù),但是在升級過程中這些數(shù)據(jù)需要讀寫擦,但Flash的擦除過程需要按照Sector的大小進行,因此也至少需要留存4KB的空間,則此時OTA Flag data的地址及空間分配為:
接下來就是Slot1和Slot2,Slot1和Slot2要使用Remap的功能進行切換,Remap的地址需要4K對齊,則此時用于存儲應(yīng)用層程序的地址空間分配為:
FunctionAdd_StartAdd_End
Slot10x6000 80000x6004 3FFF
Slot20x6004 40000x6007 FFFF
此時,細(xì)心的朋友們就會發(fā)現(xiàn),完整的512K Flash空間已經(jīng)被使用光了。沒錯,這次客戶不需要用這個CustomerData區(qū)域,希望把更多的空間用于應(yīng)用程序。
在完成了OTA存儲結(jié)構(gòu)按功能地址分配之后,我們進行一些細(xì)部探究。
首先看SBL,SBL區(qū)間主要包括用于Flash boot的相關(guān)信息,例如IVT, Flash Config Block等。這部分代碼基本上不需要改動,可以直接使用。
在地址空間分配上,可以將SBL區(qū)域視為一個可以從Flash XIP boot的hello word工程。
接著看一下OTAFlag Data區(qū)間的地址分配,OTA Flag Data共計32個字節(jié),用于指示OTA過程中的三種狀態(tài),升級,回滾以及正常工作(沒有升級和回滾發(fā)生)。
該32字節(jié)通常存儲在Slot1的首地址之前的32字節(jié)位置。
最后來看Slot1和Slot2的地址空間分配。
應(yīng)用程序的首地址,即中斷向量表的首地址并不是從Slot1的首地址開始的,原因有兩點
第一在image的起始地址需要增加用于OTA的ImageHeader信息,該Image Header的大小為32字節(jié)。
其次,對于應(yīng)用程序中中斷向量表的起始地址,需要進行計算。其基本的計算原則是:中斷向量的數(shù)量 * 4的結(jié)果,向上對齊到2的次冪整數(shù)倍??碦T1010的中斷向量共計256個,但是真正可以使用的是96個。則此時的計算結(jié)果是:96 * 4 = 384。向上對齊到2次冪整數(shù)倍,則為512即0x200。
所以,應(yīng)用程序的真正起始地址需要在Slot1的基礎(chǔ)上,向后調(diào)整0x200。
Slot2的空間分配也需要滿足這個條件。
最終完整的地址空間分配如下圖所示:
當(dāng)需要對OTAFlag Data以及Slot地址進行分配,可以在程序中搜索下圖中的關(guān)鍵詞進行更改,對下面的表格進行調(diào)整。
通常需要進行關(guān)注的關(guān)鍵地址為:BOOT_FLASH_ACT_APP和 BOOT_FLASH_CAND_APP。其余的地址信息,與這兩個地址信息存在依賴關(guān)系,程序內(nèi)部可根據(jù)這兩個地址信息進行計算。
需要注意的是,本文中涉及到的OTA方法,是基于Remap功能實現(xiàn)的,因此僅僅適用于除RT1050,RT1020, RT1024, RT1015以外的RT系列。
最后,向在本次客戶支持中提供大量協(xié)助的Tim, Gavin, Xiaoli表示感謝。
差點忘了,原工程的下載地址是:
https://github.com/NXPmicro/sbl
https://github.com/NXPmicro/sfw
編輯:jq
-
芯片
+關(guān)注
關(guān)注
456文章
51062瀏覽量
425806 -
OTA
+關(guān)注
關(guān)注
7文章
584瀏覽量
35327 -
Boot
+關(guān)注
關(guān)注
0文章
150瀏覽量
35870 -
SBL
+關(guān)注
關(guān)注
0文章
4瀏覽量
8333
原文標(biāo)題:i.MX RT1010 OTA存儲結(jié)構(gòu)小記
文章出處:【微信號:NXP_SMART_HARDWARE,微信公眾號:恩智浦MCU加油站】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
相關(guān)推薦
評論