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

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

3天內不再提示

在i.MXRT1xxx系列上用NAND型啟動設備時可用兩級設計縮短啟動時間

痞子衡嵌入式 ? 來源:痞子衡嵌入式 ? 2024-05-01 09:19 ? 次閱讀

去年痞子衡寫過一篇騷操作文章 《借助i.MXRT10xx系列INIT_VTOR功能可以縮短程序熱重啟時間》,這對于 NAND 型啟動設備上程序熱重啟時間的縮短非常有幫助。我們知道隨著項目進程的推進,代碼功能逐漸完善,程序體積也會變得越來越大,相應地啟動時間也會增大(每次復位 BootROM 都會搬移一次程序,搬移時間和程序長度成正比),痞子衡已經為大家解決了程序熱重啟時間問題,但是程序上電啟動(冷啟動)時間仍然過長怎么辦?

最近痞子衡在支持一個 RT1170 汽車電子客戶,他們使用了 eMMC 作為啟動設備,他們就對程序啟動時間比較擔心。鑒于此,痞子衡決定給他們做一個示例,這個方法其實痞子衡在 《測量RT1170 Raw NAND啟動時間》 一文 2.2 小節里簡單提及過,就是小 L2Boot + 大 App 兩級啟動設計(L2Boot盡量小,App可以很大,L2Boot起來之后去做一些用戶啟動任務,然后由L2Boot再去慢慢加載App)。那會痞子衡只是放個嘴炮,這次咱們就動個真格:

Note:本文以 eMMC 啟動設備為例,但思想方法同樣適用 Raw/Serial NAND, SD 等啟動設備。

一、RT1170從eMMC啟動

RT1xxx 系列包含兩個 uSDHC 模塊,其中 uSDHC1 主要支持 1/4-bit 模式,而 uSDHC2 可以支持 1/4/8-bit 模式,因此大部分客戶都會將 8-bit eMMC 掛在 uSDHC2 上。這個汽車電子客戶選用了來自江波龍的兼容 eMMC5.1 標準的 8GB 容量芯片 FEMDME008G-A8A39,硬件設計上內存介質供電 VCC 是 3.3V,主機接口供電 VCCQ 是 1.8V(高速):

VCCQ = 1.8V,低功耗模式,可支持 HS200/HS400
VCCQ = 3.3V,高功耗模式,可支持 52MHz CLK SDR/DDR
b6cd042c-fff1-11ee-a297-92fbcf53809c.png

要從 eMMC 啟動,首先需要準備一個 Non-XIP 程序,具體可參考 《RT上Non-App制作限制》。有了程序,然后將芯片 Boot Mode 設置為 2'b01 串行下載模式,再使用痞子衡 MCUBootUtility 工具做一鍵下載即可,軟件配置如下:

b6e0fdb0-fff1-11ee-a297-92fbcf53809c.png

程序下載完成之后,將芯片 Boot Mode 設置為 2'b10,此外 BOOT_CFG[1/5/7/8/9] 均設為1,即從 uSDHC2 8-bit 1.8V High-Speed 模式啟動,斷電復位,你應該能看到程序從 eMMC 中被啟動了。

b6e997c2-fff1-11ee-a297-92fbcf53809c.png

二、支持eMMC讀取的L2Boot設計

確認基本的 eMMC 啟動過程沒問題了,現在開始設計 L2Boot。其實這個 L2Boot 也沒啥玄機,本質上也是一個 Non-XIP 程序,只不過程序功能包含:用戶啟動任務執行、eMMC 數據讀取驅動、用戶程序加載執行。痞子衡這里的 L2Boot 設計主要涉及 eMMC 數據讀取以及用戶程序加載執行。

目前官方 SDK_2_15_000_MIMXRT1170-EVKB 里沒有單純的 eMMC 例程,但是其它 RT 型號倒是有例程 SDK_2_15_000_EVKB-IMXRT1050oardsevkbimxrt1050sdmmc_examplesmmccard_freertos,痞子衡其實就想要一個最簡單的裸機版本的 eMMC 讀寫測試。

為了不重復造輪子,痞子衡就在 SDK_2_15_000_MIMXRT1170-EVKBoardsevkbmimxrt1170ootloader_examplesflashloader 基礎上做了刪減,僅保留 eMMC 讀寫以及程序跳轉功能,代碼倉庫如下:

https://github.com/JayHeng/RT-SDMMC/tree/dev_l2boot_emmc/boards/mcu/mmc_boot

