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