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

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

3天内不再提示

i.MX RT1xxx从SD/eMMC启动

恩智浦MCU加油站 来源:恩智浦MCU加油站 作者:恩智浦MCU加油站 2023-05-11 14:34 次阅读

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

注:文中贴图、代码主要以i.MX RT1050为例,其余i.MX RT1xxx系列原理类似。

一、支持的SD/eMMC

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

SD v2.0 or less

eSD v2.10 rev-0.9, with or without FAST_BOOT

SDXC v3.0

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

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.MX RT1050 BootROM支持如下pinmux连接,支持从SD/eMMC卡去启动:

cacc3f0c-efc5-11ed-90ce-dac502259ad0.png

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

cb06ea3a-efc5-11ed-90ce-dac502259ad0.png  

三、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去加载启动了(在这里RTxxxx四位数和RTxxx三位数是不一样的)。
cb29c442-efc5-11ed-90ce-dac502259ad0.png  

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

cb5c1ffa-efc5-11ed-90ce-dac502259ad0.png

上表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 0x12


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

cb92e918-efc5-11ed-90ce-dac502259ad0.png  

五、进入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更快速度模式也是可以的。

cbd3a8ae-efc5-11ed-90ce-dac502259ad0.png  

七、几个注意事项

i.MX RTxxxx(四位数)与i.MX RTxxx(三位数)在uSDHC编号上不同,RTxxxx(四位数)是uSDHC1-2,而RTxxx(三位数)则是uSDHC0-1,这反映在第四节option.instance设置里。

eMMC协议是向下兼容SD协议的,因此如果使用一块MicroSD转eMMC小卡插进官方EVK板的SD卡槽做测试,那么启动模式不管是SD 1/4bit或者eMMC 4bit模式均是能正常启动eMMC程序的。

在MIMXRT1170-EVKB Rev.B板卡上,需要设置成4bit模式(BOOT_CFG2[1]=1)才能正常启动SD卡里程序。

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

审核编辑:汤梓红

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

    关注

    14

    文章

    5715

    浏览量

    100771
  • SD卡
    +关注

    关注

    2

    文章

    530

    浏览量

    63015
  • 程序
    +关注

    关注

    114

    文章

    3631

    浏览量

    79541
  • emmc
    +关注

    关注

    6

    文章

    180

    浏览量

    52017
  • microSD卡
    +关注

    关注

    0

    文章

    19

    浏览量

    9389

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

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

收藏 人收藏

    评论

    相关推荐

    i.MX RT10xx系列外部晶振相关引脚的作用

    之前写过一篇关于时钟引脚的文章 《i.MX RT1xxx系列MCU时钟相关功能引脚的作用》,里面简单提及了外部晶振相关引脚的作用,但是并没有详细展开。
    的头像 发表于 10-13 09:08 1037次阅读

    i.Mx RT平台内存建议

    哪些超总线存储器被推荐用于NXP的I.MX RT平台。CyPress的超闪存/HyrRAM MCP设备与NXP的I.MX RT系列兼容吗?应用笔记和用户体验将不胜感激。 以上来自于百
    发表于 09-05 14:33

    i.MXRT1xxx Boot的Serial Downloader模式相关资料分享

      大家好,我是痞子衡,是正经搞技术的痞子。今天痞子衡给大家介绍的是恩智浦i.MX RT1xxx系列MCU的Flashloader。  在上一篇文章 Serial Downloader模式
    发表于 01-26 08:12

    介绍的是i.MX RT1xxx系列MCU的Parallel NOR启动

      大家好,我是痞子衡,是正经搞技术的痞子。今天痞子衡给大家介绍的是恩智浦i.MX RT1xxx系列MCU的Parallel NOR启动。  上一篇讲i.MXRT1xxx
    发表于 02-22 06:31

    介绍i.MX RT1xxx系列MCU的Raw NAND启动

      大家好,我是痞子衡,是正经搞技术的痞子。今天痞子衡给大家介绍的是恩智浦i.MX RT1xxx系列MCU的Raw NAND启动。  前面铺垫了七篇启动系列文章,终于该讲具体Boot
    发表于 02-22 07:20

    i.MX RT1020到i.MX RT1010的迁移手册

    i.MX RT1020到i.MX RT1010的迁移指南
    发表于 12-12 06:25

    使用i.MX RT的FlexRAM的教程

    使用i.MX RT的FlexRAM
    发表于 12-12 07:36

    i.MX6UL到i.MX RT的迁移手册

    i.MX6UL到i.MX RT的迁移指南
    发表于 12-12 07:08

    i.MX RT1060到i.MX RT1064的迁移手册

    i.MX RT1060到i.MX RT1064的迁移指南
    发表于 12-12 07:21

    RT1xxx:eDMA读取32位但写入16是为什么?

    RT1xxx:eDMA 读取 32 位但写入 16
    发表于 04-21 08:06

    痞子衡嵌入式:恩智浦i.MX RT1xxx系列MCU启动那些事(4)- Flashloader初体验(blhost)...

      大家好,我是痞子衡,是正经搞技术的痞子。今天痞子衡给大家介绍的是恩智浦i.MX RT1xxx系列MCU的Flashloader。  在上一篇文章 Serial Downloader模式
    发表于 12-02 09:36 7次下载
    痞子衡嵌入式:恩智浦<b class='flag-5'>i.MX</b> <b class='flag-5'>RT1xxx</b>系列MCU<b class='flag-5'>启动</b>那些事(4)- Flashloader初体验(blhost)...

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

      大家好,我是痞子衡,是正经搞技术的痞子。今天痞子衡给大家介绍的是恩智浦i.MX RT1xxx系列MCU的Parallel NOR启动。  上一篇讲i.MXRT1xxx从Raw NA
    发表于 12-28 19:19 8次下载
    痞子衡嵌入式:恩智浦<b class='flag-5'>i.MX</b> <b class='flag-5'>RT1xxx</b>系列MCU<b class='flag-5'>启动</b>那些事(9)- 从Parallel NOR<b class='flag-5'>启动</b>

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

      大家好,我是痞子衡,是正经搞技术的痞子。今天痞子衡给大家介绍的是恩智浦i.MX RT1xxx系列MCU的Raw NAND启动。  前面铺垫了七篇启动系列文章,终于该讲具体Boot
    发表于 12-28 19:19 10次下载
    痞子衡嵌入式:恩智浦<b class='flag-5'>i.MX</b> <b class='flag-5'>RT1xxx</b>系列MCU<b class='flag-5'>启动</b>那些事(8)- 从Raw NAND<b class='flag-5'>启动</b>

    详解MCU的SD/eMMC启动

    关于i.MX RT启动设备,我之前写过很多篇文章,都是关于串并行 NOR/NAND Flash。相信对于 Flash 的原理和读写擦访问,玩 MCU 的朋友一定不会陌生,但是说到让 MCU 从
    的头像 发表于 05-12 15:52 5129次阅读

    利用i.MX RT1xxx系列ROM集成的DCD功能可轻松配置指定外设

    关于i.MX RT1xxx系列芯片BootROM中集成的DCD功能这个话题,早就想写了,但是一直没有动笔,毕竟这个话题比较生涩,单独讲会比较枯燥。最近在支持一个i.MX RT1170客
    的头像 发表于 04-20 15:54 705次阅读