国产精品久久久aaaa,日日干夜夜操天天插,亚洲乱熟女香蕉一区二区三区少妇,99精品国产高清一区二区三区,国产成人精品一区二区色戒,久久久国产精品成人免费,亚洲精品毛片久久久久,99久久婷婷国产综合精品电影,国产一区二区三区任你鲁

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

i.MXRT1170上串行NOR Flash雙程序可交替啟動設計

痞子衡嵌入式 ? 來源:痞子衡嵌入式 ? 作者:痞子衡 ? 2022-04-29 15:23 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群


大家好,我是痞子衡,是正經搞技術的痞子。今天痞子衡給大家介紹的是i.MXRT1170上串行NOR Flash雙程序可交替啟動設計

在上一篇文章 《i.MXRT1060/1010上串行NOR Flash冗余程序啟動設計》 里,痞子衡詳細介紹了 i.MXRT10xx 上的冗余程序啟動設計,本質上這就是個雙備份程序啟動, NOR Flash 里存兩份一樣的 image,物理地址靠前的 image 0 啟動失效就繼續啟動后面的 image 1,多一層保障。

i.MXRT1170 是區別于 i.MXRT10xx 的第二代架構,性能/功能更加強大,其在繼承 i.MXRT10xx 冗余程序啟動的基礎上,新增了雙程序可交替啟動設計,今天我們就來聊聊這個話題:

一、初識雙程序可交替啟動

與 i.MXRT10xx 一樣,這里要聊的還是在一片掛載在 FlexSPI 上的串行 NOR Flash 里做冗余/雙程序設計,就是下圖中的 image L 和 image H,不涉及 LPSPI 接口 Flash B 里的 image 2。

6f018924-c78b-11ec-bce3-dac502259ad0.png

先說跟 i.MXRT10xx 上一樣的冗余程序啟動流程,i.MXRT1170 上電先啟動物理地址靠前的 image L,如果 image L 被破壞了,則繼續啟動 image H。

什么是雙程序可交替啟動呢?簡單說就是物理地址靠前的 image L 并不總是上電首先啟動的 image,在 i.MXRT1170 上新增了如下原型的 image version 啟動頭(在固定偏移 0x600 處),芯片上電 BootROM 會嘗試判斷兩個 image L/H 里的 version 頭版本,高版本的 image 優先被啟動。這種設計方便了 OTA 升級。

  • Note: 當 image L/H 中均不含有效 version 啟動頭時(img_ver 等于 0xFFFFFFFF,或者高低16bit不符合取反關系),雙程序可交替啟動特性就不生效,此時等效于冗余程序啟動,image L 永遠被優先啟動。
typedefstruct
{
uint16_tversion;//版本值
uint16_tinversion;//version值的取反(~version)
}img_ver_t;
6f178b48-c78b-11ec-bce3-dac502259ad0.png

二、回顧冗余程序啟動

在測試雙程序可交替啟動新特性之前,還是先過一下冗余程序啟動。按照文章 《i.MXRT1060/1010上串行NOR Flash冗余程序啟動設計》 第 2 節里一模一樣的方法,在恩智浦官方 MIMXRT1170-EVK 開發板上做測試,這個板子 FlexSPI1 上掛了兩片 Flash,默認連接的 16MB QuadSPI Flash,還有一片 64MB OctalFlash(需要做板子改動才能使能)。

在 i.MXRT1170 fuse 里關于冗余程序啟動的使能位定義與 i.MXRT10xx 上差不多,只不過 fuse 地址從 0x6E0 換到了 0xC80。還是跟之前測試一樣借助 MCUBootUtility 工具將 FLEXSPI_NOR_SEC_IMAGE_OFFSET 燒錄為 0x10,xSPI_FLASH_IMAGE_SIZE 保持默認 0,即第二份 image 偏移地址在 Flash 0x400000(4MB)處,最大 image 長度也是 4MB。

6f2ca0dc-c78b-11ec-bce3-dac502259ad0.png

