0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

详解MCU的SD/eMMC卡启动

恩智浦MCU加油站 来源:恩智浦MCU加油站 作者:恩智浦MCU加油站 2022-05-12 15:52 次阅读

关于i.MX RT启动设备,我之前写过很多篇文章,都是关于串并行 NOR/NAND Flash。相信对于 Flash 的原理和读写擦访问,玩 MCU 的朋友一定不会陌生,但是说到让 MCU 从 SD/eMMC 卡启动,估计很多人都是一脸懵,这个在 MCU 世界里没怎么见过啊。

从SD/eMMC 启动其实在 MPU(应用处理器) 世界里非常常见,因为其更换应用程序的便利性,以及文件系统的广泛支持。恰好i.MX RT系列又是引领跨界风潮的 MCU,所以支持从 SD/eMMC 启动在 i.MX RT上就显得那么自然和合理。话不多说,今天就带你见识一下:

一、支持的SD/eMMC

i.MX RTxxx系列内部有一个名为uSDHC的强大外设,通过它能够访问 MMC/SD/SDIO 三类卡,BootROM 里关于 SD/eMMC 的启动支持就是借助这个 uSHDC 外设:

  • 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

仅对于uSDHC 接口启动而言,选择 SD/eMMC 操作流程是差不多的。因为 i.MX RT500 BootROM 仅支持 eMMC 设备,而 i.MX RT600 BootROM 同时支持 SD 和 eMMC 设备,所以本文主要就以 i.MX RT600 从 eMMC 启动为例来具体介绍今天的主题。

i.MX RT600 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.MX RT600 uSDHC0 上连接了一颗来自Kioxia的THGBMNG5D1LBAIT芯片(eMMC 5.0,容量4GB,最高速率 400MB/s)。

二、SD/eMMC硬件连接

i.MX RT500/600内部都有 2 个 uSDHC 模块(注:uSDHC1 可能在一些小封装上没有引出),BootROM 支持如下 pinmux(适用RT500/600)来连接 SD/eMMC 卡去启动。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连接设计:

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

三、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.MX RTxxx BootROM 给全部支持的设备定义了统一的Application 偏移地址。对于 eMMC 设备,起始偏移一般要存放系统 main boot record (MBR),因此需要让开,所以 BootROM 会从偏移 0x1000 地址处(byte address, block index 8)读取 image header 数据(一共64个字节),找到其中的 imageLength 和 imageLoadAddress ,这样就知道了 Application 加载起始地址以及总长度,然后再将 Application 全部拷贝到相应 SRAM 里去启动。

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

四、下载Application进SD/eMMC

理解了SD/eMMC 加载启动过程,我们便可以开始使用 BootROM 的 Serial ISP 模式去下载 Application 进 SD/eMMC 设备中。我在启动系列文章的第三篇 《Serial ISP模式(blhost)》)里介绍了 Serial ISP 模式的使用,现在假定你已经制作好一个 Bootableimage 并且使用 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 0x10C00

在上述示例里首先使用了 fill-memory 命令在 0x10C000 地址处暂存了 8byte 配置数据,然后通过 config-memory 将这 8byte 数据里的信息配置到 uSDHC0 接口中,实际上这 2 个命令成功执行后,你就可以开始使用 Serial ISP 命令下载 Bootable image 了。

那么这 8byte 配置数据到底是怎么组织的?详见下表:

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

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

从上表我们可以知道,其实这 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及以上)来完成上述操作:

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

五、进入SD/eMMC启动模式

Application已经被成功下载进 eMMC 芯片之后,此时我们便可以开始设置芯片从 eMMC 启动,结合 ISP pin 以及 OTP 里 PRIMARY_BOOT_SRC[3:0] 设置,一共有如下选择(下表适用 i.MXRT600)。本次测试我们无需烧录 OTP,只需要将 ISP[2:0] 设为 3'b100 - SDIO 0 (eMMC) 即可。

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

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

六、配置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 更快速度模式也是可以的)。

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

上述所有步骤全部完成之后,复位芯片你就应该能看到你放在eMMC里的Application已经正常地启动了。

原文标题:i.MX RTxxx从SD/eMMC启动

文章出处:【微信公众号:恩智浦MCU加油站】欢迎添加关注!文章转载请注明出处。

