大家好,我是痞子衡,是正经搞技术的痞子。今天痞子衡给大家介绍的是恩智浦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)的更多相关文章

  1. 痞子衡嵌入式:恩智浦i.MX RT1xxx系列MCU启动那些事(13.A)- LPSPI NOR启动时间(RT1170)

    大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是恩智浦i.MX RT1170 1bit SPI NOR恢复启动时间. 本篇是i.MXRT1170启动时间评测第三弹了,前两篇分别给大家评 ...

  2. 痞子衡嵌入式:恩智浦i.MX RT1xxx系列MCU启动那些事(11.3)- FlexSPI NOR连接方式大全(RT1010)

    大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是恩智浦i.MX RT1010的FlexSPI NOR启动的连接方式. 在写完 <FlexSPI NOR启动连接方式(RT1015/ ...

  3. 痞子衡嵌入式:恩智浦i.MX RT1xxx系列MCU启动那些事(11.0)- FlexSPI NOR启动时间(RT1170)

    大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是恩智浦i.MX RT1170 FlexSPI NOR启动时间. 痞子衡刚刚拿到i.MXRT1170 B0版本的芯片,迫不及待地在上面跑了 ...

  4. 痞子衡嵌入式:恩智浦i.MX RT1xxx系列MCU启动那些事(11.B)- FlexSPI NOR连接方式大全(RT1160/1170)

    大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是恩智浦i.MXRT1160/1170两款MCU的FlexSPI NOR启动的连接方式. 这个 i.MXRT FlexSPI NOR 启动 ...

  5. 痞子衡嵌入式:飞思卡尔Kinetis系列MCU启动那些事(1)- KBOOT架构

    大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是飞思卡尔Kinetis系列MCU的KBOOT架构. Bootloader是嵌入式MCU开发里很常见的一种专用的应用程序,在一个没有Boo ...

  6. 痞子衡嵌入式:飞思卡尔Kinetis系列MCU启动那些事(9)- KBOOT特性(IntegrityCheck)

    大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是飞思卡尔Kinetis系列MCU的KBOOT之完整性检测(Integrity Check)特性. Application完整性检测是非常 ...

  7. 痞子衡嵌入式:飞思卡尔Kinetis系列MCU启动那些事(2)- KBOOT形态(ROM/Bootloader/Flashloader)

    大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是飞思卡尔Kinetis系列MCU的KBOOT形态. 痞子衡在前一篇文章里简介了 KBOOT架构,我们知道KBOOT是一个完善的Bootl ...

  8. 痞子衡嵌入式:飞思卡尔Kinetis系列MCU启动那些事(3)- KBOOT配置(FOPT/BOOT Pin/BCA)

    大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是飞思卡尔Kinetis系列MCU的KBOOT配置. KBOOT是支持配置功能的,配置功能可分为两方面:一.芯片系统的启动配置:二.KBO ...

  9. 痞子衡嵌入式:飞思卡尔Kinetis系列MCU启动那些事(11)- KBOOT特性(ROM API)

    大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是飞思卡尔Kinetis系列MCU的KBOOT之ROM API特性. KBOOT的ROM API特性主要存在于ROM Bootloader ...

  10. 痞子衡嵌入式:飞思卡尔Kinetis系列MCU启动那些事(10)- KBOOT特性(可靠升级)

    大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是飞思卡尔Kinetis系列MCU的KBOOT之可靠升级(Reliable Update)特性. 所谓可靠升级机制,即在更新Applica ...

随机推荐

  1. 笔记:C++学习之旅---面向对象程序设计2

    笔记:C++学习之旅---面向对象程序设计2 面向对象程序设计基于三个基本概念:数据抽象.继承和动态绑定. 继承和动态绑定对程序的编写有两方面的影响:一是我们可以更容易的定义与其他类相似但不完全相同的 ...

  2. 深入理解 slab cache 内存分配全链路实现

    本文源码部分基于内核 5.4 版本讨论 在经过上篇文章 <从内核源码看 slab 内存池的创建初始化流程> 的介绍之后,我们最终得到下面这幅 slab cache 的完整架构图: 本文笔者 ...

  3. 2023-01-02:某天,小美在玩一款游戏,游戏开始时,有n台机器, 每台机器都有一个能量水平,分别为a1、a2、…、an, 小美每次操作可以选其中的一台机器,假设选的是第i台, 那小美可以将其变成

    2023-01-02:某天,小美在玩一款游戏,游戏开始时,有n台机器, 每台机器都有一个能量水平,分别为a1.a2.-.an, 小美每次操作可以选其中的一台机器,假设选的是第i台, 那小美可以将其变成 ...

  4. 2022-09-23:整数数组 stations 表示 水平数轴 上各个加油站的位置。给你一个整数 k 。 请你在数轴上增设 k 个加油站, 新增加油站可以位于 水平数轴 上的任意位置,而不必放在整数

    2022-09-23:整数数组 stations 表示 水平数轴 上各个加油站的位置.给你一个整数 k . 请你在数轴上增设 k 个加油站, 新增加油站可以位于 水平数轴 上的任意位置,而不必放在整数 ...

  5. 2022-07-10:以下go语言代码输出什么?A:A,B;B:A,C:A,fatal error;D:fatal error... func main() { var m sync.Mute

    2022-07-10:以下go语言代码输出什么?A:A,B:B:A,C:A,fatal error:D:fatal error- func main() { var m sync.Mutex fmt. ...

  6. 2022-06-15:薯队长最近在参加了一个活动,主办方提供了N个礼物以供挑选, 每个礼物有一个价值,范围在0 ~ 10^9之间, 薯队长可以从中挑选k个礼物。 返回:其中价值最接近的两件礼物之间相差

    2022-06-15:薯队长最近在参加了一个活动,主办方提供了N个礼物以供挑选, 每个礼物有一个价值,范围在0 ~ 10^9之间, 薯队长可以从中挑选k个礼物. 返回:其中价值最接近的两件礼物之间相差 ...

  7. 在 ASP.NET Core Web API 中处理 Patch 请求

    一.概述 PUT 和 PATCH 方法用于更新现有资源. 它们之间的区别是,PUT 会替换整个资源,而 PATCH 仅指定更改. 在 ASP.NET Core Web API 中,由于 C# 是一种静 ...

  8. Python获取当前时间、获取当月第一天、最后一天日期等方法

    ```python先导入包: import calendarimport datetimefrom datetime import timedelta获取今天日期: #返回datetime格式:eg: ...

  9. Java网络编程----通过实现简易聊天工具来聊聊BIO

    IO模型即输入输出模型,我们今天主要来聊的是java网络编程中的IO模型---BIO模型.BIO即阻塞式IO,Blocking IOblocking [ˈblɒkɪŋ] v. 堵塞; 阻塞; 堵住(某 ...

  10. vue自定义组件——search-box

    pre { overflow-y: auto; max-height: 300px } github地址: https://github.com/lxmghct/my-vue-components 组 ...