加入星計劃,您可以享受以下權(quán)益:

  • 創(chuàng)作內(nèi)容快速變現(xiàn)
  • 行業(yè)影響力擴散
  • 作品版權(quán)保護
  • 300W+ 專業(yè)用戶
  • 1.5W+ 優(yōu)質(zhì)創(chuàng)作者
  • 5000+ 長期合作伙伴
立即加入
  • 正文
    • 一、RT1170從eMMC啟動
    • 二、支持eMMC讀取的L2Boot設(shè)計
    • 三、L2Boot與App聯(lián)動
  • 推薦器件
  • 相關(guān)推薦
  • 電子產(chǎn)業(yè)圖譜
申請入駐 產(chǎn)業(yè)圖譜

eMMC兩級啟動設(shè)計,從此再也不用擔心啟動時間了

04/22 09:30
3757
閱讀需 9 分鐘
加入交流群
掃碼加入
獲取工程師必備禮包
參與熱點資訊討論

大家好,我是痞子衡,是正經(jīng)搞技術(shù)的痞子。今天痞子衡給大家分享的是i.MXRT1xxx系列上用NAND型啟動設(shè)備時可用兩級設(shè)計縮短啟動時間。

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

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

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

一、RT1170從eMMC啟動

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

VCCQ = 1.8V,低功耗模式,可支持 HS200/HS400
VCCQ = 3.3V,高功耗模式,可支持 52MHz CLK SDR/DDR

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

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

二、支持eMMC讀取的L2Boot設(shè)計

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

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

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

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

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

#define APP_EMMC_START  (0x80000)  // 用戶程序數(shù)據(jù)在eMMC中起始位置
#define APP_EXEC_START  (0x2000)   // 用戶程序首地址(中斷向量表地址),這里是 ITCM 偏移 0x2000 處(偏移不強制)
#define APP_LENGTH      (0x6000)   // 用戶程序體大小

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

三、L2Boot與App聯(lián)動

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

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

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

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

推薦器件

更多器件
器件型號 數(shù)量 器件廠商 器件描述 數(shù)據(jù)手冊 ECAD模型 風險等級 參考價格 更多信息
EPCQ128ASI16N 1 Intel Corporation Memory Circuit, 16MX8, CMOS, PDSO16, SOIC-16

ECAD模型

下載ECAD模型
$36 查看
HCPL2631SDM 1 Fairchild Semiconductor Corporation Logic IC Output Optocoupler, 2-Element, 5000V Isolation, 10MBps, LEAD FREE, SURFACE MOUNT, DIP-8
$2.67 查看
MT28EW128ABA1HPC-0SIT 1 Micron Technology Inc Flash, 8MX16, 70ns, PBGA64, 11 X 13 MM, HALOGEN FREE AND ROHS COMPLIANT, LBGA-64

ECAD模型

下載ECAD模型
暫無數(shù)據(jù) 查看

相關(guān)推薦

電子產(chǎn)業(yè)圖譜

碩士畢業(yè)于蘇州大學電子信息學院,目前就職于恩智浦(NXP)半導體MCU系統(tǒng)部門,擔任嵌入式系統(tǒng)應(yīng)用工程師。痞子衡會定期分享嵌入式相關(guān)文章