0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

詳解MCU的SD/eMMC卡啟動(dòng)

恩智浦MCU加油站 ? 來(lái)源:恩智浦MCU加油站 ? 作者:恩智浦MCU加油站 ? 2022-05-12 15:52 ? 次閱讀

關(guān)于i.MX RT啟動(dòng)設(shè)備,我之前寫(xiě)過(guò)很多篇文章,都是關(guān)于串并行 NOR/NAND Flash。相信對(duì)于 Flash 的原理和讀寫(xiě)擦訪問(wèn),玩 MCU 的朋友一定不會(huì)陌生,但是說(shuō)到讓 MCU 從 SD/eMMC 卡啟動(dòng),估計(jì)很多人都是一臉懵,這個(gè)在 MCU 世界里沒(méi)怎么見(jiàn)過(guò)啊。

從SD/eMMC 啟動(dòng)其實(shí)在 MPU(應(yīng)用處理器) 世界里非常常見(jiàn),因?yàn)槠涓鼡Q應(yīng)用程序的便利性,以及文件系統(tǒng)的廣泛支持。恰好i.MX RT系列又是引領(lǐng)跨界風(fēng)潮的 MCU,所以支持從 SD/eMMC 啟動(dòng)在 i.MX RT上就顯得那么自然和合理。話不多說(shuō),今天就帶你見(jiàn)識(shí)一下:

一、支持的SD/eMMC

i.MX RTxxx系列內(nèi)部有一個(gè)名為uSDHC的強(qiáng)大外設(shè),通過(guò)它能夠訪問(wèn) MMC/SD/SDIO 三類(lèi)卡,BootROM 里關(guān)于 SD/eMMC 的啟動(dòng)支持就是借助這個(gè) uSHDC 外設(shè):

  • Conforms to the SD Host Controller Standard Specification version2.0/3.0

  • Compatible with the MMC System Specification version4.2/4.3/4.4/4.41/4.5/5.0

  • Compatible with the SD Memory Card Specification version 3.0 andsupports 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, SDCombo, 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 MMCmodes.

c0a34626-d1b0-11ec-bce3-dac502259ad0.png

僅對(duì)于uSDHC 接口啟動(dòng)而言,選擇 SD/eMMC 操作流程是差不多的。因?yàn)?i.MX RT500 BootROM 僅支持 eMMC 設(shè)備,而 i.MX RT600 BootROM 同時(shí)支持 SD 和 eMMC 設(shè)備,所以本文主要就以 i.MX RT600 從 eMMC 啟動(dòng)為例來(lái)具體介紹今天的主題。

i.MX RT600 BootROM 主要實(shí)現(xiàn)了以下的 eMMC 類(lèi)型卡支持:

(e)MMC 卡類(lèi)型:

  • 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.

因?yàn)楣俜組IMXRT685-EVK 上并沒(méi)有 eMMC 芯片,隨找了塊內(nèi)部使用的 RT600_BGA176_Chip_RevB0_Rev.C 板卡來(lái)做測(cè)試,這塊板卡上在i.MX RT600 uSDHC0 上連接了一顆來(lái)自Kioxia的THGBMNG5D1LBAIT芯片(eMMC 5.0,容量4GB,最高速率 400MB/s)。

二、SD/eMMC硬件連接

i.MX RT500/600內(nèi)部都有 2 個(gè) uSDHC 模塊(注:uSDHC1 可能在一些小封裝上沒(méi)有引出),BootROM 支持如下 pinmux(適用RT500/600)來(lái)連接 SD/eMMC 卡去啟動(dòng)。i.MX RT500 上這兩組 uSDHC 都可以連 eMMC(僅 uSDHC0 支持HS400 模式),i.MX RT600 上這兩組 uSDHC 也都可以連接 SD/eMMC:

c0bee7a0-d1b0-11ec-bce3-dac502259ad0.png

如下是RT600_BGA176_Chip_RevB0_Rev.C板上eMMC連接設(shè)計(jì):

c0ffb0d2-d1b0-11ec-bce3-dac502259ad0.png

三、SD/eMMC加載啟動(dòng)過(guò)程

SD/eMMC設(shè)備本質(zhì)上屬于 NAND,而 NAND 天生不支持 XiP,所以在SD/eMMC 中僅能放置 Non-XIP Application(鏈接到內(nèi)部 SRAM 或者 外部 RAM 空間),并且 SD/eMMC 又已經(jīng)簡(jiǎn)化了 NAND 訪問(wèn),因此從 SD/eMMC 啟動(dòng)加載流程其實(shí)跟 《從 Serial(1-bit SPI) NOR恢復(fù)啟動(dòng)》加載流程差不多的(參考文章第 3 小節(jié))。

i.MX RTxxx BootROM 給全部支持的設(shè)備定義了統(tǒng)一的Application 偏移地址。對(duì)于 eMMC 設(shè)備,起始偏移一般要存放系統(tǒng) main boot record (MBR),因此需要讓開(kāi),所以 BootROM 會(huì)從偏移 0x1000 地址處(byte address, block index 8)讀取 image header 數(shù)據(jù)(一共64個(gè)字節(jié)),找到其中的 imageLength 和 imageLoadAddress ,這樣就知道了 Application 加載起始地址以及總長(zhǎng)度,然后再將 Application 全部拷貝到相應(yīng) SRAM 里去啟動(dòng)。

