i.MX RT1xxx从SD/eMMC启动

最近在恩智浦官方社区上支持了一个关于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
上述fill-memory命令中0xd0000001参数即是简化的4byte配置数据,这个配置数据组织详见下表:
上表4byte数据提供的配置信息主要是sd连接以及属性配置。configure-memory命令执行成功之后,随后只需要将bootable image从sd偏移0x400地址处开始下载即可,具体步骤如下:// 擦除 sd 并将 image 下载进 sdblhost -u -- flash-erase-region 0x400 0x20000 0x120blhost -u -- write-memory 0x400 bt_image.bin 0x12
当然以上所有繁杂的命令行操作都可以使用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更快速度模式也是可以的。
七、几个注意事项
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已经正常地启动了。  


OLA2032B台式逻辑分析仪的性能特点及应用
大型储能电池
怎样减少24伏直流电机的功耗
维基百科是如何定义区块链的
CBB23型金属化聚丙烯薄膜电容器
i.MX RT1xxx从SD/eMMC启动
喷气发动机推力测试工作原理
BLE蓝牙定位基站介绍
“双11”定金预售陷阱多,尾款人如何维权?
品致N系列有源差分探头有哪些
究竟什么是物联网?了解物联网必须知道什么事情
加强计算光学及光场领域技术积累,元潼技术完成数千万元首轮融资
苹果iPhone12和华为Mate40哪个值得买?
如何选择PCBA快速打样的加工厂
澜起科技DVB-C有线数字电视信道解调芯片荣获中国芯“最佳市
易失性阈值转变忆阻器:AIoT时代的新兴推动者
华为最新手环分析对比
三星首款搭载骁龙710处理器的机型或于明年1月面世
基于单片机的报警电路原理图
渤海钻探自主研制出DML钻修机监测仪并获专利证书