0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

深入探討i.MX RT1010 OTA存儲結(jié)構(gòu)

恩智浦MCU加油站 ? 來源:恩智浦MCU加油站 ? 作者:恩智浦MCU加油站 ? 2021-10-29 16:14 ? 次閱讀

最近恩智浦在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的地址及空間分配為:

fd68864e-388a-11ec-82a8-dac502259ad0.png

接下來就是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工程。

fdc48da4-388a-11ec-82a8-dac502259ad0.png

接著看一下OTAFlag Data區(qū)間的地址分配,OTA Flag Data共計32個字節(jié),用于指示OTA過程中的三種狀態(tài),升級,回滾以及正常工作(沒有升級和回滾發(fā)生)。

該32字節(jié)通常存儲在Slot1的首地址之前的32字節(jié)位置。

ff92553a-388a-11ec-82a8-dac502259ad0.png

最后來看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的空間分配也需要滿足這個條件。

fff0a036-388a-11ec-82a8-dac502259ad0.png

最終完整的地址空間分配如下圖所示:

006545f8-388b-11ec-82a8-dac502259ad0.png

當(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

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 芯片
    +關(guān)注

    關(guān)注

    450

    文章

    49636

    瀏覽量

    417158
  • OTA
    OTA
    +關(guān)注

    關(guān)注

    7

    文章

    552

    瀏覽量

    34981
  • Boot
    +關(guān)注

    關(guān)注

    0

    文章

    148

    瀏覽量

    35675
  • SBL
    SBL
    +關(guān)注

    關(guān)注

    0

    文章

    4

    瀏覽量

    8258

原文標(biāo)題:i.MX RT1010 OTA存儲結(jié)構(gòu)小記

文章出處:【微信號:NXP_SMART_HARDWARE,微信公眾號:恩智浦MCU加油站】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏

    評論

    相關(guān)推薦

    恩智浦i.MX RT1170 uSDHC eMMC啟動時間

    大家好,我是痞子衡,是正經(jīng)搞技術(shù)的痞子。今天痞子衡給大家介紹的是恩智浦i.MX RT1170 uSDHC eMMC啟動時間。
    的頭像 發(fā)表于 08-08 15:32 ?316次閱讀
    恩智浦<b class='flag-5'>i.MX</b> <b class='flag-5'>RT</b>1170 uSDHC eMMC啟動時間

    使用i.MX RT500實現(xiàn)SPI/DMA AN14170應(yīng)用指南

    電子發(fā)燒友網(wǎng)站提供《使用i.MX RT500實現(xiàn)SPI/DMA AN14170應(yīng)用指南.pdf》資料免費下載
    發(fā)表于 02-01 10:05 ?0次下載
    使用<b class='flag-5'>i.MX</b> <b class='flag-5'>RT</b>500實現(xiàn)SPI/DMA AN14170應(yīng)用指南

    i.MX RT SDK的Wi-Fi TX功率表和信道掃描管理應(yīng)用指南

    電子發(fā)燒友網(wǎng)站提供《i.MX RT SDK的Wi-Fi TX功率表和信道掃描管理應(yīng)用指南.pdf》資料免費下載
    發(fā)表于 01-14 09:27 ?0次下載
    <b class='flag-5'>i.MX</b> <b class='flag-5'>RT</b> SDK的Wi-Fi TX功率表和信道掃描管理應(yīng)用指南

    I.MX RT1052代碼執(zhí)行在哪里?

    試用的開發(fā)板里有了I.MX RT1052 但是看I.MX RT1052有代碼與數(shù)據(jù)的SPI Flash,還有SRAM,還有片上的TCM 代碼可以執(zhí)行在TCM上么?還是在SRAM上運行。
    發(fā)表于 11-09 06:49

    基于i.MX RT1170的兩輪車數(shù)字儀表盤參考設(shè)計 全面的技術(shù)解讀

    采用i.MX RT1170跨界MCU構(gòu)建的兩輪車儀表盤;全包式參考平臺:實現(xiàn)更快、更輕松的開發(fā)。恩智浦的互聯(lián)數(shù)字儀表盤參考平臺使車輛制造商能夠為兩輪車提供基本的儀表盤功能,同時還支持各種連接用例,提升騎行者體驗。
    的頭像 發(fā)表于 11-03 08:15 ?1624次閱讀
    基于<b class='flag-5'>i.MX</b> <b class='flag-5'>RT</b>1170的兩輪車數(shù)字儀表盤參考設(shè)計 全面的技術(shù)解讀

    基于NXP i.MX RT117H智能人機界面方案

    基于NXP i.MX RT117H智能人機界面方案
    的頭像 發(fā)表于 10-30 18:22 ?535次閱讀
    基于NXP <b class='flag-5'>i.MX</b> <b class='flag-5'>RT</b>117H智能人機界面方案

    i.MX RT中FlexSPI外設(shè)不常用的讀選通采樣時鐘源

    i.MX RT中FlexSPI外設(shè)不常用的讀選通采樣時鐘源
    的頭像 發(fā)表于 10-30 17:44 ?442次閱讀
    <b class='flag-5'>i.MX</b> <b class='flag-5'>RT</b>中FlexSPI外設(shè)不常用的讀選通采樣時鐘源

    理解i.MX RT中FlexSPI外設(shè)lookupTable里配置訪問行列混合尋址Memory的參數(shù)值

    理解i.MX RT中FlexSPI外設(shè)lookupTable里配置訪問行列混合尋址Memory的參數(shù)值
    的頭像 發(fā)表于 10-30 17:23 ?410次閱讀
    理解<b class='flag-5'>i.MX</b> <b class='flag-5'>RT</b>中FlexSPI外設(shè)lookupTable里配置訪問行列混合尋址Memory的參數(shù)值

    淺談i.MX RT10xx系列MCU外接24MHz晶振的作用

    淺談i.MX RT10xx系列MCU外接24MHz晶振的作用
    的頭像 發(fā)表于 10-30 17:22 ?623次閱讀
    淺談<b class='flag-5'>i.MX</b> <b class='flag-5'>RT</b>10xx系列MCU外接24MHz晶振的作用

    i.MX RT1050上如何實現(xiàn)雙大容量存儲(MSC)設(shè)備

    i.MX RT1050上如何實現(xiàn)雙大容量存儲(MSC)設(shè)備
    的頭像 發(fā)表于 10-30 17:08 ?512次閱讀
    在<b class='flag-5'>i.MX</b> <b class='flag-5'>RT</b>1050上如何實現(xiàn)雙大容量<b class='flag-5'>存儲</b>(MSC)設(shè)備

    i.MX RT500/600系列上串行NOR Flash雙程序可交替啟動設(shè)計

    i.MX RT500/600系列上串行NOR Flash雙程序可交替啟動設(shè)計
    的頭像 發(fā)表于 10-27 09:36 ?391次閱讀
    <b class='flag-5'>i.MX</b> <b class='flag-5'>RT</b>500/600系列上串行NOR Flash雙程序可交替啟動設(shè)計

    基于NXP微控制器i.MX RT1170的多人體實時檢測算法和系統(tǒng)

    基于NXP微控制器i.MX RT1170的多人體實時檢測算法和系統(tǒng)
    的頭像 發(fā)表于 10-26 16:27 ?910次閱讀
    基于NXP微控制器<b class='flag-5'>i.MX</b> <b class='flag-5'>RT</b>1170的多人體實時檢測算法和系統(tǒng)

    i.MX RT的FlexRAM配置問題

    i.MX RT的FlexRAM配置問題
    的頭像 發(fā)表于 10-24 15:46 ?597次閱讀
    <b class='flag-5'>i.MX</b> <b class='flag-5'>RT</b>的FlexRAM配置問題

    i.MX RT1010I2C Slave時鐘延展功能小記

    i.MX RT1010I2C Slave時鐘延展功能小記
    的頭像 發(fā)表于 09-27 16:22 ?1292次閱讀
    <b class='flag-5'>i.MX</b> <b class='flag-5'>RT1010</b>的<b class='flag-5'>I</b>2C Slave時鐘延展功能小記

    恩智浦i.MX RT1060/1010上串行NOR Flash冗余程序啟動設(shè)計

    恩智浦i.MX RT1060/1010上串行NOR Flash冗余程序啟動設(shè)計
    的頭像 發(fā)表于 09-26 16:53 ?616次閱讀
    恩智浦<b class='flag-5'>i.MX</b> <b class='flag-5'>RT</b>1060/<b class='flag-5'>1010</b>上串行NOR Flash冗余程序啟動設(shè)計