大家好,我是痞子衡,是正经搞技术的痞子。今天痞子衡给大家介绍的是恩智浦i.MX RT1170 uSDHC eMMC启动时间。
本篇是 i.MXRT1170 启动时间评测第五弹,前四篇分别给大家评测了 Raw NAND 启动时间(基于 MIMXRT1170-EVK_Rev.B)、Serial NOR 启动时间(基于 MIMXRT1170-EVB_Rev.A2)、1bit SPI NOR 恢复启动时间(基于 MIMXRT1170-EVK_Rev.C)、Serial NAND 启动时间(基于 MIMXRT1170-EVKB_Rev.B)。
关于 i.MXRT 系列从 SD/eMMC 启动使能方法,痞子衡写过两篇文章,分别是 《RT600从eMMC启动》、《RT1050从SD启动》,文章里的方法其实是通用整个 i.MXRT 系列的(仅一些细微差异)。最近痞子衡在支持一个 RT1170 客户,他们使用了 eMMC 启动,并且将板子寄给了痞子衡帮助调试问题,趁此机会,痞子衡就在客户板卡上详细测试一下 eMMC 启动时间:
一、准备工作
1.1 知识储备
除了依赖的底层数据传输接口外设类型不同之外,SD/eMMC 启动流程和 Serial NAND/Raw NAND 启动流程几乎是一致的,因为存储介质角度而言两者都是 NAND,这里就不过多展开了,参考痞子衡前面测评文章 1.1 节。
不过这里需要特别注意的是,前面测评的启动设备(串并行NOR/NAND)读写数据率性能接近于接口速率(当然 NAND 有额外 ECC 校验时间),但是 SD/eMMC 因为涉及坏块管理/磨损平衡处理等,设备内部处理会产生更多时间开销,所以实际数据读写率跟数据接口速率之间存在一定差异,这个差异因厂商产品里的处理算法而异,需要翻看设备芯片数据手册。
本次测试客户板卡上用了一颗来自江波龙的兼容 eMMC5.1 标准的 8GB 容量芯片 FEMDME008G-A8A39,在其数据手册上接口最高速率是 400MBps(HS400模式),但是实际数据读写率分别是 290MBps、115MBps。
eMMC 5.1 specification compatibility
- Backward compatible to eMMC 4.41/4.5/5.0
Bus mode
- Data bus width: 1 bit (default), 4 bits, 8 bits
- Data transfer rate: up to 400 MB/s (HS 400)
- MMC I/F Clock frequency: 0~ 200 MHz
1.2 时间界定
关于时间起点和终点,参考《FlexSPI NOR启动时间》 里的1.2节,虽然此次测试用得是客户板卡,但是时间起点我们只需要选好 POR_B 测量点即可。
1.3 制作应用程序
关于应用程序制作,参考《Serial NAND启动时间》 里的1.3节。其实 Non-XIP 程序制作一直有一个小限制,之前的测评文章里都没有特别强调,前段时间痞子衡终于专门写了篇文章 《Non-XIP App一般链接限制》,大家可以了解一下。
1.4 下载应用程序
应用程序的下载需借助痞子衡开发的 NXP-MCUBootUtility 工具。由于 8bit eMMC 仅 uSDHC2 支持,客户一般都将 eMMC 挂在 uSDHC2 引脚上,工具下载配置 eMMC 的时候,主要保证 instance 正确即可,至于其他速度模式方面的选择,仅跟程序下载速度有关,并不影响 eMMC 启动时间。
对 eMMC 启动时间产生影响得主要是 RT1170 芯片 fuse 里的如下配置,其中红框选项是根据硬件情况必设的,篮圈选项是用户可按自己要求选择的(这里也是下一节测试启动时间的影响因子)。紫框里决定了 BootROM 运行时的内核主频,CM7 做主核时默认是 400MHz,可高配到 700MHz,这里我们不改 BootROM 默认内核频率配置。
1.5 示波器抓取信号
一切准备就绪,可以用示波器抓 eMMC 启动时间了。这次痞子衡偷了个懒,就测量两路信号,一个通道监测主芯片 POR 信号,另一个通道监测 GPIO 信号(App 里会拉低这个 GPIO)。与以往不同的是,这次 GPIO 选得是复用 BOOT_CFG 功能的 pin,这个 pin 加了外部强上拉,下一节测试结果小节里会有额外有趣发现。
二、开始测试
在公布结果之前,痞子衡先带大家分析一下示波器抓取的启动时间波形,方便大家理解后续表格里的各项组成。POR 信号电压上升时间比较缓慢,其供电来自于 VDD_1V8,我们时间起点暂取其标准有效值 70% - 1.2V 处。
此外我们可以看到 GPIO 在 POR 拉高之前早就被拉高,说明 GPIO 上电早于 POR,这样的硬件设计是符合 i.MXRT 上电采样时序规范的,痞子衡有一篇文章 《RT离线无法启动,请先查看SRC_SBMRx寄存器》 就和这点有关。
2.1 不同App长度测试
首先做的是不同 App 类型及长度相关的测试,App 分为链接在 ITCM 和 SDRAM 两种(后者需要使能 BootROM DCD 初始化)。此外由于 SDRAM 空间大,因此测试多种 App 长度。所有的测试均在同一种 Boot Config 配置下,即痞子衡 《NAND型启动设备时可用两级设计缩短启动时间》 一文里的配置,这也是该客户使用的启动配置。
从测试结果来看,eMMC 启动时间在 1MB 以内 App 情况下相差无几,跟 App 长度不成明显正比关系。即使是 4MB 以内,也是看不出明显关系,但是以 4MB 为单位来看,倒是有一定正比关系。
App长度 | 拷贝App目标区域 | Boot Config配置 | 测量启动时间 | ||
---|---|---|---|---|---|
CFG2[2:1]-Bus Width | CFG1[5]-SDMMC Speed | CFG1[0]-Fast Boot | |||
24KB | ITCM 396MHz@64bit | 2'b01 - 8bit DDR | 1'b1 - High | 1'b0 - Regular | ~39.5ms |
240KB | ~41.5ms | ||||
24KB | SDRAM 166MHz@32bit | ~41.1ms | |||
240KB | ~46.7ms | ||||
1MB | ~53.1ms | ||||
2MB | ~63.3ms | ||||
4MB | ~87.4ms | ||||
8MB | ~133.3ms | ||||
16MB | ~225.8ms |
2.2 不同速度模式测试
因为 4MB 在 SDRAM 执行 App 有一定代表性,痞子衡就以这个为基础测试了不同的 Boot Config 配置组合,在 BOOT_CFG1[0] 为 Fast Boot 情况下普遍无法启动(可能需要更多展开配置)。在 BOOT_CFG1[0] 为 Regular Boot 情况下,High Speed 比 Normal Speed 快近一倍,8-Bit DDR 比 8-Bit SDR 也快近一倍。
App长度 | 拷贝App目标区域 | Boot Config配置 | 测量启动时间 | ||
---|---|---|---|---|---|
CFG2[2:1]-Bus Width | CFG1[5]-SDMMC Speed | CFG1[0]-Fast Boot | |||
4MB | SDRAM 166MHz@32bit | 2'b01 - 8bit SDR | 1'b0 - Normal | 1'b0 - Regular | ~219ms |
1'b1 - Fast | TBD | ||||
1'b1 - High | 1'b0 - Regular | ~130.6ms | |||
1'b1 - Fast | 无法启动,DAP不可连接 | ||||
2'b11 - 8bit DDR | 1'b0 - Normal | 1'b0 - Regular | 无法启动,DAP可连接 | ||
1'b1 - Fast | TBD | ||||
1'b1 - High | 1'b0 - Regular | ~87.4ms | |||
1'b1 - Fast | 无法启动,DAP不可连接 |
至此,恩智浦i.MX RT1170 uSDHC eMMC启动时间痞子衡便介绍完毕了,掌声在哪里~~~
欢迎订阅
文章会同时发布到我的 博客园主页、CSDN主页、知乎主页、微信公众号 平台上。
微信搜索"痞子衡嵌入式"或者扫描下面二维码,就可以在手机上第一时间看了哦。