99精品伊人亚洲|最近国产中文炮友|九草在线视频支援|AV网站大全最新|美女黄片免费观看|国产精品资源视频|精彩无码视频一区|91大神在线后入|伊人终合在线播放|久草综合久久中文

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

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

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

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

jf_pJlTbmA9 ? 來(lái)源:恩智浦MCU加油站 ? 作者:智浦MCU加油站 ? 2023-09-26 16:53 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

工業(yè)產(chǎn)品設(shè)計(jì)里經(jīng)常會(huì)有冗余程序/備份程序設(shè)計(jì)的需求,因?yàn)樵诠I(yè)環(huán)境里要求設(shè)備能夠持續(xù)穩(wěn)定運(yùn)行,不能輕易宕機(jī),但現(xiàn)實(shí)環(huán)境中常常有各種意外發(fā)生,其中一個(gè)常見(jiàn)的意外就是設(shè)備主控MCU程序被破壞。

為了降低程序損壞這種意外帶來(lái)的影響,一個(gè)很典型的做法就是增加MCU程序的份數(shù),第一份被破壞,就啟動(dòng)第二份...,用程序數(shù)量的增加來(lái)降低啟動(dòng)失敗率,這屬于概率學(xué)手段范疇。

我們知道恩智浦i.MX RT系列MCU內(nèi)部沒(méi)有非易失性存儲(chǔ)器,它需要搭配外部存儲(chǔ)器來(lái)工作,可選存儲(chǔ)器類型非常多:NOR Flash, NAND Flash, eMMC, SD卡都行。

其中對(duì)于NAND型存儲(chǔ)器,冗余程序設(shè)計(jì)是必備的,因?yàn)镹AND本身允許壞塊現(xiàn)象存在,所以不得不做冗余設(shè)計(jì)。而對(duì)于NOR型存儲(chǔ)器,冗余設(shè)計(jì)則不是必需的,偏偏串行NOR Flash是i.MX RT最常用的搭檔,那該怎么辦?別急,今天痞子衡介紹的就是i.MX RT1010/1060上串行NOR Flash冗余程序設(shè)計(jì),恩智浦已經(jīng)都給你考慮到了。

注:本文所涉及的串行NOR Flash冗余程序設(shè)計(jì),不支持早期的i.MX RT1050/1020/1015型號(hào)。

一、初識(shí)冗余程序啟動(dòng)

在i.MX RT上可以掛載串行NOR Flash去啟動(dòng)程序的外設(shè)有兩個(gè),分別是FlexSPI和 LPSPI,如下圖所示。

wKgaomUD7fuAHcAFAAFpyzzitWk008.png

注:并不是所有 i.MXRT 型號(hào)都支持 LPSPI 外設(shè)掛載存儲(chǔ)器去啟動(dòng)。

其中連接在FlexSPI 上的 Flash A 屬于主啟動(dòng)設(shè)備,連接在LPSPI上的Flash B屬于備份啟動(dòng)設(shè)備(關(guān)于備份設(shè)備啟動(dòng)詳見(jiàn)痞子衡舊文《從Serial(1-bit SPI) EEPROM/NOR恢復(fù)啟動(dòng)》)。

用兩片NOR Flash去完成冗余程序設(shè)計(jì)當(dāng)然是沒(méi)問(wèn)題,但也相應(yīng)增加了硬件成本,而本文今天要討論得不是這種冗余程序設(shè)計(jì),我們要聊的是在一片掛載在FlexSPI上的串行 NOR Flash里做冗余程序設(shè)計(jì),就是圖中的image 0和image 1。

冗余程序啟動(dòng)流程其實(shí)特別簡(jiǎn)單,上電永遠(yuǎn)先啟動(dòng)物理地址靠前的image 0,如果 image 0被破壞了,則啟動(dòng)image 1。原則上image 0和image 1應(yīng)該是完全一樣的(鏈接地址也一樣,并且中途不需要搬移這兩份image數(shù)據(jù),這個(gè)是靠芯片里的一個(gè)黑科技做到的,下文會(huì)細(xì)講),畢竟是冗余設(shè)計(jì),不過(guò)你要執(zhí)意放兩份不完全一樣的image,倒也沒(méi)問(wèn)題。