审核编辑:汤梓红
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • mcu
    mcu
    +关注

    关注

    146

    文章

    16011

    浏览量

    343545
  • 恩智浦
    +关注

    关注

    14

    文章

    5713

    浏览量

    100768
  • emmc
    +关注

    关注

    5

    文章

    180

    浏览量

    52013

原文标题:i.MX RTxxx从SD/eMMC启动

文章出处:【微信号:NXP_SMART_HARDWARE,微信公众号:恩智浦MCU加油站】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    能从SD启动MCU了解一下?

    大家好,我是痞子衡,是正经搞技术的痞子。今天痞子衡给大家介绍的是恩智浦i.MXRT1xxx系列MCUSD/eMMC启动
    发表于 05-12 09:21 501次阅读
    能从<b class='flag-5'>SD</b>卡<b class='flag-5'>启动</b>的<b class='flag-5'>MCU</b>了解一下?

    #硬声创作季 emmcsd,开源!

    SDDIY开发板emmc
    MyTang
    发布于 :2022年08月25日 16:17:01

    #硬声创作季 #开源集结号 『开源』emmcsdemmc制作高速sd,可读取emmc恢复数据

    SDDIYSDemmc
    纸箱里的猫咪
    发布于 :2022年09月12日 13:30:04

    【环境搭建】迅为4412板子通过SD烧写所有文件后,EMMC启动失败

    件夹后,从SD启动。在uboot环境下输入命令 sdfuse flashall后, 再次从EMMC启动,发现没有反应。emmc中的uboot
    发表于 11-05 14:23

    ARM最小系统板可以不用EMMC启动吗?

    `请问如附图所示的这种Cotex-A33的最小系统板可以把板载EMMC芯片换成一个SD卡座吗?个人感觉EMMC很容易被自己作坏了造成无法启动的情况,而
    发表于 03-17 22:11

    我禁用BBB的eMMCSD启动后为什么还会有eMMC的4G分区呢?

    我编辑了uEnv.txt 文件##disable_uboot_overlay_emmc=1禁用了eMMC,系统从SD启动,但是我进入系统后
    发表于 05-10 21:22

    《10.SD启动详解》精选资料分享

    《10.SD启动详解》第一部分、章节目录1.10.1.主流的外存设备介绍1.10.2.SD
    发表于 07-28 08:50

    SD与SoC的关系

    嵌入式-ARM-学习总结(9):SD一、SD1.SD模式2.SPI通信协议(SPI总线)二、SD
    发表于 12-14 08:18

    请问如何实现eMMCSD启动的切换呢?

    eMMC烧写镜像后,还想实现从SD启动,切换镜像,方便开发。制作SD
    发表于 12-30 07:42

    固件sdcard.img编译后烧写到emmcSD上系统无法启动这是为什么

    按照《Open Industrial User Guide》 Rev. 1.10, 12/2020 (OPEN-LINUX-IND-UM-1-10.pdf) 编译openil的完整固件sdcard.img后,烧写到emmcSD
    发表于 12-31 07:17

    SDEMMC启动时串口没有任何输出是什么问题

    目前手头有两块底板,一块是OK1043AX-CV1.2,一块是OK1043xA-C3V1.1。发现通过调整拨码开关,无法让C3V1.1的板子从SD或者EMMC启动,但是同样的方法在C
    发表于 01-05 06:55

    ok6818使用sd启动不了怎么解决?

    夹下的 ubootp.bin,boot.img,root.img,partmap.txt 到 SD 显示的 FAT 分区内3.选择启动选项,1,2,4 OFF 3 ON但是跟手册提供的图有所差别:手册中:ext4
    发表于 01-07 06:41

    请问如何通过eMMC启动VF2?

    我已经安装了Debian69,SD启动正常,然后我通过dd的方法拷贝镜像至eMMC,无法启动。需要修改什么设置吗?我看到文档里有个Boot
    发表于 09-12 06:32

    i.MX RT1xxx从SD/eMMC启动

    最近在恩智浦官方社区上支持了一个关于i.MX RT从SD启动的案例,这让我想起了一年前写过的一篇《i.MX RT600从SD/eMMC启动
    的头像 发表于 05-11 14:34 748次阅读
    i.MX RT1xxx从<b class='flag-5'>SD</b>/<b class='flag-5'>eMMC</b><b class='flag-5'>启动</b>

    EMMC主控固件读取及SDemmc接线

    EMMC主控固件读取及SDemmc接线
    发表于 08-10 09:46 21次下载