大家好,我是痞子衡,是正经搞技术的痞子。今天痞子衡给大家介绍的是恩智浦i.MX RT1170 1bit SPI NOR恢复启动时间

  本篇是i.MXRT1170启动时间评测第三弹了,前两篇分别给大家评测了Raw NAND启动时间(基于A0芯片的EVK)、Serial NOR启动时间(基于B0芯片和EVB),今天痞子衡拿到了B0芯片配套的EVK (Rev.C),其实i.MXRT1170系列EVK还有个区别于i.MXRT10xx系列EVK的地方就是首次放了Secondary Boot Flash(挂在LPSPI接口上),老规矩,痞子衡继续为大家测一测从LPSPI Flash的恢复启动时间(这里指在ITCM执行,暂不考虑在SDRAM执行)。

一、准备工作

1.1 知识储备

  在开始测试之前,你需要认真读一下痞子衡的旧文 《恩智浦i.MX RT1xxx系列MCU启动那些事(13)- 从Serial(1-bit SPI) EEPROM/NOR恢复启动》,对i.MXRT从1bit NOR恢复启动的原理有一个充分认识。

  无论是Raw NAND还是Serial NOR,都属于Primary Flash,它们是一级启动设备。仅当选中的一级启动设备中没有可启动的App时(比如Flash被误擦除,比如Flash信号线有干扰,比如开启了签名但验签失败等),1bit SPI NOR才会发挥作用,BootROM会从1bit SPI NOR起始地址处加载initial image数据(4KB),再根据initial image里的IVT,Boot Data获取Application起始地址以及总长度,然后再将Application全部拷贝到相应SRAM里去启动,其过程如下图所示:

1.2 时间界定

  关于时间终点,参考《FlexSPI NOR启动时间》 里的1.2节,方法保持一致。

1.3 制作应用程序

  关于应用程序制作,参考《SEMC NAND启动时间》 里的1.3节。

1.4 下载应用程序

  应用程序的下载需借助痞子衡开发的 NXP-MCUBootUtility 工具(v2.4版本及以上),EVK上的Flash型号是MX25L4006,并且连接的是主芯片的LPSPI1引脚(注意并不是任意Pinmux的LPSPI1都可以的,具体请查看芯片参考手册里System Boot章节的第一段)。

  翻看MX25L4006的数据手册,它的总容量是512KB,Page Size是256bytes,两种Sector Size(4KB/64KB),在1bit模式下最高速度可达86MHz,因此使用 NXP-MCUBootUtility 下载时做如下配置(Spi Speed最高仅能设20MHz,这主要受限于LPSPI外设):

  i.MXRT1170中关于1bit SPI NOR恢复启动的eFuse配置与之前i.MXRT10xx型号有所不同(精简了SPI Address选项),我们在下载App时会顺便烧录eFuse。

1.5 示波器抓取信号

  一切准备就绪,可以用示波器抓1bit SPI NOR启动时间了。通道一监测主芯片POR信号,通道三监测Secondary Flash片选信号(LPSPI1_PCS0),通道四监测LED GPIO信号。为了更直观地看从Primary Flash启动失败进入Secondary Flash恢复启动的过程,痞子衡特地加了通道二监测Primary Flash片选信号(FlexSPI_A_SS0)。

二、开始测试

2.1 测试结果

  在公布结果之前,痞子衡先带大家分析一下示波器抓取的启动时间波形,方便大家理解后续表格里的各项组成。

  通道一连接POR引脚,电平拉高是启动计时的开始,启动后会先经历BootROM时间(CM7内核先执行ROM代码,做一些常规系统初始化,读取用户启动配置(假设启动设备选的FlexSPI NOR),然后配置好FlexSPI模块),底下经历Primary Device时间,即先尝试读一下挂在FlexSPI接口上的Flash(先读FDCB,如果没有FDCB则启动失败),通道二(FlexSPI Flash的片选)信号有短暂的拉低,底下才经历BootFlash时间(此时开始访问挂在LPSPI接口上的Flash,从Flash里读取IVT、BootData以及搬移App,所以你会看到通道三(LPSPI Flash的片选)信号持续拉低了,搬移完成之后便跳转到App里执行),最后你会看到通道四电平拉高了(App在执行)。

  分析完了启动时间组成,让我们看结果吧。痞子衡基于App长度一共做了2个测试,结果如下表所示(注:表中结果都是在2.5M次/秒的采样率下所得):

