91欧美超碰AV自拍|国产成年人性爱视频免费看|亚洲 日韩 欧美一厂二区入|人人看人人爽人人操aV|丝袜美腿视频一区二区在线看|人人操人人爽人人爱|婷婷五月天超碰|97色色欧美亚州A√|另类A√无码精品一级av|欧美特级日韩特级

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 RT1170上串行NOR Flash雙程序可交替啟動(dòng)設(shè)計(jì)

恩智浦MCU加油站 ? 來源:恩智浦MCU加油站 ? 作者:恩智浦MCU加油站 ? 2022-04-28 09:55 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

在前一篇文章 《i.MX RT1060/1010上串行NOR Flash冗余程序啟動(dòng)設(shè)計(jì)》里,我詳細(xì)介紹了i.MX RT10xx上的冗余程序啟動(dòng)設(shè)計(jì),本質(zhì)上這就是個(gè)雙備份程序啟動(dòng), NORFlash里存兩份一樣的image,物理地址靠前的image 0啟動(dòng)失效就繼續(xù)啟動(dòng)后面的image 1,多一層保障。

i.MX RT1170是區(qū)別于i.MX RT10xx的第二代架構(gòu),性能/功能更加強(qiáng)大,其在繼承 i.MX RT10xx冗余程序啟動(dòng)的基礎(chǔ)上,新增了雙程序可交替啟動(dòng)設(shè)計(jì),今天我們就來聊聊這個(gè)話題:

一、初識(shí)雙程序可交替啟動(dòng)

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

ff746c68-c689-11ec-bce3-dac502259ad0.png

先說跟i.MX RT10xx上一樣的冗余程序啟動(dòng)流程,i.MX RT1170上電先啟動(dòng)物理地址靠前的image L,如果image L被破壞了,則繼續(xù)啟動(dòng)image H。

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

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

typedefstruct
{
uint16_tversion;//版本值
uint16_tinversion;//version值的取反(~version)
}img_ver_t;

ff93e25a-c689-11ec-bce3-dac502259ad0.png

二、回顧冗余程序啟動(dòng)

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

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

ffb71b1c-c689-11ec-bce3-dac502259ad0.png

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

現(xiàn)在Flash 里有了兩份 image,當(dāng)?shù)谝环?image 啟動(dòng)失敗后,i.MX RT1170 BootROM 不是立刻去執(zhí)行下一份 image ,還是那個(gè)取巧的方法,在一個(gè)軟復(fù)位不置位的寄存器里(SRC_GPR10)標(biāo)記當(dāng)前狀態(tài),然后調(diào)用 NVIC_SystemReset() 重新進(jìn)入 BootROM 執(zhí)行。不過此時(shí)標(biāo)記位從 GPR10[30] 換到了 GPR10[27:26],雖然是 2bit 狀態(tài),但設(shè)值 1/2/3 等效于設(shè)值 1,因?yàn)閷?duì)于串行 NOR Flash 最多就是兩份 image。這時(shí)候如果你想掛 J-Link 改寫 SRC_GPR10 去做快速驗(yàn)證恐怕無法如愿,原因請看《i.MX RT1170上用J-Link連接復(fù)位后PC總是停在0x223104》。

ffd3fb10-c689-11ec-bce3-dac502259ad0.png

所以在i.MX RT1170上只能老老實(shí)實(shí)做破壞 image 完整性的動(dòng)作來驗(yàn)證冗余程序啟動(dòng),經(jīng)實(shí)測其效果與i.MX RT10xx 是完全一致的。

三、實(shí)測雙程序可交替啟動(dòng)

現(xiàn)在我們開始實(shí)測雙程序可交替啟動(dòng),主要的工作量就是為 image L 和 image H 添加 version 啟動(dòng)頭,并且將它們分別下載進(jìn) Flash。因?yàn)槲覀兿腧?yàn)證物理地址靠后的 image H 比 image L 優(yōu)先啟動(dòng)(冗余程序啟動(dòng)做不到這點(diǎn)),所以需要將 image H 的 version 頭版本設(shè)高一點(diǎn)。

3.1 為 image 添加version 啟動(dòng)頭

還是在SDK_2.11.0_MIMXRT1170-EVKoardsevkmimxrt1170demo_appsled_blinkycm7iarflexspi_nor_debug例程基礎(chǔ)上,首先在工程鏈接文件 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 };

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

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

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

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

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

0005e3f0-c68a-11ec-bce3-dac502259ad0.png

3.2 下載含 version 頭的image 進(jìn) Flash

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

0031caba-c68a-11ec-bce3-dac502259ad0.png

005fa5de-c68a-11ec-bce3-dac502259ad0.png

兩個(gè) image下載完成,一切工作就結(jié)束了,這時(shí)候你調(diào)整芯片啟動(dòng)模式到 2'b10 - Flash boot,給板卡重新上電,應(yīng)該可以看到 image H 正在執(zhí)行。

3.3 BootROM中判斷version的邏輯

