• <del id="a8uas"></del>
    • 千鋒教育-做有情懷、有良心、有品質(zhì)的職業(yè)教育機(jī)構(gòu)

      400-811-9990
      手機(jī)站
      千鋒教育

      千鋒學(xué)習(xí)站 | 隨時隨地免費學(xué)

      千鋒教育

      掃一掃進(jìn)入千鋒手機(jī)站

      領(lǐng)取全套視頻
      千鋒教育

      關(guān)注千鋒學(xué)習(xí)站小程序
      隨時隨地免費學(xué)習(xí)課程

      上海
      • 北京
      • 鄭州
      • 武漢
      • 成都
      • 西安
      • 沈陽
      • 廣州
      • 南京
      • 深圳
      • 大連
      • 青島
      • 杭州
      • 重慶
      當(dāng)前位置:合肥千鋒IT培訓(xùn)  >  技術(shù)干貨  >  什么是i.MXRT11xx上的串行NOR Flash雙程序可交替啟動?

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

      來源:千鋒教育
      發(fā)布人:xqq
      時間: 2023-10-14 12:33:39

      一、什么是i.MXRT11xx上的串行NOR Flash雙程序可交替啟動

      i.MXRT11xx上的串行NOR Flash雙程序可交替啟動指的是,在i.MXRT11xx芯片中集成了兩個獨立的程序存儲區(qū)域,分別存儲兩份相同的程序代碼。在系統(tǒng)啟動時,可以通過設(shè)置引腳信號或者軟件控制來選擇其中一個程序進(jìn)行啟動,從而實現(xiàn)程序的高可靠性啟動。當(dāng)其中一個程序出現(xiàn)問題時,可以通過切換到另一個程序進(jìn)行啟動,以保證設(shè)備的正常運行。而這些程序代碼存儲在串行NOR Flash中,該存儲器類型具有讀取速度快、可靠性高、使用壽命長等優(yōu)點,非常適合于嵌入式系統(tǒng)的應(yīng)用場景。

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

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

      Note: 當(dāng) image L/H 中均不含有效 version 啟動頭時(img_ver 等于 0xFFFFFFFF,或者高低16bit不符合取反關(guān)系),雙程序可交替啟動特性就不生效,此時等效于冗余程序啟動,image L 永遠(yuǎn)被優(yōu)先啟動。

      typedef struct{uint16_t version; // 版本值uint16_t inversion; // version值的取反(~version)} img_ver_t;

      二、i.MXRT11xx上的串行NOR Flash雙程序可交替啟動與 i.MXRT11xx 系列雙程序啟動的差異

      1、復(fù)啟動的接口外設(shè)不同

      名列前茅點不同其實與本文要討論的 FlexSPI 雙程序啟動特性無關(guān),因為還是在一片掛載在 FlexSPI 上的串行 NOR Flash 里做雙程序設(shè)計,就是下圖中的 image 0 和 image 1,不涉及 Flexcomm SPI 接口 Flash B 里的 image 2(在 i.MXRT1170 上這個外設(shè)是 LPSPI)。

      在介紹 i.MXRT1170 雙程序啟動一文里我們用了 image L/H 來表示 image 0/1,這里還是恢復(fù)使用 image 0/1 來表示,因為后面我們要看的 i.MXRT500/600 參考手冊啟動流程圖里就是用 image 0/1 來表達(dá)的,避免表達(dá)混亂。

      2、可啟動 image 結(jié)構(gòu)不同

      i.MXRT1170 上最簡易可啟動 image 結(jié)構(gòu)比較復(fù)雜(包含 FDCB、img_ver、IVT、BD、App),而 i.MXRTxxx 上就比較簡單了(僅需 FDCB、img_ver、App),但是好在兩者關(guān)于 image version 頭結(jié)構(gòu)定義以及偏移位置是完全一致的(0x600)。

      typedef struct{    uint16_t version;     // 版本值    uint16_t inversion;   // version值的取反(~version)} img_ver_t;

      此外 i.MXRT1170 上名列前茅個 FlexSPI 的 AHB 映射地址是 0x3000_0000,而 i.MXRTxxx 上名列前茅個 FlexSPI 的 AHB 映射地址是 0x0800_0000,這是系統(tǒng)設(shè)計差異,需要注意。

      Note:下圖中示意地址均是 Flash 偏移地址,沒有包含 AHB 映射地址,另外這里假設(shè)第二份 image 偏移地址在 0x400000(具體是由 otp 配置值來決定的)。

      3、使能雙程序啟動的otp配置地址不同

      i.MXRTxxx 上關(guān)于使能雙程序啟動的 otp 配置定義與 i.MXRT1170 上是一致的,只是因為兩者 otp 空間設(shè)計不同,所以具體配置地址不同。i.MXRTxxx 上具體配置在 otp BOOT_CFG2/3 上面:

      //Remap功能的ADDR_START寄存器固定設(shè)為 Flash 起始映射地址。otp 0x188[31:28] - FlexSPI remap size //App的最大長度,標(biāo)識了名列前茅份App的結(jié)束地址,該值加上ADDR_START后被填入Remap功能的ADDR_END寄存器。otp 0x18C[31:22] - Second image offset //標(biāo)識了第二份App的起始地址(在Flash中偏移位置),即填入Remap功能的ADDR_OFFSET寄存器的值。

      這次我們要在 MIMXRT595-EVK 板卡上實測,這個板子 FlexSPI0 上掛了兩片 Flash,默認(rèn)連接的 64MB OctalFlash,還有一片 8MB QuadSPI Flash(需要做板子改動才能使能)。為了跟之前測試保持一致,還是借助 MCUBootUtility 工具將 Second image offset 燒錄為 0x10,F(xiàn)lexSPI remap size 保持默認(rèn) 0,即第二份 image 偏移地址在 Flash 0x400000(4MB)處,最大 image 長度也是 4MB。

      4、暫存狀態(tài)的非易失寄存器有差異

      i.MXRT1170 是用非易失寄存器 SRC_GPR10 其中 2bit 來記錄當(dāng)前啟動狀態(tài)的,而 i.MXRTxxx 上則復(fù)雜得多,它采用了 SYSCTL0 外設(shè)里的一個非易失寄存器的全部 32bit 來暫存啟動狀態(tài)。

      // Load redundant boot options stored in specific register#define LOAD_REDUNDANT_BOOT_OPTIONS() (*(volatile uint32_t *)(SYSCTL0_BASE + 0x384))// Store redundant boot options in specific register before system reset#define SET_REDUNDANT_BOOT_OPTIONS(val) ((*(volatile uint32_t *)(SYSCTL0_BASE + 0x384)) = val)

      這個 32bit 寄存器功能原型如下,它不單純是用做雙程序啟動的狀態(tài)記錄了,還糅合了 ROM API 功能。具體用法可以在芯片參考手冊 ROM API 小節(jié)找到。

      typedef struct _user_app_boot_invoke_option{    union    {        struct        {            uint32_t reserved : 8;            uint32_t boot_image_index : 4;            uint32_t instance : 4;            uint32_t boot_interface : 4;            uint32_t mode : 4;            uint32_t tag : 8;        } B;        uint32_t U;    } option;} user_app_boot_invoke_option_t;

      5、image 版本判斷邏輯不同

      在 i.MXRT1170 上 image version 頭有效的條件一定是其高低16bit符合取反關(guān)系,而 i.MXRTxxx 上除了這個條件外,其認(rèn)定 0xFFFFFFFF 也是一個有效版本(被定為最低版本)。芯片參考手冊里有比較詳細(xì)的 version 判斷邏輯如下,這個邏輯跟 i.MXRT1170 上差異還是比較大的,i.MXRTxxx 上 BootROM 只會啟動包含有效版本號的 image,版本有效性是 image 能被啟動的一個必要條件,不像 i.MXRT1170 上版本信息只是單純用來判斷啟動順序,不作為 image 是否有效的標(biāo)準(zhǔn)。

      延伸閱讀1:i.MXRT11xx是什么

      i.MXRT11xx是恩智浦半導(dǎo)體(現(xiàn)在的NXP Semiconductors)推出的一款高性能、超低功耗的Cortex-M微控制器,采用Arm Cortex-M33內(nèi)核,主頻高達(dá)500 MHz,支持DSP和浮點計算,并提供了豐富的外設(shè)和接口,可廣泛應(yīng)用于工業(yè)自動化、醫(yī)療設(shè)備、智能家居、汽車等領(lǐng)域。該系列微控制器還具備低功耗、安全可靠、易用性等特點,并支持多種存儲介質(zhì)和通信協(xié)議,適應(yīng)不同的應(yīng)用場景需求。

      聲明:本站稿件版權(quán)均屬千鋒教育所有,未經(jīng)許可不得擅自轉(zhuǎn)載。

      猜你喜歡LIKE

      Hbase適合存哪些數(shù)據(jù)?

      2023-10-14

      什么是采購管理?

      2023-10-14

      什么是ai算法?

      2023-10-14

      最新文章NEW

      linux系統(tǒng)中的安全設(shè)置有哪些?

      2023-10-14

      golp是什么設(shè)備?

      2023-10-14

      app的啟動流程都包括哪些步驟?

      2023-10-14

      相關(guān)推薦HOT

      更多>>

      快速通道 更多>>

      最新開班信息 更多>>

      網(wǎng)友熱搜 更多>>