首页
/
每日頭條
/
圖文
/
嵌入式編程技術棧
嵌入式編程技術棧
更新时间:2025-12-26 03:05:39

關于 i.MXRT 啟動設備,痞子衡之前寫過很多篇文章,都是關于串并行 NOR/NAND Flash。相信對于 Flash 的原理和讀寫擦訪問,玩 MCU 的朋友一定不會陌生,但是說到讓 MCU 從 SD/eMMC 卡啟動,估計很多人都是一臉懵,這個在 MCU 世界裡沒怎麼見過啊。

從 SD/eMMC 啟動其實在 MPU(應用處理器) 世界裡非常常見,因為其更換應用程序的便利性,以及文件系統的廣泛支持。恰好 i.MXRT 系列又是引領跨界風潮的 MCU,所以支持從 SD/eMMC 啟動在 i.MXRT 上就顯得那麼自然和合理。話不多說,今天痞子衡就帶你見識一下:

一、支持的SD/eMMC

i.MXRTxxx 系列内部有一個名為 uSDHC 的強大外設,通過它能夠訪問 MMC/SD/SDIO 三類卡,BootROM 裡關于 SD/eMMC 的啟動支持就是借助這個 uSHDC 外設:

• Conforms to the SD Host Controller Standard Specification version 2.0/3.0

• Compatible with the MMC System Specification version 4.2/4.3/4.4/4.41/4.5/5.0

• Compatible with the SD Memory Card Specification version 3.0 and supports the Extended Capacity SD Memory Card

• Compatible with the SDIO Card Specification version 2.0/3.0

• Designed to work with SD Memory, miniSD Memory, SDIO, miniSDIO, SD Combo, MMC, MMC plus, and MMC RS cards

• Card bus clock frequency up to 208 MHz.

• Supports 1-bit / 4-bit SD and SDIO modes, 1-bit / 4-bit / 8-bit MMC modes.

嵌入式編程技術棧(痞子衡嵌入式i.MXRTxxx從SD)1

僅對于 uSDHC 接口啟動而言,選擇 SD/eMMC 操作流程是差不多的。因為 i.MXRT500 BootROM 僅支持 eMMC 設備,而 i.MXRT600 BootROM 同時支持 SD 和 eMMC 設備,所以本文主要就以 i.MXRT600 從 eMMC 啟動為例來具體介紹今天的主題。i.MXRT600 BootROM 主要實現了以下的 eMMC 類型卡支持:

(e)MMC 卡類型:

• eMMC Version 5.0 or earlier version.

• MMC Version 4.4 or earlier version.

(e)MMC 卡模式.

• eMMC/MMC: 4-bit/8-bit; full speed SDR(26MHz), high speed SDR/DDR(52MHz).

• eMMC Version 4.4 or later version: fast boot is supported.

因為官方 MIMXRT685-EVK 上并沒有 eMMC 芯片,痞子衡找了塊内部使用的 RT600_BGA176_Chip_RevB0_Rev.C 闆卡來做測試,這塊闆卡上在 i.MXRT600 uSDHC0 上連接了一顆來自 Kioxia 的 THGBMNG5D1LBAIT 芯片(eMMC 5.0,容量 4GB,最高速率 400MB/s)。

二、SD/eMMC硬件連接

i.MXRT500/600 内部都有 2 個 uSDHC 模塊(注:uSDHC1 可能在一些小封裝上沒有引出),BootROM 支持如下 pinmux(适用RT500/600)來連接 SD/eMMC 卡去啟動。i.MXRT500 上這兩組 uSDHC 都可以連 eMMC(僅 uSDHC0 支持 HS400 模式),i.MXRT600 上這兩組 uSDHC 也都可以連接 SD/eMMC:

嵌入式編程技術棧(痞子衡嵌入式i.MXRTxxx從SD)2

如下是 RT600_BGA176_Chip_RevB0_Rev.C 闆上 eMMC 連接設計:

嵌入式編程技術棧(痞子衡嵌入式i.MXRTxxx從SD)3

三、SD/eMMC加載啟動過程

SD/eMMC 設備本質上屬于 NAND,而 NAND 天生不支持 XiP,所以在 SD/eMMC 中僅能放置 Non-XIP Application(鍊接到内部 SRAM 或者 外部 RAM 空間),并且 SD/eMMC 又已經簡化了 NAND 訪問,因此從 SD/eMMC 啟動加載流程其實跟 《從 Serial(1-bit SPI) NOR恢複啟動》 加載流程差不多的(參考文章第 3 小節)。