c13b6000-d1b0-11ec-bce3-dac502259ad0.png

四、下載Application進(jìn)SD/eMMC

理解了SD/eMMC 加載啟動(dòng)過(guò)程,我們便可以開(kāi)始使用 BootROM 的 Serial ISP 模式去下載 Application 進(jìn) SD/eMMC 設(shè)備中。我在啟動(dòng)系列文章的第三篇 《Serial ISP模式(blhost)》)里介紹了 Serial ISP 模式的使用,現(xiàn)在假定你已經(jīng)制作好一個(gè) Bootableimage 并且使用 blhost 工具與 BootROM 的 Serial ISP 模式建立了基本通信,正要開(kāi)始將 Bootable image 下載進(jìn) SD/eMMC 設(shè)備。

此時(shí)我們只需要提供簡(jiǎn)化的8byte數(shù)據(jù)就可以完成 SD/eMMC 設(shè)備的配置,下面是一種 Application下載更新示例(該示例適用于uSDHC0接口連接的 THGBMNG5D1LBAIT):
// 在 SRAM 里臨時(shí)存儲(chǔ) eMMC 配置數(shù)據(jù)
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 配置數(shù)據(jù)去配置 uSDHC0 接口
blhost -u 0x1fc9,0x0020 -- configure-memory 0x121 0x10C00

在上述示例里首先使用了 fill-memory 命令在 0x10C000 地址處暫存了 8byte 配置數(shù)據(jù),然后通過(guò) config-memory 將這 8byte 數(shù)據(jù)里的信息配置到 uSDHC0 接口中,實(shí)際上這 2 個(gè)命令成功執(zhí)行后,你就可以開(kāi)始使用 Serial ISP 命令下載 Bootable image 了。

那么這 8byte 配置數(shù)據(jù)到底是怎么組織的?詳見(jiàn)下表:

c156c5ca-d1b0-11ec-bce3-dac502259ad0.png

c19aeae8-d1b0-11ec-bce3-dac502259ad0.png

從上表我們可以知道,其實(shí)這 8byte 數(shù)據(jù)提供的配置信息主要是 eMMC 連接以及屬性配置。configure-memory 命令執(zhí)行成功之后,底下 image 的下載很簡(jiǎn)單,只需要將 Bootable image 從 eMMC 偏移 0x1000 地址處開(kāi)始下載即可,具體步驟如下:

// 擦除 eMMC 并將 image 下載進(jìn) eMMC
blhost -u 0x1fc9,0x0020 -- flash-erase-region 0x0 0x20000 0x121
blhost -u 0x1fc9,0x0020 -- write-memory 0x1000 bt_image.bin 0x121

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

c1d6f7e0-d1b0-11ec-bce3-dac502259ad0.png

五、進(jìn)入SD/eMMC啟動(dòng)模式

Application已經(jīng)被成功下載進(jìn) eMMC 芯片之后,此時(shí)我們便可以開(kāi)始設(shè)置芯片從 eMMC 啟動(dòng),結(jié)合 ISP pin 以及 OTP 里 PRIMARY_BOOT_SRC[3:0] 設(shè)置,一共有如下選擇(下表適用 i.MXRT600)。本次測(cè)試我們無(wú)需燒錄 OTP,只需要將 ISP[2:0] 設(shè)為 3'b100 - SDIO 0 (eMMC) 即可。

c201879e-d1b0-11ec-bce3-dac502259ad0.png

c2b02c36-d1b0-11ec-bce3-dac502259ad0.png

六、配置OTP啟動(dòng)SD/eMMC

設(shè)置好芯片啟動(dòng)模式是從 eMMC 備份啟動(dòng)之后,我們還需要最后關(guān)注一下與 eMMC 相關(guān)的具體特性配置:

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

c2d4499a-d1b0-11ec-bce3-dac502259ad0.png

上述所有步驟全部完成之后,復(fù)位芯片你就應(yīng)該能看到你放在eMMC里的Application已經(jīng)正常地啟動(dòng)了。

原文標(biāo)題:i.MX RTxxx從SD/eMMC啟動(dòng)

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

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

    關(guān)注

    146

    文章

    16802

    瀏覽量

    349353
  • 恩智浦
    +關(guān)注

    關(guān)注

    14

    文章

    5806

    瀏覽量

    105950
  • emmc
    +關(guān)注

    關(guān)注

    7

    文章

    195

    瀏覽量

    52478

