痞子衡嵌入式:恩智浦i.MX RT1xxx系列MCU启动那些事(12.A)- uSDHC eMMC启动时间(RT1170)
大家好,我是痞子衡,是正经搞技术的痞子。今天痞子衡给大家介绍的是恩智浦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主页、知乎主页、微信公众号 平台上。
微信搜索"痞子衡嵌入式"或者扫描下面二维码,就可以在手机上第一时间看了哦。

痞子衡嵌入式:恩智浦i.MX RT1xxx系列MCU启动那些事(12.A)- uSDHC eMMC启动时间(RT1170)的更多相关文章
- 痞子衡嵌入式:恩智浦i.MX RT1xxx系列MCU启动那些事(13.A)- LPSPI NOR启动时间(RT1170)
大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是恩智浦i.MX RT1170 1bit SPI NOR恢复启动时间. 本篇是i.MXRT1170启动时间评测第三弹了,前两篇分别给大家评 ...
- 痞子衡嵌入式:恩智浦i.MX RT1xxx系列MCU启动那些事(11.3)- FlexSPI NOR连接方式大全(RT1010)
大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是恩智浦i.MX RT1010的FlexSPI NOR启动的连接方式. 在写完 <FlexSPI NOR启动连接方式(RT1015/ ...
- 痞子衡嵌入式:恩智浦i.MX RT1xxx系列MCU启动那些事(11.0)- FlexSPI NOR启动时间(RT1170)
大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是恩智浦i.MX RT1170 FlexSPI NOR启动时间. 痞子衡刚刚拿到i.MXRT1170 B0版本的芯片,迫不及待地在上面跑了 ...
- 痞子衡嵌入式:恩智浦i.MX RT1xxx系列MCU启动那些事(11.B)- FlexSPI NOR连接方式大全(RT1160/1170)
大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是恩智浦i.MXRT1160/1170两款MCU的FlexSPI NOR启动的连接方式. 这个 i.MXRT FlexSPI NOR 启动 ...
- 痞子衡嵌入式:飞思卡尔Kinetis系列MCU启动那些事(1)- KBOOT架构
大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是飞思卡尔Kinetis系列MCU的KBOOT架构. Bootloader是嵌入式MCU开发里很常见的一种专用的应用程序,在一个没有Boo ...
- 痞子衡嵌入式:飞思卡尔Kinetis系列MCU启动那些事(9)- KBOOT特性(IntegrityCheck)
大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是飞思卡尔Kinetis系列MCU的KBOOT之完整性检测(Integrity Check)特性. Application完整性检测是非常 ...
- 痞子衡嵌入式:飞思卡尔Kinetis系列MCU启动那些事(2)- KBOOT形态(ROM/Bootloader/Flashloader)
大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是飞思卡尔Kinetis系列MCU的KBOOT形态. 痞子衡在前一篇文章里简介了 KBOOT架构,我们知道KBOOT是一个完善的Bootl ...
- 痞子衡嵌入式:飞思卡尔Kinetis系列MCU启动那些事(3)- KBOOT配置(FOPT/BOOT Pin/BCA)
大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是飞思卡尔Kinetis系列MCU的KBOOT配置. KBOOT是支持配置功能的,配置功能可分为两方面:一.芯片系统的启动配置:二.KBO ...
- 痞子衡嵌入式:飞思卡尔Kinetis系列MCU启动那些事(11)- KBOOT特性(ROM API)
大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是飞思卡尔Kinetis系列MCU的KBOOT之ROM API特性. KBOOT的ROM API特性主要存在于ROM Bootloader ...
- 痞子衡嵌入式:飞思卡尔Kinetis系列MCU启动那些事(10)- KBOOT特性(可靠升级)
大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是飞思卡尔Kinetis系列MCU的KBOOT之可靠升级(Reliable Update)特性. 所谓可靠升级机制,即在更新Applica ...
随机推荐
- #分块,可撤销并查集#洛谷 5443 [APIO2019]桥梁
题目 分析 最直接的做法就是在线一边修改边权,询问直接全部重排, 然后用可撤销并查集维护连通块大小,这样时间复杂度为 \(O(qm)\) 同样尽量让大部分的边不需要修改边权,那么每 \(B\) 个操作 ...
- 草之王qsnctfwp
文件内容(举例): 林间小路旁有一条小溪 草之王许下三个诺言 无人知晓神诏背后的真相 草之王许下三个诺言 === 林间小路旁有一条小溪 草之王许下三个诺言 林间小路旁有一条小溪 无人知晓神诏背后的真相 ...
- sql 语句系列(分割ip)[八百章之第十四章]
前言 单独列出的章节.因为用处比较多. mysql select SUBSTRING_INDEX(SUBSTRING_INDEX("192.168.1.1",".&quo ...
- threading的定时器模块,python,每间隔一段时间执行一次任务
工作中常有一些定时任务要处理,比如使用百度的接口,它的access_token是一个更新一次的,每次使用时总是请求会很慢,所以我们把它保存起来,用定时器模块,定时在过期之前请求一次,或者定时数据同步, ...
- 力扣19(java&python)-删除链表的倒数第 N 个结点(中等)
题目: 给你一个链表,删除链表的倒数第 n 个结点,并且返回链表的头结点. 示例 1: 输入:head = [1,2,3,4,5], n = 2 输出:[1,2,3,5] 示例2: 输入:head = ...
- 力扣341(java)-扁平化嵌套列表迭代器(中等)
题目: 给你一个嵌套的整数列表 nestedList .每个元素要么是一个整数,要么是一个列表:该列表的元素也可能是整数或者是其他列表.请你实现一个迭代器将其扁平化,使之能够遍历这个列表中的所有整数. ...
- 第五章:SQL高级处理
第五章:SQL高级处理 5.1 窗口函数 5.1.1 窗口函数概念及基本的使用方法 窗口函数也称为OLAP函数.OLAP 是 OnLine AnalyticalProcessing 的简称,意思是对数 ...
- portainer安装,配置,使用
Portainer安装 Portainer是Docker容器管理可视化界面,主要是可以通过可视化界面创建,管理Dockert容器,并且支持多个节点管理(免费版支持五个节点). Portainer官网地 ...
- 首次公开!阿里云开源PolarDB总体架构和企业级特性
简介:在3月2日的阿里云开源 PolarDB 企业级架构发布会上,阿里云 PolarDB 内核技术专家北侠带来了主题为<PolarDB 总体架构设计和企业级特性>的精彩演讲. 在3月2日 ...
- 成中集团线下IDC迁移上云
阿里云根据成中集团业务场景入手,提供了上云方案和迁移建议,利用这套架构,保障了公司数据的安全性并且满足了公司对于备份机制的建立的基本诉求,并且降低了业务出现中断的风险. 公司介绍 成中简介: 我们公司 ...