i.MXRTxxx BootROM 給全部支持的設備定義了統一的 Application 偏移地址。對于 eMMC 設備,起始偏移一般要存放系統 main boot record (MBR),因此需要讓開,所以 BootROM 會從偏移 0x1000 地址處(byte address, block index 8)讀取 image header 數據(一共64個字節),找到其中的 imageLength 和 imageLoadAddress ,這樣就知道了 Application 加載起始地址以及總長度,然後再将 Application 全部拷貝到相應 SRAM 裡去啟動。

嵌入式編程技術棧(痞子衡嵌入式i.MXRTxxx從SD)4

四、下載Application進SD/eMMC

理解了 SD/eMMC 加載啟動過程,我們便可以開始使用 BootROM 的 Serial ISP 模式去下載 Application 進 SD/eMMC 設備中。痞子衡在啟動系列文章的第三篇 《Serial ISP模式(blhost)》) 裡介紹了 Serial ISP 模式的使用,現在假定你已經制作好一個 Bootable image 并且使用 blhost 工具與 BootROM 的 Serial ISP 模式建立了基本通信,正要開始将 Bootable image 下載進 SD/eMMC 設備。

此時我們隻需要提供簡化的 8byte 數據就可以完成 SD/eMMC 設備的配置,下面是一種 Application 下載更新示例(該示例适用于 uSDHC0 接口連接的 THGBMNG5D1LBAIT):

// 在 SRAM 裡臨時存儲 eMMC 配置數據

blhost -u 0x1fc9,0x0020 -- fill-memory 0x10C000 0x4 0xC0010100 // 4bit SDR, Normal Speed

blhost -u 0x1fc9,0x0020 -- fill-memory 0x10C004 0x4 0x0 // uSDHC0, 3.3V

// 使用 eMMC 配置數據去配置 uSDHC0 接口

blhost -u 0x1fc9,0x0020 -- configure-memory 0x121 0x10C000

在上述示例裡痞子衡首先使用了 fill-memory 命令在 0x10C000 地址處暫存了 8byte 配置數據,然後通過 config-memory 将這 8byte 數據裡的信息配置到 uSDHC0 接口中,實際上這 2 個命令成功執行後,你就可以開始使用 Serial ISP 命令下載 Bootable image 了。那麼這 8byte 配置數據到底是怎麼組織的?詳見下表:

嵌入式編程技術棧(痞子衡嵌入式i.MXRTxxx從SD)5

嵌入式編程技術棧(痞子衡嵌入式i.MXRTxxx從SD)6

從上表我們可以知道,其實這 8byte 數據提供的配置信息主要是 eMMC 連接以及屬性配置。configure-memory 命令執行成功之後,底下 image 的下載很簡單,隻需要将 Bootable image 從 eMMC 偏移 0x1000 地址處開始下載即可,具體步驟如下:

// 擦除 eMMC 并将 image 下載進 eMMC

blhost -u 0x1fc9,0x0020 -- flash-erase-region 0x0 0x20000 0x121

blhost -u 0x1fc9,0x0020 -- write-memory 0x1000 bt_image.bin 0x121

如果你覺得手動敲命令行太麻煩,也可以使用 MCUBootUtility 工具(v3.5及以上)來完成上述操作:

嵌入式編程技術棧(痞子衡嵌入式i.MXRTxxx從SD)7

五、進入SD/eMMC啟動模式

Application 已經被成功下載進 eMMC 芯片之後,此時我們便可以開始設置芯片從 eMMC 啟動,結合 ISP pin 以及 OTP 裡 PRIMARY_BOOT_SRC[3:0] 設置,一共有如下選擇(下表适用 i.MXRT600)。本次測試我們無需燒錄 OTP,隻需要将 ISP[2:0] 設為 3'b100 - SDIO 0 (eMMC) 即可。

嵌入式編程技術棧(痞子衡嵌入式i.MXRTxxx從SD)8

嵌入式編程技術棧(痞子衡嵌入式i.MXRTxxx從SD)9

六、配置OTP啟動SD/eMMC

設置好芯片啟動模式是從 eMMC 備份啟動之後,我們還需要最後關注一下與 eMMC 相關的具體特性配置:

SD/eMMC 配置主要集中在主芯片内部 OTP BOOT_CFG[2] 和 BOOT_CFG[3] 區域裡,下面是最主要的 BOOT_CFG[2 配置(下表适用 i.MXRT600),默認全 0 值适用 3.3V eMMC 設備且工作在 4bit SDR Normal Speed 模式,這個默認配置可以直接用于本次測試,因此我們無需燒寫 OTP(當然有需要的話改為 8bit 更快速度模式也是可以的)。

嵌入式編程技術棧(痞子衡嵌入式i.MXRTxxx從SD)10

嵌入式編程技術棧(痞子衡嵌入式i.MXRTxxx從SD)11

上述所有步驟全部完成之後,複位芯片你就應該能看到你放在 eMMC 裡的 Application 已經正常地啟動了。

,
Comments
Welcome to tft每日頭條 comments! Please keep conversations courteous and on-topic. To fosterproductive and respectful conversations, you may see comments from our Community Managers.
Sign up to post
Sort by
Show More Comments
推荐阅读
從此江湖再無的詩句(天下獨步的步非非妙境的非)
從此江湖再無的詩句(天下獨步的步非非妙境的非)
     ​   步,非,煙! 天下獨步的步,非非妙境的非,煙華鼎盛的煙。步非煙這樣解釋自己的名字。   有人說步非煙是武俠作家的“超女”,甚至她的讀者自稱“煙絲”。她的走紅是比較快,因為确實是兼具了實力與偶像元素的武俠寫手。實力,因為她是才女;偶像,因為她是美女。      ​   ​   她的作品文字妖娆豔麗,想象精彩奇特,意境恢宏壯闊。使其成名的《武林...
2025-12-26
魔法封印裝備便宜的可以在哪買(魔法上架價格不出所料)
魔法封印裝備便宜的可以在哪買(魔法上架價格不出所料)
  魔法少女将在明日更新,根據先前上架的魔法少女拉克絲的價格。參考可得7900點券。金克絲的受歡迎程度,9900點券也不是那麼的出乎意料。看到這個價格,你還要買嘛?或者想想前面的海克斯商店,有沒有藍瘦,香菇啊?   【“魔法少女”系列新皮膚】      魔法少女金克絲售價9900點券:對于全特效來說,基本是個這價格。最後就省下傳說印記啦。(這個皮膚有個能變成...
2025-12-26
紐西之謎面膜真的好用嗎(紐西之謎紐西之謎面膜)
紐西之謎面膜真的好用嗎(紐西之謎紐西之謎面膜)
  中國質量新聞網訊 (楊振遠)砸廣告、刷直播、上綜藝,紐西之謎可謂是近兩年風頭正勁的美妝品牌。然而,中國質量新聞網接消費者投訴稱,使用該品牌“爆款”産品“紐西之謎溫泉水乍彈面膜”後,“感覺油油的,很奇怪”,她通過查詢相關資料,認為紐西之謎所宣傳的“礦物質”護膚理念并沒有權威的科學數據支持,因此對其功效和安全性提出了質疑。   接訴後,中國質量新聞網委托專業...
2025-12-26
梁啟超的家風對他的影響(梁啟超家風家教)
梁啟超的家風對他的影響(梁啟超家風家教)
     授權圖片 | 呂志耘 攝   文稿來源:騰訊文化,版權歸原作者所有   梁啟超是個開明的父親,也是一個高明的教育家,他在性情、品格,以及眼界、胸懷等諸多方面都高人一籌。他的家風與家教,也往往是從大處着眼,小處着手。   近些年來,梁啟超的教子之道越來越為人們所關注。一個津津樂道的話題便是,梁氏一門何以能出三個院士,而其他幾個子女也都是各自領域裡十分...
2025-12-26
三千青絲詩句唯美精選50條(浸潤在詩詞中的美妙年華)
三千青絲詩句唯美精選50條(浸潤在詩詞中的美妙年華)
  自古美人歎遲暮,不許英雄見白頭。遲暮真的是一件隻能悲傷無奈的事情嗎?   每個年齡都有每個年齡獨有的美,青絲有鮮活的朝氣美,華發有溫潤的歲月美,它們本就不分伯仲,一樣動人!      衰老是終究不可避免的事,然而現在我們在很多短視頻平台都能看到,一些妝容精緻、服飾考究的阿姨,展現出了這個年齡段獨有的氣質美。   那是閱盡千帆後,被生活打磨出的獨特韻味,雖...
2025-12-26
Copyright 2023-2025 - www.tftnews.com All Rights Reserved