繼續用 SDK_2.11.0_MIMXRT1170-EVKoardsevkmimxrt1170demo_appsled_blinkycm7iarflexspi_nor_debug 例程生成兩個稍微不一樣的 image,閃燈間隔時間一個是 200ms(image L - iled_blinky_cm7_delay200ms.bin),另一個是 2s(image H - iled_blinky_cm7_delay2s.bin)。在 MCUBootUtility 工具主界面下使用 All-In-One 操作將 image L 下載進 Flash(base address 設為 0x30000400),使用通用編程器界面 Write 操作將 image H 也下載進 Flash(Start 設為 0x400400)。

現在 Flash 里有了兩份 image,當第一份 image 啟動失敗后,i.MXRT1170 BootROM 不是立刻去執行下一份 image ,還是那個取巧的方法,在一個軟復位不置位的寄存器里(SRC_GPR10)標記當前狀態,然后調用 NVIC_SystemReset() 重新進入 BootROM 執行。不過此時標記位從 GPR10[30] 換到了 GPR10[27:26],雖然是 2bit 狀態,但設值 1/2/3 等效于設值 1,因為對于串行 NOR Flash 最多就是兩份 image。這時候如果你想掛 J-Link 改寫 SRC_GPR10 去做快速驗證恐怕無法如愿,因為 《i.MXRT1170上用J-Link連接復位后PC總是停在0x223104》

6f53f858-c78b-11ec-bce3-dac502259ad0.png

所以在 i.MXRT1170 上只能老老實實做破壞 image 完整性的動作來驗證冗余程序啟動,經實測其效果與 i.MXRT10xx 是完全一致的。

三、實測雙程序可交替啟動

現在我們開始實測雙程序可交替啟動,主要的工作量就是為 image L 和 image H 添加 version 啟動頭,并且將它們分別下載進 Flash。因為我們想驗證物理地址靠后的 image H 比 image L 優先啟動(冗余程序啟動做不到這點),所以需要將 image H 的 version 頭版本設高一點。

3.1 為 image 添加 version 啟動頭

還是在 SDK_2.11.0_MIMXRT1170-EVKoardsevkmimxrt1170demo_appsled_blinkycm7iarflexspi_nor_debug 例程基礎上,首先在工程鏈接文件 MIMXRT1176xxxxx_cm7_flexspi_nor.icf 添加如下語句,指定 .img_ver 段的位置。

define symbol m_boot_img_ver_start           = 0x30000600;
place at address mem: m_boot_img_ver_start { section .img_ver };

然后在工程隨便一個源文件里添加如下常量 s_bt_img_l_ver 定義,這個 image 閃燈間隔時間是 200ms(image L - iled_blinky_cm7_delay200ms_ver0.bin),版本是 0x0000(注意編譯鏈接工程時為防止 s_bt_img_l_ver 被優化,可以在工程選項 Linker / Input / Keep symbols 里將其添加進去)。

constimg_ver_ts_bt_img_l_ver@".img_ver"={
.version=0x0000,
.inversion=~0x0000,
};

同樣的工程,再生成另一個閃燈間隔時間為 2s(image H - iled_blinky_cm7_delay2s_ver1.bin) 的 image 時使用如下常量 s_bt_img_h_ver 定義,版本是 0x0001。

constimg_ver_ts_bt_img_h_ver@".img_ver"={
.version=0x0001,
.inversion=~0x0001,
};

當然如果你嫌上述方法繁瑣,也可以直接在最終 image binary 文件上做修改(注意 offset 位置一定要找對,i.MXRT1170 SDK XIP binary 文件起始數據對應 Flash 偏移是 0x400,因此文件中 0x200 處才對應 Flash 偏移 0x600):

6f7b7a86-c78b-11ec-bce3-dac502259ad0.png

3.2 下載含 version 頭的 image 進 Flash

