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

痞子,嵌入式,mx,rt1xxx,系列,mcu,启动,那些,sd,emmc · 浏览次数 : 264

小编点评

**恩智浦i.MXRT1xxx系列 MCU的SD/eMMC卡启动指南** **一、支持的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 **二、SD/eMMC硬件连接** 除了 i.MXRT1010/1015 不包含 uSDHC 外设之外,其余 i.MXRT1xxx 内部都有 2 个 uSDHC 模块。 **三、SD/eMMC加载启动过程** * 我们知道 SD/eMMC 设备中仅能放置 Non-XIP Application(链接到内部 SRAM 或者 外部 RAM 空间),其启动加载流程跟 《从 Serial(1-bit SPI) NOR/EEPROM恢复启动》 加载流程差不多(参考文章第 3 小节)。 **四、下载Application进SD/eMMC** * 我们只需要提供简化的 4byte 配置数据就可以完成 SD 设备的配置,例如 SD 连接以及属性配置。 **五、进入SD/eMMC启动模式** * Application 已经被成功下载进 SD 卡之后,此时我们便可以开始设置芯片从 SD 启动。 **六、配置eFuse启动SD/eMMC** * 设置好芯片启动模式是从 SD 启动之后,我们还需要最后关注一下与 SD/eMMC 相关的具体特性配置,主要集中在芯片内部 eFuse 0x470 - 0x450 区域里。 **七、几个注意事项** * RT 四位数与 RT 三位数在 uSDHC 编号上不同,RT 四位数是 uSDHC1-2,而 RT 三位数则是 uSDHC0-1。这反映在第四节 option.instance 设置里。 * eMMC 协议是向下兼容 SD 协议的,因此如果使用一块 MicroSD 转 eMMC 小卡插进官方 EVK 板的 SD 卡槽做测试,那么启动模式不管是 SD 1/4bit 或者 eMMC 4bit 模式均是能正常启动 eMMC 程序的。

正文


  大家好,我是痞子衡,是正经搞技术的痞子。今天痞子衡给大家介绍的是恩智浦i.MXRT1xxx系列MCU的SD/eMMC卡启动

  最近在恩智浦官方社区上支持了一个关于 i.MXRT 从 SD 卡启动的案例,这让痞子衡想起了一年前写过的一篇《i.MXRT600从SD/eMMC启动》,那一篇重点介绍了基于 eMMC 设备制作程序、下载程序、启动程序的方法。虽然 SD 和 eMMC 在启动流程上差别不大,但是细节上还是有一些不同的。借此机会,今天痞子衡再认真捋一下 SD 卡上制作、下载、启动程序的方法:

  • 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硬件连接

  除了 i.MXRT1010/1015 不包含 uSDHC 外设之外,其余 i.MXRT1xxx 内部都有 2 个 uSDHC 模块(注:uSDHC2 可能在一些小封装上没有引出),i.MXRT1050 BootROM 支持如下 pinmux 来连接 SD/eMMC 卡去启动:

  如下是 IMXRT1050-EVKB_Rev.A 板上 SD 卡槽连接设计,这个卡槽除了用来测试 SD 卡读写启动之外,也可以通过连接 MicroSD 转 eMMC 适配器去测试启动 eMMC(需工作在 1/4bit bus width mode):

三、SD/eMMC加载启动过程

  我们知道 SD/eMMC 设备中仅能放置 Non-XIP Application(链接到内部 SRAM 或者 外部 RAM 空间),其启动加载流程跟 《从 Serial(1-bit SPI) NOR/EEPROM恢复启动》 加载流程差不多(参考文章第 3 小节)。

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

四、下载Application进SD/eMMC

  现在假定你已经制作好一个 Bootable image 并且使用 blhost 工具与 Flashloader 建立了基本通信,正要开始将 Bootable image 下载进 SD 设备。此时我们只需要提供简化的 4byte 配置数据就可以完成 SD 设备的配置,下面是一种 Application 下载更新示例:

// 在 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 配置数据,这个配置数据组织详见下表:

  上表 4byte 数据提供的配置信息主要是 SD 连接以及属性配置。configure-memory 命令执行成功之后,底下只需要将 Bootable image 从 SD 偏移 0x400 地址处开始下载即可,具体步骤如下:

// 擦除 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启动模式

  Application 已经被成功下载进 SD 卡之后,此时我们便可以开始设置芯片从 SD 启动。

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

六、配置eFuse启动SD/eMMC

  设置好芯片启动模式是从 SD 启动之后,我们还需要最后关注一下与 SD/eMMC 相关的具体特性配置,主要集中在芯片内部 eFuse 0x470 - 0x450 区域里,默认全 0 值适用 3.3V SD 卡工作在 1bit Normal Speed 模式,有需要的话切换到 4bit SDR104 更快速度模式也是可以的。

七、几个注意事项

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

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

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

欢迎订阅

文章会同时发布到我的 博客园主页CSDN主页知乎主页微信公众号 平台上。

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

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