二、實(shí)測(cè)冗余程序啟動(dòng)

我們知道i.MX RT芯片上電總是先運(yùn)行廠商固化好的BootROM,所以冗余程序啟動(dòng)設(shè)計(jì)是做在BootROM代碼里的。之前有一篇舊文《了解i.MXRT1060系列ROM中串行NOR Flash啟動(dòng)初始化流程優(yōu)化點(diǎn)》中2.1 節(jié)其實(shí)已經(jīng)簡(jiǎn)單地提到了冗余程序設(shè)計(jì),其主要借助了芯片系統(tǒng)FlexSPI地址重映射(Remap)功能,這個(gè)功能是在恩智浦后期推出的 i.MX RT1060/1010 等型號(hào)上才有的,這也是上文所說(shuō)的黑科技。關(guān)于這個(gè)黑科技,痞子衡也有舊文《利用i.MXRT1060,1010上新增的FlexSPI地址重映射(Remap)功能可安全OTA》。

有了FlexSPI Remap黑科技存在,我們就可以將同一份image binary放在Flash中兩個(gè)不同位置,并且不用做擦除編程操作來(lái)交換其位置,就可以實(shí)現(xiàn)各自的啟動(dòng)執(zhí)行。如果沒(méi)有這個(gè)黑科技,我們只能老老實(shí)實(shí)做數(shù)據(jù)搬移,這會(huì)增加擦除次數(shù)從而影響Flash使用壽命。

原理搞清楚了,現(xiàn)在我們?cè)诎遄由蠈?shí)測(cè)一下這個(gè)功能,看看如何正確地放兩份image進(jìn)Flash,哪些情況會(huì)導(dǎo)致image 0啟動(dòng)失敗從而去啟動(dòng)image 1。

我們就以恩智浦官方MIMXRT1060-EVK開(kāi)發(fā)板為例,這個(gè)板子FlexSPI1上掛了兩片 Flash,默認(rèn)連接的8MB QuadSPI Flash,還有一片64MB HyperFlash(需要做板子改動(dòng)才能使能):

2.1 使能冗余程序啟動(dòng)

使能冗余程序啟動(dòng)特性很簡(jiǎn)單,就是將fuse 0x6E0[23:16] - FLEXSPI_NOR_SEC_IMAGE_OFFSET燒錄為非0值即可,根據(jù)下面定義,第二份image 偏移地址最大可以設(shè)到Flash中0x3FC0000(63.75MB)處:

Remap功能的ADDR_START寄存器固定設(shè)為Flash 起始映射地址。

fuse 0x6e0[15:13] - xSPI_FLASH_IMAGE_SIZE,App的最大長(zhǎng)度,標(biāo)識(shí)了第一份App的結(jié)束地址,該值加上ADDR_START后被填入Remap功能的ADDR_END寄存器。

fuse 0x6e0[23:16] - FLEXSPI_NOR_SEC_IMAGE_OFFSET,標(biāo)識(shí)了第二份App的起始地址(在Flash中偏移位置),即填入Remap功能的ADDR_OFFSET寄存器的值。

wKgaomUD7fyAYHTMAAFmoM6G6Dk228.png

本次測(cè)試,我們就將FLEXSPI_NOR_SEC_IMAGE_OFFSET燒錄為0x10,xSPI_FLASH_IMAGE_SIZE保持默認(rèn)0,即第二份image 偏移地址在Flash 0x400000(4MB)處,最大image長(zhǎng)度也是4MB,可借助MCUBootUtility工具完成Fuse燒錄:

wKgZomUD7f6Aazu6AARHazrdZC0282.png

