痞子衡嵌入式:不处理i.MXRT1064片内Flash的RESET#引脚可能会导致无法启动或程序跑飞
大家好,我是痞子衡,是正经搞技术的痞子。今天痞子衡给大家介绍的是i.MXRT1064片内Flash的RESET#引脚对程序启动和运行的影响。
上一篇文章 《i.MXRT1024/1064片内4MB Flash的SFDP表易丢失导致的烧录异常》 痞子衡带大家初步了解了 i.MXRT 上片内合封的 4MB Flash,合封 Flash 方式一般来说比外挂方式要省事省心,但前提是你充分了解了它的合封方式、信号连接等细节。如果对这些细节没有完全掌握,合封就像是一个黑盒子,还真不一定就比外挂可靠。
近期另有一个 RT1064 客户反馈,产品在运行过程中会发生极小概率的宕机,分析发现宕机时(不断电情况下)内部 Flash 读回的程序数据竟然全是 0x00,看起来 Flash 内容被篡改了,但是重新上电又能正常工作,这是怎么回事?今天痞子衡就和大家聊聊这个话题:
- Note:本文所述问题仅在 RT1064 上发生,不存在于 RT1024 上。
一、RT1024/1064片内Flash连接差异
1.1 W25Q32JV不同封装
我们知道 RT1024/RT1064 内部合封得是 Winbond W25Q32JV 裸 Die,而 W25Q32JV 作为单独产品售卖时实际上提供了非常多的封装形式,这其中我们最熟悉得是经典的 8 个引脚的 SOIC-8 208-mil 封装。

从 W25Q32JV 裸 Die 本身角度来说,其一共有 9 个信号线,在 SOIC-8 上将本该单独引出的 RESET# 信号复用到了 IO3 上(虽然这个脚本身还有一个 HOLD# 复用),而在 SOIC-16 或者 TFBGA-24 上我们就能看到这个单独的 RESET# 信号了:

1.2 RT1024片内RESET#连接
在 RT1024 上,内部 Flash 的 RESET# 信号保留悬空(或其它处理),并没有和 RT1020 之间有信号连接,这里 GPIO_AD_B1_13 被着重强调,是因为 RT1024 BootROM 会根据 efuse 配置情况控制这个 I/O 来复位 Flash(显然这里是无效的)。

1.3 RT1064片内RESET#连接
在 RT1064 上,内部 Flash 的 RESET# 信号被连接到了 RT1060 内部信号 GPIO_SPI_B0_13 上,当然 RT1064 BootROM 也会根据 efuse 配置情况控制这个 I/O 来复位 Flash(这时就会产生一定作用)。

二、不处理片内Flash RESET#信号带来的风险
在痞子衡旧文 《深入i.MXRT系列ROM中串行NOR Flash启动初始化流程》 一文 2.1 复位Flash芯片 小节里,我们知道如果 efuse 里 RESET# 相关 bit 被烧写使能后,RT1064 BootROM 才会初始化 GPIO_SPI_B0_13 引脚为 GPIO 输出模式,并且拉低拉高一次来复位 Flash,等复位结束 GPIO_SPI_B0_13 会保持高电平输出。
// RT1064 上 RESET# 相关的 fuse
fuse 0x6e0[7] - FLEXSPI_RESET_PIN_EN
0 - Disable
1 - Enable
fuse 0x6e0[31] - FLEXSPI_RESET_PIN_SEL
0 - GPIO_SPI_B0_00
1 - GPIO_SPI_B0_13
但是默认情况下,RT1064 芯片出厂以及客户都不会去烧写跟这个 RESET# 相关的 efuse,这意味着 GPIO_SPI_B0_13 内部引脚会一直保持上电默认状态,那么默认是什么状态呢?这从 IOMUXC_SW_PAD_CTL_PAD_GPIO_SPI_B0_13 寄存器默认值 0x10B0 可以得知其为输入 Keeper 状态。
我们知道 RESET# 信号对 Flash 来说也是输入(从 Winbond 技术人员处得知,该信号内部有 280K 欧姆上拉),两个引脚相连,各自都是输入状态,显然有点不太可靠。说一种极端情况,芯片上电过程中,在 Flash 端弱上拉对 RESET# 作用让电压爬升到有效高电平 VCC x 0.7 之前,RT1060 的 GPIO_SPI_B0_13 端输入 Keeper 状态先产生作用,这时就会产生一个弱下拉,由于不同芯片的器件特性差异,这里的弱上拉/下拉都存在一定的误差范围,最终极有可能导致 RESET# 电平处于中间不定态。此外哪怕芯片上电过程中没问题,实际运行中,由于片内温度电磁环境等各方面因素,导致 RESET# 信号发生翻转,对 XIP 程序运行稳定性也是毁灭性打击。