痞子衡嵌入式:恩智浦i.MX RT1xxx系列MCU启动那些事(12.A)- uSDHC eMMC启动时间(RT1170)

大家好,我是痞子衡,是正经搞技术的痞子。今天痞子衡给大家介绍的是恩智浦i.MX RT1170 uSDHC eMMC启动时间。 本篇是 i.MXRT1170 启动时间评测第五弹,前四篇分别给大家评测了 Raw NAND 启动时间(基于 MIMXRT1170-EVK_Rev.B)、Serial NOR

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

大家好,我是痞子衡,是正经搞技术的痞子。今天痞子衡给大家介绍的是恩智浦i.MXRT1xxx系列MCU的SD/eMMC卡启动。 最近在恩智浦官方社区上支持了一个关于 i.MXRT 从 SD 卡启动的案例,这让痞子衡想起了一年前写过的一篇《i.MXRT600从SD/eMMC启动》,那一篇重点介绍了基于

痞子衡嵌入式:恩智浦i.MX RT1xxx系列MCU启动那些事(10)- 从Serial NAND启动

大家好,我是痞子衡,是正经搞技术的痞子。今天痞子衡给大家介绍的是**恩智浦i.MXRT1xxx系列MCU的Serial NAND启动**。 最近越来越多的客户在咨询 i.MXRT1xxx 从 Serial NAND 启动的事情,让这个本来比较冷门的启动设备突然火热起来。据痞子衡的了解,其实客户主要目

痞子衡嵌入式:恩智浦i.MX RT1xxx系列MCU启动那些事(10.A)- FlexSPI NAND启动时间(RT1170)

大家好,我是痞子衡,是正经搞技术的痞子。今天痞子衡给大家介绍的是**恩智浦i.MX RT1170 FlexSPI NAND启动时间**。 本篇是 i.MXRT1170 启动时间评测第四弹,前三篇分别给大家评测了 [Raw NAND 启动时间](https://www.cnblogs.com/henj

痞子衡嵌入式:对比恩智浦全系列MCU(包含Kinetis/LPC/i.MXRT/MCX)的GPIO电平中断设计差异

大家好,我是痞子衡,是正经搞技术的痞子。今天痞子衡给大家介绍的是恩智浦全系列MCU(包含Kinetis, LPC, i.MXRT, MCX)的GPIO电平中断设计差异。 在痞子衡旧文 《以i.MXRT1xxx的GPIO模块为例谈谈中断处理函数(IRQHandler)的标准流程》里,痞子衡主要介绍得是

痞子衡嵌入式:浅聊恩智浦i.MXRT官方SDK里关于串行Flash相关的驱动与例程资源(上篇)

大家好,我是痞子衡,是正经搞技术的痞子。今天痞子衡给大家介绍的是恩智浦i.MXRT官方SDK里关于串行Flash相关的驱动与例程资源。 经常有同事以及 i.MXRT 客户咨询痞子衡,咱们恩智浦官方 SDK 里有哪些串行 Flash 相关的示例,每一次痞子衡都是按照询问需求将 SDK 里相应资源路径发

痞子衡嵌入式:MCUBootUtility v5.0发布,初步支持i.MXRT1180

-- 痞子衡维护的NXP-MCUBootUtility工具距离上一个大版本(v4.0.0)发布过去4个多月了,期间痞子衡也做过两个小版本更新,但不足以单独介绍。这一次痞子衡为大家带来了全新大版本v5.0.0,这次更新主要是想和大家特别聊聊恩智浦新一代 i.MXRT 旗舰 RT1180。 ### 一、

痞子衡嵌入式:恩智浦经典LPC系列MCU内部Flash IAP驱动入门

大家好,我是痞子衡,是正经搞技术的痞子。今天痞子衡给大家介绍的是恩智浦经典LPC系列MCU内部Flash IAP驱动。 LPC 系列 MCU 是恩智浦公司于 2003 年开始推出的非常具有代表性的产品,距今已经有近 20 年的生命。按时间线演进来说,其主要分为三代: - 元老:基于 ARM7/9 内

痞子衡嵌入式:AppCodeHub - 一站网罗恩智浦MCU应用程序

近日,恩智浦官方隆重上线了应用程序代码中心(Application Code Hub,简称 ACH),这是恩智浦 MCUXpresso 软件生态的一个重要组成部分。痞子衡之所以要如此激动地告诉大家这个好消息,是因为 ACH 并不是又一个恩智浦官方 github project site 那么简单而已

痞子衡嵌入式:我为2021 TencentOS Tiny AIoT应用创新大赛做了场直播培训

TencentOS Tiny AIoT 应用创新大赛是腾讯 TencentOS 团队联合恩智浦半导体、安谋科技(Arm China)发起的线上开发者活动,主要面向中小企业嵌入式工程师、广大嵌入式开发者、物联网爱好者、创客团队等,期待广大开发者能参与到国内开源项目中,通过开源协同,基于 Tencent