2.2 下載兩份無(wú)簽名image進(jìn)Flash

現(xiàn)在開(kāi)始準(zhǔn)備image,我們就直接用SDK_2.10.1_EVK-MIMXRT1060boardsevkmimxrt1060demo_appsled_blinky例程,簡(jiǎn)單直觀。為了便于肉眼分辨效果,我們生成兩個(gè)稍微不一樣的image,閃燈間隔時(shí)間一個(gè)是200ms(image 0 - iled_blinky_delay200ms.bin),另一個(gè)是2s(image 1 - iled_blinky_delay2s.bin):

wKgaomUD7gCAclEeAAH5Sxfsovk532.png

然后還是借助MCUBootUtility工具,先使用All-In-One操作將image 0下載進(jìn)Flash,因?yàn)槭莃in文件,所以我們要填入正確的鏈接起始地址(對(duì)于i.MX RT1060就是 0x60000000;對(duì)于i.MX RT1010應(yīng)該是0x60000400,具體查看工程鏈接文件便知)。

此外我們使用的是完整的可啟動(dòng)鏡像文件(包含了全部所需啟動(dòng)頭),也可以直接在軟件通用編程器界面做下載。

wKgaomUD7gCAclEeAAH5Sxfsovk532.png

image0下載進(jìn)Flash后,繼續(xù)下載image 1,這時(shí)候只能在軟件通用編程器界面操作。這里主要是設(shè)置好下載起始地址,前面我們使能冗余程序啟動(dòng)時(shí)在Fuse里設(shè)置的偏移地址是0x400000,那么此時(shí)下載起始地址就應(yīng)該是0x400000(對(duì)于i.MX RT1060是0x400000;對(duì)于i.MX RT1010應(yīng)該是0x400400)。至此兩份image下載就完成了。

wKgZomUD7gSACWx8AAUDdO3E_aI175.png

2.3 快速驗(yàn)證兩份image正確性

現(xiàn)在Flash里有了兩份image,我們來(lái)做一個(gè)快速驗(yàn)證,看看image是不是放得符合冗余程序啟動(dòng)的要求。對(duì)于image 0,沒(méi)什么好說(shuō)的,芯片啟動(dòng)模式設(shè)為2'b10 后斷電復(fù)位應(yīng)該可以看到image 0在執(zhí)行,最重要的是驗(yàn)證image 1是不是合法。

這里開(kāi)始涉及到芯片冗余程序啟動(dòng)流程核心了,當(dāng)image 0啟動(dòng)失敗后,芯片BootROM不是立刻去執(zhí)行image 1的,它用了一個(gè)取巧的方式,在一個(gè)軟復(fù)位不置位的寄存器里(SRC_GPR10)標(biāo)記了當(dāng)前狀態(tài),然后調(diào)用NVIC_SystemReset()重新進(jìn)入BootROM執(zhí)行,第二次BootROM執(zhí)行時(shí)才會(huì)去啟動(dòng)image 1。

wKgaomUD7gWAdlExAAFN_Wmv_Zo690.png

所以這也給了我們快速驗(yàn)證image 1執(zhí)行的可能性,我們?cè)诎遄由蠏焐螶-Link仿真器,然后打開(kāi)J-Link Commander,直接將SRC_GPR10寄存器改寫為0x40000000,再依次執(zhí)行reset和go命令,這時(shí)你應(yīng)該可以看到image 1正在執(zhí)行了。

wKgZomUD7giAZzBPAANwAzZZi_c277.png

2.4 測(cè)試無(wú)簽名 image 0 損壞條件

痞子衡之前在《i.MXRT Bootable image格式》一文里介紹過(guò)一個(gè)可啟動(dòng)image包含哪些組成部分,其中最簡(jiǎn)單的無(wú)簽名image應(yīng)該至少包含F(xiàn)DCB, IVT, BD, App四部分,芯片BootROM也是按序讀取這四部分?jǐn)?shù)據(jù)完成程序啟動(dòng)的。