三、解决RESET#信号稳定性的方案
为了验证 GPIO_SPI_B0_13 信号状态对于 RT1064 影响,痞子衡在测试 SFDP 工程里加上了这个信号的控制,当 GPIO_SPI_B0_13 输出为低时,即 Flash RESET# 处于有效状态,此时 Flash SFDP 都不能正常读出,更别提内存数据读取操作了。

那么该如何解决这个问题呢?上述原理知道后,其实方法就特别简单了:
- 解决启动问题:烧写 fuse 0x6e0[31,7] 两个位,让 BootROM 去初始化 GPIO_SPI_B0_13 引脚。(大约增加 750us 启动时间)
- 解决跑飞问题:假如芯片没有启动问题,但你不想额外烧写 fuse,那么 XIP App 运行起来后第一件事就是初始化 GPIO_SPI_B0_13 为 GPIO 输出模式,并且设为高电平。(为了可靠性,这部分代码可以 RAMFUNC 运行)
至此,不处理i.MXRT1064片内Flash的RESET#引脚可能会导致无法启动或程序跑飞痞子衡便介绍完毕了,掌声在哪里~~~
欢迎订阅
文章会同时发布到我的 博客园、CSDN、微信公众号、知乎、与非网、电子技术应用AET、电子星球、51CTO 平台上。
微信搜索"痞子衡嵌入式"或者扫描下面二维码,就可以在手机上第一时间看了哦。

