最近在恩智浦官方社区上支持了一个关于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卡去启动:
下图是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去加载启动了(在这里RTxxxx四位数和RTxxx三位数是不一样的)。
四、下载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
// 擦除 SD 并将 image 下载进 SD blhost -u -- flash-erase-region 0x400 0x20000 0x120 blhost -u -- write-memory 0x400 bt_image.bin 0x12
设置好芯片启动模式是从SD启动之后,我们还需要最后关注一下与SD/eMMC相关的具体特性配置,主要集中在芯片内部eFuse 0x470-0x450区域里,默认全0值适用3.3V SD卡工作在1bit Normal Speed模式,有需要的话切换到4bit SDR104更快速度模式也是可以的。
七、几个注意事项
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已经正常地启动了。
审核编辑:汤梓红
全部0条评论
快来发表一下你的评论吧 !