這個 L2Boot 工程里最核心的函數 bootloader_run() 如下,其中用戶程序拷貝過程目標地址和長度使用了 HARDCODE,這里其實是可以改進的(可參考 RTxxx 系列啟動設計在用戶程序中斷向量表保留區域放置 APP_EXEC_START 和 APP_LENGTH)。此外 APP_EMMC_START 設 0x80000,是因為這款 eMMC 芯片擦除單元(erase group)為 512KB,第一個 group 我們放置了 L2Boot,用戶 App 可從第二個 Group 開始放。

#define APP_EMMC_START  (0x80000)  // 用戶程序數據在eMMC中起始位置
#define APP_EXEC_START  (0x2000)   // 用戶程序首地址(中斷向量表地址),這里是 ITCM 偏移 0x2000 處(偏移不強制)
#define APP_LENGTH      (0x6000)   // 用戶程序體大小
b6f68518-fff1-11ee-a297-92fbcf53809c.png

需要提醒的是,這個 L2Boot 務必要遵循 BootROM 對于 Non-XIP 程序加載的鏈接限制(空出前面位置給啟動頭),因為上電后其由 BootROM 加載執行。

三、L2Boot與App聯動

為了測試 L2Boot 功能是否正常,痞子衡在倉庫里也放了一個示例用戶 App 工程(其實就是 SDK 里的 hello world 例程),這個 App 由于是被 L2Boot 加載執行,所以它也不存在 BootROM 關于 Non-XIP 程序的鏈接地址限制問題了,完全看 L2Boot 的代碼設計要求。

https://github.com/JayHeng/RT-SDMMC/tree/dev_l2boot_emmc/boards/mcu/mmc_app

現在我們用 MCUBootUtility 工具依次將痞子衡倉庫里的 mmc_boot 程序(一鍵下載方式)和 mmc_app 程序(通用編程器下載方式,如下圖)下載進 eMMC 里。切換 Boot Mode 后斷電復位,如果你看到 mmc_app 正在執行,恭喜你,兩級啟動設計完成了。

b7042a06-fff1-11ee-a297-92fbcf53809c.png

至此,在i.MXRT1xxx系列上用NAND型啟動設備時可用兩級設計縮短啟動時間痞子衡便介紹完畢了,掌聲在哪里~~~


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

    關注

    16

    文章

    1585

    瀏覽量

    135173
  • Vcc
    Vcc
    +關注

    關注

    2

    文章

    298

    瀏覽量

    35116
  • emmc
    +關注

    關注

    6

    文章

    185

    瀏覽量

    52090
  • 裸機
    +關注

    關注

    0

    文章

    37

    瀏覽量

    6181

原文標題:eMMC兩級啟動設計,從此再也不用擔心啟動時間了

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

