痞子衡嵌入式:恩智浦i.MX RT1xxx系列MCU启动那些事(13.A)- LPSPI NOR启动时间(RT1170)
大家好,我是痞子衡,是正经搞技术的痞子。今天痞子衡给大家介绍的是恩智浦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)的更多相关文章
- 痞子衡嵌入式:恩智浦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 ...
随机推荐
- shells学习
shells 脚本 Shell是在Linux内核与用户之间的解释器程序,通常指的是bash,负责向内核翻译及传达用户/程序指令 是liunx系统中的翻译管,解释器类型: ~]#cat /etc/she ...
- MySQL入门(alter语法 与 外键)
MySQL入门(三) 字段的修改.添加.与删除 修改表字段使用alter table语句,谨记! create table tf1( id int primary key auto_increment ...
- java 面向对象(三十一):异常(四) 自定义异常类
如何自定义一个异常类?/* * 如何自定义异常类? * 1. 继承于现的异常结构:RuntimeException .Exception * 2. 提供全局常量:serialVersionUID * ...
- python 并发 ThreadPoolExecutor
正文:Executor是一个抽象类,子类: ThreadPoolExecutor和ProcessPoolExecutor ,一个线程池,一个进程池. future对象:在未来的某一时刻完成操作的对象. ...
- 数据可视化之powerBI技巧(二)Power BI性能分析器,原来还有这个功能
性能分析器是Power BI前几个月推出的功能,主要用于检测视觉对象和DAX的性能如何,该功能的使用比较简单,首先勾选这个功能, 然后点击开始记录并刷新视觉对象,就可以看出每个元素耗费的时间,如下图 ...
- 03 flask源码剖析之threading.local和高级
03 threading.local和高级 目录 03 threading.local和高级 1.python之threading.local 2. 线程唯一标识 3. 自定义threading.lo ...
- 微信小程序wx.switchTab跳转到tab页面后onLoad里面的方法不执行
相信大家在做小程序的时候启动页跳转到tab首页会用到switchTab 但是在跳转后发现页面模块不全,后面console.log()后发现是onLoad里面的方法不执行 解决这种问题的方法页有很多中, ...
- 图文详解在Windows系统中安装JDK
本文以在Windows10中安装JDK8为例进行安装,其他系统和版本都是大同小异的. 下载 进入Oracle官方网站的下载页面:https://www.oracle.com/technetwork/j ...
- 可能这是Redis可视化工具最全的横向评测
1 命令行 不知道大家在日常操作redis时用什么可视化工具呢? 以前总觉得没有什么太好的可视化工具,于是问了一个业内朋友.对方回:你还用可视化工具?直接命令行呀,redis提供了这么多命令,操作起来 ...
- 从一次故障聊聊前端 UI 自动化测试
背景 事件的起因在于老板最近的两次"故障",一次去年的,一次最近.共同原因都是脚手架在发布平台发布打包时出错,导致线上应用白屏不可用. 最神奇的是,事后多次 Code Review ...