痞子衡嵌入式:恩智浦i.MX RT1xxx系列MCU启动那些事(10.A)- FlexSPI NAND启动时间(RT1170)
大家好,我是痞子衡,是正经搞技术的痞子。今天痞子衡给大家介绍的是恩智浦i.MX RT1170 FlexSPI NAND启动时间。
本篇是 i.MXRT1170 启动时间评测第四弹,前三篇分别给大家评测了 Raw NAND 启动时间(基于 MIMXRT1170-EVK_Rev.B)、Serial NOR 启动时间(基于 MIMXRT1170-EVB_Rev.A2)、1bit SPI NOR 恢复启动时间(基于 MIMXRT1170-EVK_Rev.C)。最近痞子衡刚写了篇 《i.MXRT从Serial NAND启动》,趁热打铁,索性在新板卡 MIMXRT1170-EVKB_Rev.B 上再测一下 Serial NAND 的启动时间(这里指在 ITCM 执行,暂不考虑在 SDRAM 执行)。
一、准备工作
1.1 知识储备
除了依赖的底层外设类型不同之外,Serial NAND 启动流程与 Raw NAND 启动流程几乎是一致的,因为存储介质角度而言两者都是 NAND。我们知道 NAND 中仅能放置 Non-XIP Application,其不支持原地执行,所以需要 BootROM 来完成 Application 拷贝工作(从 NAND 到 ITCM),为了辅助 BootROM 完成工作,我们需要在 NAND 中放一些特殊数据(即下面的 FCB, DBBT, IVT)。
BootROM 首先从 NAND 中读取 FCB(此时是利用 eFuse 0x940 和 0xC80 里的简化时序配置选项),FCB 中含有三类信息:用户设置的完整时序配置数据(可选的)、DBBT 位置,IVT 位置。BootROM 首先会检查是否存在完整时序配置数据,如果有,则使用这个数据重新配置 NAND 访问时序。然后 BootROM 会继续获取 DBBT 数据,获知当前 NAND 的坏块信息,接下来便是根据 IVT 信息获取 Application 数据完成拷贝(拷贝过程中需要避开坏块)。
1.2 时间界定
关于时间起点和终点,参考《FlexSPI NOR启动时间》 里的1.2节,方法保持一致。EVKB_Rev.B 上时间起点位置 POR 直接引到了 J92-2,无需额外飞线了,不过这个点位有很多电容,会导致电压上升时间缓慢,影响起点选择,后面会特别备注。
1.3 制作应用程序
关于应用程序制作,参考《SEMC NAND启动时间》 里的1.3节。这次测试对长度方面做一些优化,代码改动后的测试工程编出来大小是 21516 bytes,我们可以用二进制编辑器打开 .bin 文件在后面直接插入一些数据将其凑整成 24KB,按此方法可以多做几个不同长度的 image。
1.4 下载应用程序
应用程序的下载需借助痞子衡开发的 NXP-MCUBootUtility 工具(v5.2.1版本及以上),我们需要对 EVKB 板卡做一些改动,将原 U23 - NOR Flash 改为 GigaDevice GD5F1GQ5UEYIG。
翻看 GD5F1GQ5UEYIG 的数据手册,它的总容量是 1Gb,Page Size 是 2KB,最高速度可达 133MHz,因此使用 NXP-MCUBootUtility 下载时做如下配置(不同测试,我们仅需调整 Max Frequency 选项即可):
1.5 示波器抓取信号
一切准备就绪,可以用示波器抓 NAND 启动时间了。这次痞子衡偷了个懒,就测量两路信号,通道一监测主芯片 POR 信号,通道二监测 LED GPIO 信号。

二、开始测试
2.1 测试结果
在公布结果之前,痞子衡先带大家分析一下示波器抓取的启动时间波形,方便大家理解后续表格里的各项组成。POR 信号电压上升时间比较缓慢,其供电来自于 VDD_1V8,我们时间起点暂取其标准有效值 70% - 1.2V 处。