收藏 人收藏

    評論

    相關推薦

    恩智浦i.MXRT1xxx系列MCU的Serial NAND啟動

    大家好,我是痞子衡,是正經搞技術的痞子。今天痞子衡給大家介紹的是恩智浦i.MXRT1xxx系列MCU的Serial NAND啟動。
    發表于 08-21 09:20 ?223次閱讀
    恩智浦<b class='flag-5'>i.MXRT1xxx</b><b class='flag-5'>系列</b>MCU的Serial <b class='flag-5'>NAND</b><b class='flag-5'>啟動</b>

    為什么改動i.MXRT1xxx里IOMUXC_GPR寄存器保留位會造成系統異常呢

    為什么改動i.MXRT1xxx里IOMUXC_GPR寄存器保留位會造成系統異常呢?怎樣去解決i.MXRT1062應用程序里動態調整FlexRAM導致WDOG模塊工作異常的問題呢?
    發表于 11-29 06:34

    i.MXRTxxx系列ROM中靈活的串行NOR Flash啟動硬復位引腳選擇

    篇非常詳細的文章 《深入i.MXRT1050系列ROM中串行NOR Flash啟動初始化流程》,這篇文章主要針對 i.MXRT1xxx 四位數系列
    發表于 12-21 06:34

    如何解決i.MXRT1xxx系列啟動應用程序發生異常跑飛問題?

    i.MXRT1xxx系列啟動應用程序如何解決異常跑飛問題?
    發表于 12-23 07:41

    i.MXRT1xxx Boot的Serial Downloader模式相關資料分享

    (sdphost, mfgtool) 里痞子衡為大家介紹了i.MXRT1xxx Boot的Serial Downloader模式,這種模式主要是用來引導啟動Flashloader,那么Flashlo...
    發表于 01-26 08:12

    系統時鐘配置不當會導致i.MXRT1xxx系列下OTFAD加密啟動失敗的解決辦法

      大家好,我是痞子衡,是正經搞技術的痞子。今天痞子衡給大家分享的是系統時鐘配置不當會導致i.MXRT1xxx系列下OTFAD加密啟動失敗問題?! ∥覀冎?,i.MXRT1xxx家族早
    發表于 02-08 06:09

    i.MXRT1xxx上的普通GPIO與高速GPIO的差異是什么?

    i.MXRT1xxx上的普通GPIO與高速GPIO的差異是什么?
    發表于 02-08 06:54

    i.MXRT1xxx系列里暗藏的Product ID寄存器介紹

      大家好,我是痞子衡,是正經搞技術的痞子。今天痞子衡給大家介紹的是i.MXRT1xxx系列里暗藏的Product ID寄存器?! CU 廠商定義一個產品系列時,通常是會預先規劃產
    發表于 02-11 06:24

    介紹的是i.MX RT1xxx系列MCU的Parallel NOR啟動

      大家好,我是痞子衡,是正經搞技術的痞子。今天痞子衡給大家介紹的是恩智浦i.MX RT1xxx系列MCU的Parallel NOR啟動?! ∩弦黄v
    發表于 02-22 06:31

    介紹i.MX RT1xxx系列MCU的Raw NAND啟動

      大家好,我是痞子衡,是正經搞技術的痞子。今天痞子衡給大家介紹的是恩智浦i.MX RT1xxx系列MCU的Raw NAND啟動?! ∏懊驿?/div>
    發表于 02-22 07:20

    電機啟動時間一般是多久?怎么縮短啟動時間呢?

    電機啟動時間一般是多久?我這個電機是132KW的,還有就是怎么縮短啟動時間,1S內能啟動嗎?請高手解答 說了那么多,我還是沒明白
    發表于 11-16 08:19

    痞子衡嵌入式:系統時鐘配置不當會導致i.MXRT1xxx系列下OTFAD加密啟動失敗

      大家好,我是痞子衡,是正經搞技術的痞子。今天痞子衡給大家分享的是系統時鐘配置不當會導致i.MXRT1xxx系列下OTFAD加密啟動失敗問題?! ∥覀冎?,i.MXRT1xxx家族早
    發表于 12-04 19:36 ?1次下載
    痞子衡嵌入式:系統時鐘配置不當會導致<b class='flag-5'>i.MXRT1xxx</b><b class='flag-5'>系列</b>下OTFAD加密<b class='flag-5'>啟動</b>失敗

    痞子衡嵌入式:恩智浦i.MX RT1xxx系列MCU啟動那些事(9)- 從Parallel NOR啟動

      大家好,我是痞子衡,是正經搞技術的痞子。今天痞子衡給大家介紹的是恩智浦i.MX RT1xxx系列MCU的Parallel NOR啟動?! ∩弦黄vi.MXRT1xxx從Raw
    發表于 12-28 19:19 ?8次下載
    痞子衡嵌入式:恩智浦i.MX RT1<b class='flag-5'>xxx</b><b class='flag-5'>系列</b>MCU<b class='flag-5'>啟動</b>那些事(9)- 從Parallel NOR<b class='flag-5'>啟動</b>

    痞子衡嵌入式:恩智浦i.MX RT1xxx系列MCU啟動那些事(8)- 從Raw NAND啟動

      大家好,我是痞子衡,是正經搞技術的痞子。今天痞子衡給大家介紹的是恩智浦i.MX RT1xxx系列MCU的Raw NAND啟動?! ∏懊驿亯|了七篇
    發表于 12-28 19:19 ?10次下載
    痞子衡嵌入式:恩智浦i.MX RT1<b class='flag-5'>xxx</b><b class='flag-5'>系列</b>MCU<b class='flag-5'>啟動</b>那些事(8)- 從Raw <b class='flag-5'>NAND</b><b class='flag-5'>啟動</b>

    Serial NAND i.MX RT1xxx啟動

    很多關于? i.MXRT1xxx?Serial NAND 啟動的 咨詢 問題,這個啟動設備突然火熱起來了~ 借此機會,今天跟大家介紹一下 S
    的頭像 發表于 08-17 08:50 ?429次閱讀
    Serial <b class='flag-5'>NAND</b> i.MX RT1<b class='flag-5'>xxx</b><b class='flag-5'>啟動</b>
    亚洲欧美日韩精品久久_久久精品AⅤ无码中文_日本中文字幕有码在线播放_亚洲视频高清不卡在线观看
    <acronym id="s8ci2"><small id="s8ci2"></small></acronym>
    <rt id="s8ci2"></rt><rt id="s8ci2"><optgroup id="s8ci2"></optgroup></rt>
    <acronym id="s8ci2"></acronym>
    <acronym id="s8ci2"><center id="s8ci2"></center></acronym>