wKgaomUD7gqAasn2AAGKnLUEaho947.png

現(xiàn)在我們嘗試分別破壞這幾個(gè)組成部分來(lái)看看何種程度的image 0損壞能被BootROM識(shí)別出從而去啟動(dòng)image 1,下面是測(cè)試結(jié)果。從測(cè)試結(jié)果來(lái)看,除了Image 0 - App的損壞無(wú)法檢測(cè)外,image 0其余啟動(dòng)頭的損壞都可以被BootROM識(shí)別到。

wKgaomUD7g6AbLNdAAGhNvNfo9Q957.png

2.5 能檢測(cè)image 0 app損壞的方法

如果不能檢測(cè)image app部分的損壞,那這個(gè)冗余程序啟動(dòng)功能就比較雞肋了,畢竟app部分的數(shù)據(jù)才是整個(gè)image核心所在。如果要加上app損壞檢測(cè),需要使能i.MX RT 簽名啟動(dòng),還是可以借助MCUBootUtility工具完成全部流程,下載兩份含簽名的image進(jìn)Flash的過(guò)程跟2.2節(jié)基本差不多,只是Secure Boot Type里需要選擇 "HAB Signed Image Boot",含簽名的image 0下載沒(méi)什么好說(shuō)的,All-In-One操作全搞定,含簽名的image 1數(shù)據(jù)可以通過(guò)在通用編程器界面里將含簽名的image 0數(shù)據(jù)全部讀回得到,這個(gè)具體操作就不詳細(xì)展開(kāi)了。

含簽名image 0相比無(wú)簽名image 0多了HABdata(csf,cert,signature) 數(shù)據(jù)段,BootROM在跳轉(zhuǎn)image之前會(huì)根據(jù)HAB data數(shù)據(jù)對(duì)image進(jìn)行驗(yàn)簽,驗(yàn)簽通過(guò)才做跳轉(zhuǎn)。

wKgZomUD7hCAersGAAHP-UK2b_c717.png

此時(shí)再做一次破壞實(shí)驗(yàn),結(jié)果如下,顯然加了簽名的image 0其完整性就有保證了,這時(shí)的冗余程序啟動(dòng)設(shè)計(jì)才能發(fā)揮出最大效果。

wKgZomUD7hGAECinAAGjpcvxxMY204.png