现在让我们看结果吧,痞子衡基于 Flash 速度和 App 长度组合做了很多测试,结果如下表所示(注:表中结果都是在 50M 次/秒的采样率下所得):
| Flash型号 | App长度 | Flash Timing模式 | 测量启动时间 | 修正启动时间 |
|---|---|---|---|---|
| GD5F1GQ5UEYIG | 24KB | 30MHz | 11.66 ms | 10.88 ms |
| 50MHz | 10.26 ms | 9.48 ms | ||
| 60MHz | 9.86 ms | 9.08 ms | ||
| 72MHz | 9.46 ms | 8.68 ms | ||
| 80MHz | 9.32 ms | 8.54 ms | ||
| 100MHz | 9.1 ms | 8.32 ms | ||
| 133MHz | 8.86 ms | 8.08 ms | ||
| 240KB | 30MHz | 48.06 ms | 47.28 ms | |
| 50MHz | 34.66 ms | 33.88 ms | ||
| 60MHz | 29.46 ms | 28.68 ms | ||
| 72MHz | 26.66 ms | 25.88 ms | ||
| 80MHz | 24.26 ms | 23.48 ms | ||
| 100MHz | 22.46 ms | 21.68 ms | ||
| 133MHz | 21.76 ms | 20.98 ms |
2.2 结果修正
启动时间包含 BootROM 和 BootFlash 时间,因为这次测试痞子衡没有拉出 NAND CS# 信号,所以无法直接测量出 BootROM 时间,但是可以根据结果推算,选取 24KB 和 240KB 在 30MHz 下测试的两组结果:
BootROM_time + 24KB_60MHz_BootFlash_time = 9.86ms
BootROM_time + 240KB_60MHz_BootFlash_time = 29.46ms
24KB_60MHz_BootFlash_time * 10 = 240KB_60MHz_BootFlash_time(假定)
得出 BootROM_time = 7.68ms
前几篇测试痞子衡得到的 BootROM 时间都是 6.9ms,看来时间起点 POR 按 70% VDD_1V8 的选择偏早,应该要往后再移一些,如果修正结果的话,那上表里的所有结果全部要再减去 (7.68-6.9)ms 才是更精确的启动时间结果。
至此,恩智浦 i.MX RT1170 FlexSPI NAND 启动时间痞子衡便介绍完毕了,掌声在哪里~~~
欢迎订阅
文章会同时发布到我的 博客园主页、CSDN主页、知乎主页、微信公众号 平台上。
微信搜索"痞子衡嵌入式"或者扫描下面二维码,就可以在手机上第一时间看了哦。

痞子衡嵌入式:恩智浦i.MX RT1xxx系列MCU启动那些事(10.A)- FlexSPI NAND启动时间(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 ...
随机推荐
- 用Aspose-Java免费实现 PDF、Word、Excel、Word互相转换并将转换过得文件上传OSS,返回转换后的文件路径
嘿嘿嘿.嘿嘿,俺又回来了! github代码地址 https://github.com/Tom-shushu/work-study 接口文档有道云 https://note.youdao.com/s/ ...
- LeetCode 654:最大二叉树
先立个flag吧,坚持每日刷题的小目标,希望自己能坚持下来,如果有需要一起打卡的uu,可以一起监督哈,在菜鸡的路上慢慢变好 题目:最大二叉树 给定一个不重复的整数数组 nums . 最大二叉树 可以用 ...
- ersync 实时同步
ersync 实时同步 目录 ersync 实时同步 实时同步概述 结合sersync+rsync实时同步实战 环境准备 部署sersync(客户端) 实时同步概述 什么是实时同步 实时同步是一种只要 ...
- 2023-04-25:给定两个长度为N的数组,a[]和b[] 也就是对于每个位置i来说,有a[i]和b[i]两个属性 i a[i] b[i] j a[j] b[j] 现在想为了i,选一个最
2023-04-25:给定两个长度为N的数组,a[]和b[] 也就是对于每个位置i来说,有a[i]和b[i]两个属性 i a[i] b[i] j a[j] b[j] 现在想为了i,选一个最好的j位置, ...
- 2021-12-16:给定两个数a和b, 第1轮,把1选择给a或者b, 第2轮,把2选择给a或者b, ... 第i轮,把i选择给a或者b。 想让a和b的值一样大,请问至少需要多少轮? 来自字节跳动。
2021-12-16:给定两个数a和b, 第1轮,把1选择给a或者b, 第2轮,把2选择给a或者b, - 第i轮,把i选择给a或者b. 想让a和b的值一样大,请问至少需要多少轮? 来自字节跳动. 答案 ...
- 2021-08-20:打砖块。有一个 m x n 的二元网格,其中 1 表示砖块,0 表示空白。砖块 稳定(不会掉落)的前提是:1.一块砖直接连接到网格的顶部,或者,2.至少有一块相邻(4 个方向之一
2021-08-20:打砖块.有一个 m x n 的二元网格,其中 1 表示砖块,0 表示空白.砖块 稳定(不会掉落)的前提是:1.一块砖直接连接到网格的顶部,或者,2.至少有一块相邻(4 个方向之一 ...
- 2021-09-05:单词搜索 II。给定一个 m x n 二维字符网格 board 和一个单词(字符串)列表 words,找出所有同时在二维网格和字典中出现的单词。单词必须按照字母顺序,通过 相邻的
2021-09-05:单词搜索 II.给定一个 m x n 二维字符网格 board 和一个单词(字符串)列表 words,找出所有同时在二维网格和字典中出现的单词.单词必须按照字母顺序,通过 相邻的 ...
- vb.net 数据库连接字符串
'设置数据库连接字符串 Dim connString As String = "Data Source=.\SQLEXPRESS;Initial Catalog=YourDatabaseNa ...
- distinct()去重
distinct()去重 Student.objects.all().distinct()
- HCIP- ICT实战进阶ex1-MPLS
HCIP- ICT实战进阶ex1-MPLS 0 前言 由于BGP设备之间是通过TCP协议实现的跨设备互联, 所以在两台BGP设备之间的其他设备是没有配置BGP协议的, 因此中间的其他设备很可能无法学习 ...