痞子衡嵌入式:恩智浦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 ...
随机推荐
- python 读取指定文件夹中的指定文件类型的文件名
import numpy as np import os path = 'F:\\wenjian'#指定文件所在路径 filetype ='.csv'#指定文件类型 def get_filename( ...
- 数据可视化之分析篇(七)Power BI数据分析应用:水平分析法
https://zhuanlan.zhihu.com/p/103264851 首先,以财务报表分析为例,介绍通用的分析方法论,整体架构如下图所示: (点击查看大图) 接下来我会围绕这五种不同的方法论, ...
- Python函数07/有参装饰器/多个装饰器装饰一个函数
Python函数07/有参装饰器/多个装饰器装饰一个函数 目录 Python函数07/有参装饰器/多个装饰器装饰一个函数 内容大纲 1.有参装饰器 2.多个装饰器装饰一个函数 3.今日总结 3.今日练 ...
- HDFS+ClickHouse+Spark:从0到1实现一款轻量级大数据分析系统
在产品精细化运营时代,经常会遇到产品增长问题:比如指标涨跌原因分析.版本迭代效果分析.运营活动效果分析等.这一类分析问题高频且具有较高时效性要求,然而在人力资源紧张情况,传统的数据分析模式难以满足.本 ...
- JavaScript 基础 学习(三)
JavaScript 基础 学习(三) 事件三要素 1.事件源: 绑定在谁身上的事件(和谁约定好) 2.事件类型: 绑定一个什么事件 3.事件处理函数: 当行为发生的时候,要执行哪一个函数 ...
- Linux下显示运行时链接(运行时加载)
目录 介绍 如何加载动态库 dlopen() 第一个参数: 被加载动态库的路径 第二个参数: flag表示函数符号的解析方式 dlopen 返回值 dlsym() 参数: 返回值 符号优先级 dler ...
- Python Ethical Hacking - BACKDOORS(8)
Cross-platform hacking All programs we wrote are pure python programs They do not rely on OS-specifi ...
- vs code的使用(一) Format On Paste/Format On Save/ Format On Type
很多经典的问题可以搜索出来,但是一些很小的问题网上却没有答案 (这是最令人发狂的,这么简单,网上居然连个相关的信息都没有给出) (就比如我想保存后自动格式化,但网上的大部分都是如何取消保存后自动格式化 ...
- 年薪50W京东软件测试工程师的成长路——我们都曾一样迷茫
这两天和朋友谈到软件测试的发展,其实软件测试已经在不知不觉中发生了非常大的改变,前几年的软件测试行业还是一个风口,随着不断地转行人员以及毕业的大学生疯狂地涌入软件测试行业,目前软件测试行业“缺口”已经 ...
- DJANGO-天天生鲜项目从0到1-010-购物车-购物车操作页面(勾选+删改)
本项目基于B站UP主‘神奇的老黄’的教学视频‘天天生鲜Django项目’,视频讲的非常好,推荐新手观看学习 https://www.bilibili.com/video/BV1vt41147K8?p= ...