現在需要借助 MCUBootUtility 工具的通用編程器功能分別將兩個含 version 頭的 image L/H 下載進 Flash。這里需要注意的是此時 image L 無法再通過主界面 All-In-One 操作來下載了,因為工具 v3.4 版本及以下沒有對 version 啟動頭做識別處理,因此會丟掉 version 頭數據(這個考慮會在 v4.0 之后加入支持)。

6f9d9814-c78b-11ec-bce3-dac502259ad0.png6fc14cd2-c78b-11ec-bce3-dac502259ad0.png

兩個 image 下載完成,一切工作就結束了,這時候你調整芯片啟動模式到 2'b10 - Flash boot,給板卡重新上電,應該可以看到 image H 正在執行。

3.3 BootROM中判斷version的邏輯

BootROM 中關于 version 啟動頭是否有效以及版本高低判斷邏輯其實是有一點復雜的,這里把具體代碼分享給大家,方便大家為 image 設置有效的 version 頭以及正確使能這個雙程序可交替啟動特性。

判斷邏輯代碼主要意思是僅當 image L 的版本不是 0xFFFFFFFF 且 image H 的版本是有效的(img_ver 高低16bit符合取反關系)情況下,如果 image L 版本無效或者 image L 版本有效但比 image H 版本低,則物理地址靠后的 image H 優先啟動。除此以外其余情況,一律是物理地址靠前的 image L 優先啟動。

uint32_timage_l_base=FlexSPIx_AMBA_BASE
uint32_timage_h_base=FlexSPIx_AMBA_BASE+FLEXSPI_NOR_SEC_IMAGE_OFFSET