BootROM中關(guān)于 version 啟動(dòng)頭是否有效以及版本高低判斷邏輯其實(shí)是有一點(diǎn)復(fù)雜的,這里把具體代碼分享給大家,方便大家為 image 設(shè)置有效的 version 頭以及正確使能這個(gè)雙程序可交替啟動(dòng)特性。

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

uint32_t image_l_base = FlexSPIx_AMBA_BASE
uint32_t image_h_base = FlexSPIx_AMBA_BASE + FLEXSPI_NOR_SEC_IMAGE_OFFSET

uint32_t get_image_index(void)
{
    uint32_t redundant_boot = ((SRC->GPR[9] & 0x0C000000) >> 26);

    static uint32_t image_index[] = { 0, 0 };
    img_ver_t image_l_version = *(img_ver_t *)(image_l_base + 0x600);
    img_ver_t image_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.version < image_h_version.version)))
    {
        image_index[0] = 1;
    }
    else
    {
        image_index[1] = 1;
    }

    return image_index[redundant_boot];
}

痞子衡在MIMXRT1170-EVK 開發(fā)板上對(duì)image 版本設(shè)置情況也做了比較全面的實(shí)測,測試結(jié)果如下:

008675f6-c68a-11ec-bce3-dac502259ad0.png

四、一些關(guān)于image的注意事項(xiàng)

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

審核編輯 :李倩


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

    關(guān)注

    1

    文章

    113

    瀏覽量

    21254
  • 串行
    +關(guān)注

    關(guān)注

    0

    文章

    256

    瀏覽量

    35413

原文標(biāo)題:i.MX RT1170上串行NOR Flash雙程序可交替啟動(dòng)設(shè)計(jì)

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

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

掃碼添加小助手