原文標(biāo)題:i.MX RTxxx從SD/eMMC啟動(dòng)

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

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    能從SD啟動(dòng)MCU了解一下?

    大家好,我是痞子衡,是正經(jīng)搞技術(shù)的痞子。今天痞子衡給大家介紹的是恩智浦i.MXRT1xxx系列MCUSD/eMMC啟動(dòng)
    發(fā)表于 05-12 09:21 ?663次閱讀
    能從<b class='flag-5'>SD</b><b class='flag-5'>卡</b><b class='flag-5'>啟動(dòng)</b>的<b class='flag-5'>MCU</b>了解一下?

    u-boot命令之EMMCSD操作命令詳解

    今天給大家詳細(xì)的介紹一下u-boot命令之EMMCSD操作的mmc命令使用。希望這篇文章對(duì)大家有所幫助。
    發(fā)表于 07-12 15:19 ?3825次閱讀

    #硬聲創(chuàng)作季 emmc轉(zhuǎn)sd,開(kāi)源!

    SDDIY開(kāi)發(fā)板emmc
    MyTang
    發(fā)布于 :2022年08月25日 16:17:01

    【環(huán)境搭建】迅為4412板子通過(guò)SD燒寫(xiě)所有文件后,EMMC啟動(dòng)失敗

    件夾后,從SD啟動(dòng)。在uboot環(huán)境下輸入命令 sdfuse flashall后, 再次從EMMC啟動(dòng),發(fā)現(xiàn)沒(méi)有反應(yīng)。emmc中的uboot
    發(fā)表于 11-05 14:23

    我禁用BBB的eMMCSD啟動(dòng)后為什么還會(huì)有eMMC的4G分區(qū)呢?

    我編輯了uEnv.txt 文件##disable_uboot_overlay_emmc=1禁用了eMMC,系統(tǒng)從SD啟動(dòng),但是我進(jìn)入系統(tǒng)后
    發(fā)表于 05-10 21:22

    《10.SD啟動(dòng)詳解》精選資料分享

    《10.SD啟動(dòng)詳解》第一部分、章節(jié)目錄1.10.1.主流的外存設(shè)備介紹1.10.2.SD
    發(fā)表于 07-28 08:50

    請(qǐng)問(wèn)如何實(shí)現(xiàn)eMMCSD啟動(dòng)的切換呢?

    eMMC燒寫(xiě)鏡像后,還想實(shí)現(xiàn)從SD啟動(dòng),切換鏡像,方便開(kāi)發(fā)。制作SD
    發(fā)表于 12-30 07:42

    固件sdcard.img編譯后燒寫(xiě)到emmcSD上系統(tǒng)無(wú)法啟動(dòng)這是為什么

    按照《Open Industrial User Guide》 Rev. 1.10, 12/2020 (OPEN-LINUX-IND-UM-1-10.pdf) 編譯openil的完整固件sdcard.img后,燒寫(xiě)到emmcSD
    發(fā)表于 12-31 07:17

    SDEMMC啟動(dòng)時(shí)串口沒(méi)有任何輸出是什么問(wèn)題

    目前手頭有兩塊底板,一塊是OK1043AX-CV1.2,一塊是OK1043xA-C3V1.1。發(fā)現(xiàn)通過(guò)調(diào)整撥碼開(kāi)關(guān),無(wú)法讓C3V1.1的板子從SD或者EMMC啟動(dòng),但是同樣的方法在C
    發(fā)表于 01-05 06:55

    SD/SDIO/eMMC 協(xié)議分析儀

    SDIO協(xié)議分析儀、支持最先進(jìn)的SDIO3.0測(cè)試,支持eMMC5.1版本協(xié)議測(cè)試,Host Tester主控端符合性測(cè)試、支持SD仿真、SDA聯(lián)盟認(rèn)可和推薦的測(cè)試設(shè)備 SD/
    發(fā)表于 12-02 16:50 ?96次下載

    i.MX RT1xxx從SD/eMMC啟動(dòng)

    最近在恩智浦官方社區(qū)上支持了一個(gè)關(guān)于i.MX RT從SD啟動(dòng)的案例,這讓我想起了一年前寫(xiě)過(guò)的一篇《i.MX RT600從SD/eMMC
    的頭像 發(fā)表于 05-11 14:34 ?1188次閱讀
    i.MX RT1xxx從<b class='flag-5'>SD</b>/<b class='flag-5'>eMMC</b><b class='flag-5'>啟動(dòng)</b>

    EMMC主控固件讀取及SD轉(zhuǎn)emmc接線

    EMMC主控固件讀取及SD轉(zhuǎn)emmc接線
    發(fā)表于 08-10 09:46 ?22次下載

    MCUSD NAND芯片之國(guó)產(chǎn)新選擇

    文章目錄前言傳統(tǒng)SD和可貼片SD傳統(tǒng)SD可貼片SD
    的頭像 發(fā)表于 11-23 17:31 ?660次閱讀
    【<b class='flag-5'>MCU</b>】<b class='flag-5'>SD</b> NAND芯片之國(guó)產(chǎn)新選擇

    3562-Linux系統(tǒng)啟動(dòng)制作及系統(tǒng)固化

    ](基于 RK3562_LINUX_SDK_RELEASE_V1.1.0_20231220) 評(píng)估板支持通過(guò) Linux 系統(tǒng)啟動(dòng)(下文稱(chēng)為“SD 啟動(dòng)
    的頭像 發(fā)表于 03-05 15:58 ?242次閱讀
    3562-Linux系統(tǒng)<b class='flag-5'>啟動(dòng)</b><b class='flag-5'>卡</b>制作及系統(tǒng)固化