uint32_tget_image_index(void)
{
uint32_tredundant_boot=((SRC->GPR[9]&0x0C000000)>>26);

staticuint32_timage_index[]={0,0};
img_ver_timage_l_version=*(img_ver_t*)(image_l_base+0x600);
img_ver_timage_h_version=*(img_ver_t*)(image_h_base+0x600);
if((image_l_version.version!=0xFFFFu||image_l_version.inversion!=0xFFFFu)&&
((0xFFFFu&image_h_version.version)==(0xFFFFu^image_h_version.inversion))&&
((0xFFFFu&image_l_version.version)!=(0xFFFFu^image_l_version.inversion)||(image_l_version.version0]=1;
}
else
{
image_index[1]=1;
}

returnimage_index[redundant_boot];
}

痞子衡在 MIMXRT1170-EVK 開發板上對image 版本設置情況也做了比較全面的實測,測試結果如下:

image L 版本值 image H 版本值 啟動結果
0xFFFFFFFF 任意值
(實測了0xFFFFFFFF, 0xFFFFAA55, 0xFFFF0000)
先啟動 image L
失敗再啟動 image H
任意值
(實測了0xFFFFAA55, 0xFFFF0000)
0xFFFFAA55
(或其他無效版本值包括全0xFFs)
先啟動 image L
失敗再啟動 image H
0xFFFFAA55
(或其他非全0xFFs無效版本值)
0xFFFF0000
(或其他任意有效版本值)
先啟動 image H
失敗再啟動 image L
0xFFFF0000 0xFFFE0001
(或其他高于0x0的有效版本值)
先啟動 image H
失敗再啟動 image L
0xFFFE0001 0xFFFE0001或0xFFFF0000 先啟動 image L
失敗再啟動 image H

四、一些關于 image 的注意事項

  • Note1: 雖然文中所有的測試均是針對 XIP image,但這個冗余程序/雙程序可交替啟動特性對于 Non-XIP image 也同樣適用。
  • Note2: 如果是 XIP image,其鏈接地址不一定要固定在偏移 0x2000 處,因為 IVT 的存在,其是可以鏈接在偏移 0x2000 之后的任意位置的。
  • Note3: 如果是 Non-XIP image,在 SDK 包里無法直接生成含啟動頭的 Non-XIP image binary,這時候可以先使用 MCUBootUtility 主界面的 All-In-One 操作下載一次 image,再通過通用編程器界面 Read 操作讀回來便是含啟動頭的 Non-XIP image binary。

至此,i.MXRT1170上串行NOR Flash雙程序可交替啟動設計痞子衡便介紹完畢了,掌聲在哪里~~~

審核編輯 :李倩


聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 程序
    +關注

    關注

    117

    文章

    3846

    瀏覽量

    85225
  • OTA
    OTA
    +關注

    關注

    7

    文章

    628

    瀏覽量

    38285
  • NOR flash
    +關注

    關注

    2

    文章

    104

    瀏覽量

    23891

原文標題:什么是i.MXRT11xx上的串行NOR Flash雙程序可交替啟動?

文章出處:【微信號:pzh_mcu,微信公眾號:痞子衡嵌入式】歡迎添加關注!文章轉載請注明出處。

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

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    SD NAND 為何不能存啟動代碼,SPI NAND 與 NOR Flash 卻可以 —— 接口、傳輸、啟動機制全對比

    在嵌入式、物聯網、工控、車載等硬件系統中, 啟動存儲器(Boot Flash) ?是決定設備能否電即跑、穩定可靠的核心器件。實際選型中,SD NAND、SPI NAND、NOR
    的頭像 發表于 02-09 11:16 ?187次閱讀
    SD NAND 為何不能存<b class='flag-5'>啟動</b>代碼,SPI NAND 與 <b class='flag-5'>NOR</b> <b class='flag-5'>Flash</b> 卻可以 —— 接口、傳輸、<b class='flag-5'>啟動</b>機制全對比

    NOR Flash GT25D20E-U串行NOR閃存

    隨著5G網絡、物聯網及數據中心建設的加速推進,通信設備對數據存儲的可靠性、響應速度及功耗提出了更高要求。NOR Flash憑借其快速讀取、高可靠性及支持就地執行(XIP)等特性,已成為通信模塊
    的頭像 發表于 02-02 16:52 ?407次閱讀

    SPI NOR Flash和SPI NAND Flash存儲芯片的區別

    SPI NOR Flash與SPI NAND Flash并非相互替代,而是互補關系。SPI NOR勝在讀取速度快、使用簡單、可靠性高,是代碼存儲的理想選擇。SPI NAND則以其大容量
    的頭像 發表于 01-29 16:58 ?454次閱讀
    SPI <b class='flag-5'>NOR</b> <b class='flag-5'>Flash</b>和SPI NAND <b class='flag-5'>Flash</b>存儲芯片的區別

    國產SPI NOR Flash接口閃存介紹

    在當今各類電子設備對存儲性能要求日益提升的背景下,SPI NOR Flash憑借其高速讀取、低功耗及靈活接口等優勢,成為嵌入式系統代碼存儲的關鍵元件。GT25Q系列SPI NOR Flash
    的頭像 發表于 12-26 11:51 ?443次閱讀

    Infineon SEMPER NOR Flash與HYPERRAM? 2.0 Gen2 Flash+RAM MCP產品解析

    啟動代碼,用RAM進行暫存擴展內存。英飛凌(Infineon)推出的Flash+RAM多芯片封裝(MCP)Gen 2產品,將SEMPER? NOR Flash和HYPERRAM? 2.
    的頭像 發表于 12-20 16:20 ?1199次閱讀

    高性能SPI NOR FLASH芯片ZB25VQ系列推薦

    在嵌入式系統、物聯網設備及各類存儲應用中,SPI NOR FLASH芯片因其接口簡單、功耗低、讀寫速度快等特點,成為代碼存儲與數據緩存的常見選擇。SPI NOR FLASH是一種基于S
    的頭像 發表于 12-01 14:52 ?622次閱讀

    華邦高性能NOR Flash用于學習平板

    華邦電子(Winbond)的NOR Flash以其卓越性能成為學習平板理想的存儲解決方案。其芯片內執行(XIP)特性實現系統秒級快速啟動,高可靠性確保固件和核心代碼安全,低功耗特性則
    的頭像 發表于 11-10 09:48 ?515次閱讀
    華邦高性能<b class='flag-5'>NOR</b> <b class='flag-5'>Flash</b>用于學習平板

    恩智浦i.MXRT1180的FlexSPI NOR啟動連接方式

    最近屬于i.MXRT11xx陣營的第二代旗艦i.MXRT1180正式發布了,今天咱們就來介紹它的FlexSPI NOR啟動連接方式,在閱讀本文前最好把FlexSPI
    的頭像 發表于 11-08 10:20 ?6428次閱讀
    恩智浦<b class='flag-5'>i.MXRT</b>1180的FlexSPI <b class='flag-5'>NOR</b><b class='flag-5'>啟動</b>連接方式

    博雅NOR FLASH XIP技術實現電力儀表毫秒級快速啟動?

    博雅128Mbit NOR Flash BY25Q128ESSIG為智能電力儀表提供高可靠存儲方案,133MHz讀取速度與-40℃~105℃寬溫保障數據實時性與穩定性。
    的頭像 發表于 09-08 09:55 ?980次閱讀
    博雅<b class='flag-5'>NOR</b> <b class='flag-5'>FLASH</b> XIP技術實現電力儀表毫秒級快速<b class='flag-5'>啟動</b>?

    SPI NOR FLASH是什么,與SPI NAND Flash的區別

    SPI NOR FLASH是什么? ? SPI NOR FLASH是一種非易失性存儲器,它通過串行接口進行數據傳輸,具有讀寫速度快、可靠性高
    的頭像 發表于 08-21 09:26 ?1573次閱讀

    Nor flash芯片低溫無法啟動

    關于針對NOR Flash芯片在低溫環境下無法啟動的問題,詳細分析與解決方案如下所述: 1. 低溫失效原因分析 1.1 半導體物理特性變化 閾值電壓(Vth)漂移:低溫下MOSFET閾值電壓升高(約
    的頭像 發表于 06-30 17:23 ?969次閱讀
    <b class='flag-5'>Nor</b> <b class='flag-5'>flash</b>芯片低溫無法<b class='flag-5'>啟動</b>

    多個i.MXRT共享一顆Flash啟動的方法與實踐(下)

    在 《多個i.MXRT共享一顆Flash啟動的方法與實踐()》 一文里痞子衡給大家從理論介紹一種多
    的頭像 發表于 06-05 10:04 ?1175次閱讀
    多個<b class='flag-5'>i.MXRT</b>共享一顆<b class='flag-5'>Flash</b><b class='flag-5'>啟動</b>的方法與實踐(下)

    多個i.MXRT共享一顆Flash啟動的方法與實踐()

    有些客戶應用會采用多顆 i.MXRT 芯片設計一主多從的硬件架構(目的不一,或仿多核 MCU 系統、或拓展 GPIO 數量),因為 i.MXRT 片內無非易失性存儲器,這時候為整個系統配置合適的啟動設備保證每個
    的頭像 發表于 06-05 10:01 ?1149次閱讀
    多個<b class='flag-5'>i.MXRT</b>共享一顆<b class='flag-5'>Flash</b><b class='flag-5'>啟動</b>的方法與實踐(<b class='flag-5'>上</b>)

    MCU片Flash

    ? ? MCU片Flash是微控制器內部集成的非易失性存儲器,主要用于存儲程序代碼、常量數據及系統配置信息。其核心特性與功能如下: 一、定義與類型? 片
    的頭像 發表于 05-06 14:26 ?1250次閱讀

    為什么無法在MIMXRT1170-EVK上調試XIP NOR閃存?

    Winbond NOR 閃存 (W25Q256JVEIQ) 安裝在 RT1170 定制板。 但是,在此狀態下,使用 MCU Expresso IDE 24.9.25 進行調試在寫入過程中失敗
    發表于 04-14 07:32