來(lái)源:恩智浦MCU加油站(作者: 痞子衡)

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

    關(guān)注

    146

    文章

    17984

    瀏覽量

    367217
  • FlaSh
    +關(guān)注

    關(guān)注

    10

    文章

    1679

    瀏覽量

    151882
  • 存儲(chǔ)器
    +關(guān)注

    關(guān)注

    38

    文章

    7653

    瀏覽量

    167460
  • 恩智浦
    +關(guān)注

    關(guān)注

    14

    文章

    5981

    瀏覽量

    116972
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    i.MX RT500/600應(yīng)用案例 串行NOR Flash程序可交替啟動(dòng)設(shè)計(jì)

    i.MX RTxxx 系列上(RT500/600)也有雙程序可交替啟動(dòng)特性,其主體設(shè)計(jì)邏輯基本i.M
    的頭像 發(fā)表于 05-05 14:24 ?3109次閱讀
    <b class='flag-5'>i.MX</b> <b class='flag-5'>RT</b>500/600應(yīng)用案例 <b class='flag-5'>串行</b><b class='flag-5'>NOR</b> <b class='flag-5'>Flash</b>雙<b class='flag-5'>程序</b>可交替<b class='flag-5'>啟動(dòng)</b>設(shè)計(jì)

    i.MX RTxxx系列MCU的特性

      大家好,我是痞子衡,是正經(jīng)搞技術(shù)的痞子。今天痞子衡給大家介紹的是i.MX RTxxx系列MCU的基本特性。  半導(dǎo)體于201
    發(fā)表于 11-04 07:08

    FlexSPI NOR啟動(dòng)的連接方式

      大家好,我是痞子衡,是正經(jīng)搞技術(shù)的痞子。今天痞子衡給大家介紹的是i.MX RT500的FlexSPI NOR
    發(fā)表于 02-09 07:56

    介紹的是i.MX RT1xxx系列MCU的Parallel NOR啟動(dòng)

      大家好,我是痞子衡,是正經(jīng)搞技術(shù)的痞子。今天痞子衡給大家介紹的是i.MX RT1xxx系列MCU的Parallel NOR
    發(fā)表于 02-22 06:31

    i.MX RT1060i.MX RT1064的遷移手冊(cè)

    i.MX RT1060i.MX RT1064的遷移指南
    發(fā)表于 12-12 07:21

    i.MX RT1060跨界處理器產(chǎn)品數(shù)據(jù)手冊(cè)

    i.MX RT1060跨界處理器(消費(fèi)級(jí))數(shù)據(jù)手冊(cè)
    發(fā)表于 12-12 08:08

    i.MX RT1060功耗和測(cè)量資料分享

    i.MX RT1060的功耗和測(cè)量
    發(fā)表于 12-12 08:08

    i.MX RT1060產(chǎn)品使用壽命的估計(jì)方法

    i.MX RT1060產(chǎn)品使用壽命估計(jì)
    發(fā)表于 12-12 07:16

    i.MX RT1060的加強(qiáng)功能介紹

    i.MX RT1060的加強(qiáng)功能
    發(fā)表于 12-12 06:10

    i.MX RT開(kāi)發(fā)筆記-08 | i.MX RT1062嵌套中斷向量控制器NVIC(按鍵中斷檢測(cè))

    RT開(kāi)發(fā)筆記-03 | i.MX RT1062地址空間映射i.MX RT開(kāi)發(fā)筆記-04 | i.MX
    發(fā)表于 12-01 13:51 ?2次下載
    <b class='flag-5'>i.MX</b> <b class='flag-5'>RT</b>開(kāi)發(fā)筆記-08 | <b class='flag-5'>i.MX</b> <b class='flag-5'>RT</b>1062嵌套中斷向量控制器NVIC(按鍵中斷檢測(cè))

    痞子衡嵌入式:i.MX RTxxx系列MCU啟動(dòng)那些事(6.B)- FlexSPI NOR連接方式大全(RT500)...

      大家好,我是痞子衡,是正經(jīng)搞技術(shù)的痞子。今天痞子衡給大家介紹的是i.MX RT500的FlexSPI NOR
    發(fā)表于 12-05 18:06 ?8次下載
    痞子衡嵌入式:<b class='flag-5'>恩</b>智<b class='flag-5'>浦</b><b class='flag-5'>i.MX</b> RTxxx系列MCU<b class='flag-5'>啟動(dòng)</b>那些事(6.B)- FlexSPI <b class='flag-5'>NOR</b>連接方式大全(<b class='flag-5'>RT</b>500)...

    RT-Thread & NXP 發(fā)布 i.MX RT 系列 BSP 新框架

    前言i.MX RT 是 NXP 推出的跨界處理器系列。該系列下又包括 i.MX RT1020、i.MX
    發(fā)表于 12-07 13:06 ?2次下載
    <b class='flag-5'>RT</b>-Thread & NXP 發(fā)布 <b class='flag-5'>i.MX</b> <b class='flag-5'>RT</b> 系列 BSP 新框架

    i.MX RT1170串行NOR Flash程序可交替啟動(dòng)設(shè)計(jì)

    i.MX RT10xx一樣,這里要聊的還是在一片掛載在FlexSPI串行NOR Flash
    的頭像 發(fā)表于 04-28 09:55 ?1533次閱讀

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

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

    i.MX RT1170 uSDHC eMMC啟動(dòng)時(shí)間

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