痞子衡嵌入式:恩智浦i.MX RT1xxx系列MCU启动那些事(12)- 从SD/eMMC启动

科技资讯 投稿 6700 0 评论

痞子衡嵌入式:恩智浦i.MX RT1xxx系列MCU启动那些事(12)- 从SD/eMMC启动


恩智浦i.MXRT1xxx系列MCU的SD/eMMC卡启动。

    Note:文中贴图、代码主要以 i.MXRT1050 为例,其余 i.MXRT1xxx 系列原理类似。

一、支持的SD/eMMC

i.MXRT 四位数和 i.MXRT 三位数用于访问 SD/MMC 卡的外设是同一个即 uSDHC,外设本身能支持到 SD3.0。但是芯片 BootROM 里并不一定完全按 uSDHC 全功能来做实现,i.MXRT1050 BootROM 主要实现了以下类型的 SD 卡启动支持:

• SDv2.0 or less
• eSDv2.10 rev-0.9, with or without FAST_BOOT
• SDXCv3.0

作为对比,i.MXRT600 BootROM 对于 SD 卡启动支持与 i.MXRT1050 则稍有不同:

• SD Version 3.0 or earlier version
• SD: 1-bit/4-bit; SDR12, SDR25, SDR50 and SDR104.

全系列 MIMXRT10xx-EVK 上均配置了 MicroSD 卡槽,均连接在了第一个 uSDHC 端口上,所以我们测试 SD 启动还是非常方便的。

二、SD/eMMC硬件连接

三、SD/eMMC加载启动过程

对于 SD 卡设备,起始偏移一般要存放系统 main boot record (MBR,因此需要让开,BootROM 会从固定偏移 0x400 地址处读取 IVT 启动头,有了 IVT 后面就能找到 Application 去加载启动了(在这里 RT 四位数和 RT 三位数是不一样的)。

四、下载Application进SD/eMMC

// 在 SRAM 里临时存储 SD 配置数据
blhost -u -- fill-memory 0x20202000 0x4 0xD0000001 // 1bit, Normal Speed,uSDHC1

// 使用 SD 配置数据去配置 uSDHC 接口
blhost -u -- configure-memory 0x120 0x20202000

上述 fill-memory 命令中 0xD0000001 参数即是简化的 4byte 配置数据,这个配置数据组织详见下表:

// 擦除 SD 并将 image 下载进 SD
blhost -u -- flash-erase-region 0x400 0x20000 0x120
blhost -u -- write-memory 0x400 bt_image.bin 0x120

当然以上所有繁杂的命令行操作都可以使用 MCUBootUtility 工具(v3.5及以上)来一键完成:

五、进入SD/eMMC启动模式

先确定 BOOT_MODE[1:0]=2'b10,即芯片处于 Internal Boot 模式,再来选择 Boot Device,Boot Device 由 BOOT_CFG1[7:4] 这四个 pin 的输入状态决定,其中 SD 启动模式为 4'b01xx。

六、配置eFuse启动SD/eMMC

七、几个注意事项

    RT 四位数与 RT 三位数在 uSDHC 编号上不同,RT 四位数是 uSDHC1-2, 而 RT 三位数则是 uSDHC0-1,这反映在第四节 option.instance 设置里。
  1. eMMC 协议是向下兼容 SD 协议的,因此如果使用一块 MicroSD 转 eMMC 小卡插进官方 EVK 板的 SD 卡槽做测试,那么启动模式不管是 SD 1/4bit 或者 eMMC 4bit 模式均是能正常启动 eMMC 程序的。
  2. 在 MIMXRT1170-EVKB Rev.B 板卡上,需要设置成 4bit 模式(BOOT_CFG2[1]=1)才能正常启动 SD 卡里程序。

至此,恩智浦i.MXRT1xxx系列MCU的SD/eMMC卡启动痞子衡便介绍完毕了,掌声在哪里~~~

欢迎订阅

微信搜索"痞子衡嵌入式"或者扫描下面二维码,就可以在手机上第一时间看了哦。

编程笔记 » 痞子衡嵌入式:恩智浦i.MX RT1xxx系列MCU启动那些事(12)- 从SD/eMMC启动

赞同 (33) or 分享 (0)
游客 发表我的评论   换个身份
取消评论

表情
(0)个小伙伴在吐槽