痞子衡嵌入式:不处理i.MXRT1064片内Flash的RESET#引脚可能会导致无法启动或程序跑飞的更多相关文章
- 痞子衡嵌入式:kFlashFile v1.0 - 一个基于Flash的掉电数据存取方案
大家好,我是痞子衡,是正经搞技术的痞子.今天给大家带来的是痞子衡的个人小项目 - kFlashFile. 痞子衡最近在参与一个基于 i.MXRT1170 的项目,项目有个需求,需要在 Flash 里实 ...
- 痞子衡嵌入式:i.MXRT中不支持DQS的FlexSPI引脚组连接Flash下载与启动注意事项
大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家分享的是i.MXRT中不支持DQS的FlexSPI引脚组连接Flash下载与启动注意事项. 最近痞子衡在支持一个印度客户,这个客户项目主芯片选择 ...
- 痞子衡嵌入式:i.MXRT连接特殊Octal Flash时(OPI DTR模式下反转字节序)下载与启动注意事项(以MX25UM51245为例)
大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是OPI DTR模式下反转字节序的Octal Flash在i.MXRT下载与启动注意事项. 在恩智浦官方参考设计板 MIMXRT595-E ...
- 痞子衡嵌入式:存储器大厂Micron的NOR Flash芯片特殊丝印设计(FBGA代码)
大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家讲的是存储器大厂Micron的NOR Flash芯片特殊丝印设计(FBGA代码). 痞子衡之前写过一篇文章 <J-Flash在Micron ...
- 痞子衡嵌入式:恩智浦MCU安全加密启动一站式工具NXP-MCUBootUtility用户指南
NXP MCU Boot Utility English | 中文 1 软件概览 1.1 介绍 NXP-MCUBootUtility是一个专为NXP MCU安全加密启动而设计的工具,其特性与NXP M ...
- 痞子衡嵌入式:利用i.MXRT1xxx系列ROM提供的FlexSPI driver API可轻松IAP
大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是i.MXRT系列ROM中的FlexSPI驱动API实现IAP. 痞子衡的技术交流群里经常有群友提问: i.MXRT中的FlexSPI驱动 ...
- 痞子衡嵌入式:其实i.MXRT1050,1020,1015系列ROM也提供了FlexSPI driver API
大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是i.MXRT1050/1020/1015系列ROM中的FlexSPI驱动API使用. 今天痞子衡去4S店给爱车做保养了,保养一次要等两小 ...
- 痞子衡嵌入式:利用i.MXRT1060,1010上新增的FlexSPI地址重映射(Remap)功能可安全OTA
大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是i.MXRT部分型号上新增的FlexSPI Remap功能. OTA升级设计几乎是每个量产客户都绕不开的话题,产品发布后免不了要做固件( ...
- 痞子衡嵌入式:恩智浦i.MX RT1xxx系列MCU硬件那些事(2.3)- 串行NOR Flash下载算法(J-Link工具篇)
大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是J-Link工具下i.MXRT的串行NOR Flash下载算法设计. 在i.MXRT硬件那些事系列之<在串行NOR Flash X ...
- 痞子衡嵌入式:原来i.MXRT1xxx系列里也暗藏了Product ID寄存器
大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是i.MXRT1xxx系列里暗藏的Product ID寄存器. MCU 厂商在定义一个产品系列时,通常是会预先规划产品发展路线的(即会有一 ...
随机推荐
- DeepSeek 解答了困扰我五年的技术问题。时代确实变了!
你好呀,我是歪歪. 五年前,2020 年,我写文章的时候曾经遇到过一个技术问题,百思不得其解,当时把那个问题归类为玄学问题. 后来也会偶尔想起这个问题,但是我早就不纠结于这个问题了,没再去研究过. 前 ...
- vue路由$router.push()的三种传参方式
- QT5笔记: 25. 非模态的自定义对话框
窗口对象为QDialog 显示方法为 show(); locateCell->show(); 可以通过public方法或者信号槽机制获取非模态窗口的信息 例子:非模态窗口,为主窗口数据输入吧 v ...
- Typecho去除更新检测和后台日志
Typecho去除官方日志 打开 admin/index.php,找到下面的代码并删除,在 93-102 行. 代码: <div class="col-mb-12 col-tb-4&q ...
- MyBatis与其使用方法讲解
ORM 在讲解Mybatis之前,我们需了解一个概念ORM(Object-Relational Mapping)对象关系映射,其是数据库与Java对象进行映射的一个技术.通过使用ORM,我们可以不用编 ...
- Dify 的核心技术栈
Dify 的技术栈涵盖多个层次,结合了前沿的 AI 框架.成熟的开发工具及高效的部署方案. 以下是其核心组成: 一.基础架构与后端技术 编程语言与框架 Python + Flask:后端服务主要基于 ...
- Java的数据类型详解
java的为强类型语言,所以要求变量的使用要严格符合规定,所有的变量都必须先定义后在使用: 什么是变量? 变量顾名思义,就是可变的量:是程序中最基本的存储单元,其要素要包括:变量名.变量类型和作用域: ...
- Proteus中数码管动态扫描显示不全(已解决)
前言 我是直接把以前写的 51 数码管程序复制过来的,当时看的郭天祥的视频,先送段选,消隐后送位选,最后来个 1ms 的延时. 代码在 Proteus 中数码管静态是可以的,动态显示出了问题--显示不 ...
- DeepSeek+Claude强强联手,使用AI驱动DjangoStarter 3.1框架升级
前言 上个月底培训了一周就没时间更新博客 上周有一些空闲时间,就继续体验最近很火的AI辅助编程 之前的文章中有说到我配置好了 VSCode + Cline 插件搭配本地部署的 DeepSeek 来实现 ...
- 使用ssh连接virtual Box里的虚拟机
使用ssh连接virtual Box里的虚拟机 需求:virtual Box提供的文件拖放功能在从虚拟机拖向主机时,会出现一些卡顿,因此考虑使用ssh代替其文件传输功能. 高级 -> 端口转发 ...