加入工程師交流群

    評(píng)論

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

    請問如何在 i.MX RT1050 從多個(gè)起始地址運(yùn)行相同的引導(dǎo)加載程序?

    我正在研究一個(gè)i.MX RT1050項(xiàng)目,當(dāng)前位于 Flash 中的 0x60000000 處。我想要能夠在運(yùn)行時(shí)選擇引導(dǎo)加載程序運(yùn)行的起始地址,本質(zhì)
    發(fā)表于 03-04 07:52

    如何制作 rt117x 閃存驅(qū)動(dòng)程序

    我目前正在做一個(gè) rt1170 UDS 引導(dǎo)加載程序升級(jí)項(xiàng)目。由于閃存驅(qū)動(dòng)程序在 Pflash 中固化,因此可能存在安全風(fēng)險(xiǎn)。因此,我想創(chuàng)建一個(gè)flashdriver文件,從上位機(jī)下載到rt1
    發(fā)表于 03-04 06:38

    探索i.MX RT1180:高性能處理器的技術(shù)剖析與應(yīng)用指南

    探索i.MX RT1180:高性能處理器的技術(shù)剖析與應(yīng)用指南 在當(dāng)今科技飛速發(fā)展的時(shí)代,高性能處理器在工業(yè)自動(dòng)化、物聯(lián)網(wǎng)等眾多領(lǐng)域發(fā)揮著至關(guān)重要的作用。NXP Semiconductors的i.MX
    的頭像 發(fā)表于 12-24 10:20 ?755次閱讀

    恩智浦i.MX RT1170 MCU如何變革兩輪車騎行體驗(yàn)

    以MCU為核心的平臺(tái)為入門級(jí)數(shù)字互聯(lián)儀表板 (DCC) 增添智能手機(jī)鏡像投屏功能。目前,集成于儀表板的騎行者必備功能日益豐富,RT產(chǎn)品路線圖還將納入更多先進(jìn)特性。
    的頭像 發(fā)表于 12-19 16:25 ?2237次閱讀
    恩智浦<b class='flag-5'>i.MX</b> <b class='flag-5'>RT1170</b> MCU如何變革兩輪車騎行體驗(yàn)

    FRDM i.MX 9平臺(tái)選型指南:FRDM i.MX 9系列開發(fā)平臺(tái)解析

    恩智浦的FRDM平臺(tái)解決方案旨在提供易于獲取的開發(fā)工具,有效彌合原型制作與量產(chǎn)之間的鴻溝。FRDM板經(jīng)濟(jì)高效、易于使用,具備專業(yè)級(jí)功能,助力從概念到產(chǎn)品上市的全過程加速推進(jìn)。在FRDM i.MX
    的頭像 發(fā)表于 12-11 15:15 ?3.2w次閱讀
    FRDM <b class='flag-5'>i.MX</b> 9平臺(tái)選型指南:FRDM <b class='flag-5'>i.MX</b> 9系列開發(fā)平臺(tái)解析

    i.MX RT1180實(shí)現(xiàn)EtherCAT+伺服控制的終極實(shí)踐

    今天繼續(xù)為大家介紹i.MX RT1180實(shí)現(xiàn)EtherCAT+伺服控制的終極實(shí)踐:雙電機(jī)控制與Ethercat資源使用。
    的頭像 發(fā)表于 11-26 08:19 ?4222次閱讀
    <b class='flag-5'>i.MX</b> <b class='flag-5'>RT</b>1180實(shí)現(xiàn)EtherCAT+伺服控制的終極實(shí)踐

    RT1180 XMCD的特點(diǎn)和使用注意事項(xiàng)

    之前在 “XMCD – i.MX RT11xx系列簡單易用的特定外設(shè)配置功能”的文章給大家介紹了XMCD功能的基礎(chǔ)知識(shí)和用法,不過前面是以RT1170為例介紹的,本文將基于RT1180
    的頭像 發(fā)表于 10-07 11:06 ?1416次閱讀
    <b class='flag-5'>RT</b>1180 XMCD的特點(diǎn)和使用注意事項(xiàng)

    恩智浦i.MX RT1180跨界處理器如何選型

    i.MX RT1180 跨界處理器包含眾多的型號(hào),以滿足客戶對(duì)不同性能與價(jià)格的需求,今天就先給大家說說如何選型。
    的頭像 發(fā)表于 09-28 14:01 ?2489次閱讀
    恩智浦<b class='flag-5'>i.MX</b> <b class='flag-5'>RT</b>1180跨界處理器如何選型

    基于恩智浦i.MX RT芯片內(nèi)部RAM運(yùn)行LVGL工程

    隨著越來越多用戶選擇i.MX RT系列芯片制作產(chǎn)品,產(chǎn)品的需求以及芯片的用法也越來越多。本文將介紹在i.MX RT平臺(tái)中,如何創(chuàng)建LVGL項(xiàng)目并將其運(yùn)行在內(nèi)部SRAM而非SDRAM
    的頭像 發(fā)表于 07-01 09:33 ?2565次閱讀
    基于恩智浦<b class='flag-5'>i.MX</b> <b class='flag-5'>RT</b>芯片內(nèi)部RAM運(yùn)行LVGL工程

    如何實(shí)現(xiàn)安卓與恩智浦i.MX RT1170的無線投屏與控制

    Scrcpy是一款免費(fèi)開源的軟件,支持將安卓端屏幕投影到其他設(shè)備,并支持被投屏設(shè)備對(duì)安卓的反向控制?;贏DB工具,安卓端無需安裝任何軟件,延遲低,穩(wěn)定性好?,F(xiàn)在,安卓也可投屏到恩智浦i.MX RT1170。
    的頭像 發(fā)表于 06-26 09:53 ?2265次閱讀
    如何實(shí)現(xiàn)安卓與恩智浦<b class='flag-5'>i.MX</b> <b class='flag-5'>RT1170</b>的無線投屏與控制

    i.MX RT系列中FlexSPI DQS信號(hào)引腳配置GPIO方法

    i.MX RT060項(xiàng)目(采用QSPI Flash)的實(shí)際應(yīng)用中,有客戶反饋,其在設(shè)計(jì)階段并未預(yù)留DQS信號(hào)引腳,而是將該引腳作為GPIO用于控制關(guān)鍵外設(shè)的開關(guān),這導(dǎo)致程序無法正常運(yùn)
    的頭像 發(fā)表于 06-16 11:30 ?1471次閱讀
    <b class='flag-5'>i.MX</b> <b class='flag-5'>RT</b>系列中FlexSPI DQS信號(hào)引腳配置GPIO方法

    為什么無法在MIMXRT1170-EVK上調(diào)試XIP NOR閃存?

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

    如何禁用i.MX RT1170 MCU中的M4內(nèi)核?

    如何禁用 i.MX RT1170 MCU 中的 M4 內(nèi)核? 您能否提供具體的可行方法? 或者是否可以將內(nèi)核的工作時(shí)鐘頻率降低到 0 ?
    發(fā)表于 04-09 07:28

    在IMX RT1170的POR期間,PWM引腳變?yōu)楦唠娖绞窃趺椿厥拢?/a>

    我使用GPIO_AD_00生成 PWM 信號(hào),并且工作正常。但是當(dāng)我在 RT1170 中執(zhí)行 POR作時(shí)。然后 PWM 引腳變高,直到電路板啟動(dòng)。啟動(dòng)后,它按預(yù)期生成 PWM 信號(hào)。但我不希望 PWM 引腳在執(zhí)行 POR 時(shí)變?yōu)?/div>
    發(fā)表于 03-31 08:22

    i.MX RT 1176正常運(yùn)行代碼時(shí)與使用IAR調(diào)試代碼時(shí)存在一些奇怪的差異,為什么?

    我在 i.MX RT 1176 正常運(yùn)行代碼時(shí)的行為與使用 IAR 調(diào)試代碼時(shí)的行為之間存在一些奇怪的差異,并注意到這是由于堆棧指針的初始化方式造成的。 我的重置向量表將其指向 DTC 的頂部
    發(fā)表于 03-17 07:26