Flash型号

Timing模式
App长度

(bytes)
App执行位置 BootROM时间 PrimaryDevice时间 BootFlash时间 总启动时间
MX25L4006

1bit, SDR, 20MHz
18066 ITCM 6.940 ms 0.916 ms 13.88 ms 21.735 ms
253586 ITCM 6.952 ms 0.920 ms 146.928 ms 154.8 ms

2.2 结果分析

  根据原理和测试结果,我们有三个结论:

  • 结论1:BootROM时间差不多是固定的,大概在6.9ms
  • 结论2:Primary Device时间需根据实际情况而定,不同的一级启动设备以及不同的非完整App都可能影响最终时间
  • 结论3:BootFlash时间跟App长度成正比,跟Flash工作模式(SPI速率)也是正比(虽然没有实测)

  至此,恩智浦i.MX RT1170 1bit SPI NOR恢复启动时间痞子衡便介绍完毕了,掌声在哪里~~~

欢迎订阅

文章会同时发布到我的 博客园主页CSDN主页知乎主页微信公众号 平台上。

微信搜索"痞子衡嵌入式"或者扫描下面二维码,就可以在手机上第一时间看了哦。

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

随机推荐

  1. shells学习

    shells 脚本 Shell是在Linux内核与用户之间的解释器程序,通常指的是bash,负责向内核翻译及传达用户/程序指令 是liunx系统中的翻译管,解释器类型: ~]#cat /etc/she ...

  2. MySQL入门(alter语法 与 外键)

    MySQL入门(三) 字段的修改.添加.与删除 修改表字段使用alter table语句,谨记! create table tf1( id int primary key auto_increment ...

  3. java 面向对象(三十一):异常(四) 自定义异常类

    如何自定义一个异常类?/* * 如何自定义异常类? * 1. 继承于现的异常结构:RuntimeException .Exception * 2. 提供全局常量:serialVersionUID * ...

  4. python 并发 ThreadPoolExecutor

    正文:Executor是一个抽象类,子类: ThreadPoolExecutor和ProcessPoolExecutor ,一个线程池,一个进程池. future对象:在未来的某一时刻完成操作的对象. ...

  5. 数据可视化之powerBI技巧(二)Power BI性能分析器,原来还有这个功能

    ​性能分析器是Power BI前几个月推出的功能,主要用于检测视觉对象和DAX的性能如何,该功能的使用比较简单,首先勾选这个功能, 然后点击开始记录并刷新视觉对象,就可以看出每个元素耗费的时间,如下图 ...

  6. 03 flask源码剖析之threading.local和高级

    03 threading.local和高级 目录 03 threading.local和高级 1.python之threading.local 2. 线程唯一标识 3. 自定义threading.lo ...

  7. 微信小程序wx.switchTab跳转到tab页面后onLoad里面的方法不执行

    相信大家在做小程序的时候启动页跳转到tab首页会用到switchTab 但是在跳转后发现页面模块不全,后面console.log()后发现是onLoad里面的方法不执行 解决这种问题的方法页有很多中, ...

  8. 图文详解在Windows系统中安装JDK

    本文以在Windows10中安装JDK8为例进行安装,其他系统和版本都是大同小异的. 下载 进入Oracle官方网站的下载页面:https://www.oracle.com/technetwork/j ...

  9. 可能这是Redis可视化工具最全的横向评测

    1 命令行 不知道大家在日常操作redis时用什么可视化工具呢? 以前总觉得没有什么太好的可视化工具,于是问了一个业内朋友.对方回:你还用可视化工具?直接命令行呀,redis提供了这么多命令,操作起来 ...

  10. 从一次故障聊聊前端 UI 自动化测试

    背景 事件的起因在于老板最近的两次"故障",一次去年的,一次最近.共同原因都是脚手架在发布平台发布打包时出错,导致线上应用白屏不可用. 最神奇的是,事后多次 Code Review ...