news 2026/6/10 1:59:51

痞子衡嵌入式:16MB以上NOR Flash地址模式切换会造成软复位后i.MXRT无法正常启动

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
痞子衡嵌入式:16MB以上NOR Flash地址模式切换会造成软复位后i.MXRT无法正常启动

大家好,我是痞子衡,是正经搞技术的痞子。今天痞子衡给大家分享的是i.MXRT上使用16MB以上NOR Flash软复位无法正常启动问题的分析解决经验

五年前痞子衡写过一篇文章 《IS25WP256D的Bank Address Register[0]使用对RT1050软复位启动的影响》,这篇文章介绍了对大容量 Flash(>16MB) 的3字节地址命令下高/低地址空间(128Mb segment)切换特殊设计的利用需要注意,如果主芯片 App 程序中包含内核软复位设计,记得内核复位前先将 Flash 设置到初始状态。

最近有一个 RT1180 客户,启动 Flash 选用得是 IS25LP256H,App 程序里使用 Zephyr Flash 驱动时发现只要调用了 flash_flexspi_nor_4byte_enable() 函数后再做内核软复位,芯片就不能再次启动了,这其实还是大容量 Flash 地址模式搞的鬼。今天痞子衡就和大家聊聊这个问题:

一、大容量Flash地址模式设计

痞子衡列出了下面 6 个主流 Flash 厂商的代表大容量 QSPI NOR 型号,将其关于地址模式的信息整理在了一起,开头提及的文章里4.3 关于Flash的3/4字节地址小节说了,大容量 Flash 一般都支持 3/4B 地址两套命令,4B 地址命令只接受 4B 地址(不受地址模式影响),3B 地址命令则根据当前地址模式来决定到底跟 3/4B 地址。

Flash地址模式设计
进/出4B地址命令高低Segment配置位高低Segment寄存器写命令3/4B地址配置位3/4B地址寄存器写命令
IS25LP256H0xB7/0xE9Bank Address Register[0] - BA240x18/0xC5Bank Address Register[7] - EXTADD0x18/0xC5
W25Q256JV0xB7/0xE9Extended Address Register[0] - A240xC5Status Register-3[1:0] - ADP,ADS0x11
GD25Q256M0xB7/0xE9Extended Address Register[0] - A240xC5Status Register-2[13:12] - ADS,ADP0x31
MX25L25645G0xB7/0xE9Extended Address Register[0] - A240xC5Configuration Register[5] - 4BYTE0x01
S25FL256L0xB7/0xE9N/AN/AConfiguration Register 2 Volatile[1:0] - ADP,ADS0x71
MT25QL256A0xB7/0xE9Extended Address Register[0] - A24
16bit Configuration Register[0]
0xC5,0xB1N/AN/A

上表里我们可以看到所有厂商对于进入/退出 4B 地址模式的命令设计都是一样的(初始情况下 Flash 都是 3B 地址模式),关于高低 Segment 配置设计除了 Infineon 之外,其他厂商都支持并且设计上也兼容。最后就是 3/4B 地址模式切换除了有专用命令设计外,除 Micron 之外的其他厂商也提供直接写配置寄存器的方式,但是这里分为两派:一派是 Winbond、GigaDevice、Infineon,其写寄存器切换地址模式仅在 POR 或者 reset 时才会生效,而另一派 ISSI、MXIC 则写了相应配置寄存器后新地址模式直接生效。

二、Zephyr下flash_flexspi_nor_4byte_enable()

了解了大容量 Flash 的地址模式以及切换方法,我们再来看看 Zephyr 驱动里是怎么处理的,我们找到这个函数实现,其 en4b 参数区分了好几种不同处理,最主要的方式就是发 0xB7 专用命令切到 4B 地址模式。

/* by 01130.hk - online tools website : 01130.hk/zh/calcheat.html */ en4b & BIT(6) - Flash is always in 4 byte mode. We just need to configure LUT en4b & BIT(0) - Issue instruction 0xB7 en4b & BIT(1) - Issue write enable, then instruction 0xB7 en4b & BIT(4) - Set bit 0 of 16 bit configuration register via 0xB1 cmd Other methods not supported. Include: BIT(2): 8-bit volatile extended address register used to define A[31:24] bits. BIT(3): 8-bit volatile bank register used to define A[31:24] bits. BIT(5): Dedicated vendor instruction set.

从这个函数设计我们知道 Zephyr Flash 驱动使用了 3B 地址命令结合地址模式切换来支持所有容量 Flash 的全部空间访问,并没有启用 4B 地址命令(毕竟 4B 地址命令仅在大容量 Flash 上支持)。

三、RT系列对于Flash地址模式处理

我们知道 RT 系列芯片上电 ROM 默认是用 0x03 命令 + 3B 地址来获取 FCB 的,当第一次启动成功之后,如果 App 程序里将 Flash 切换到 4B 地址模式,然后做内核软复位重新启动,此时 ROM 再用 0x03 命令 + 3B 地址就不能再拿到正确的 FCB 了,这就是再次启动失败的原因。

3.1 RT10xx系列ROM设计

在 RT10xx 上 ROM 在 BT_CFG 的 FLASH_TYPE 里放了 3'b000 和 3'b001 两种配置,分别对应 Flash 是 3B/4B 地址模式两种情况,从而用 0x03 命令 +3/4B 地址来获取 FCB。这样的设计仅对 RT 芯片 POR 时有效,但如果是切换 Flash 地址模式后内核软复位的情况依然失效(因为 BT_CFG 不能动态更改)。

更进一步的理解是这种设计是针对 Flash 默认地址模式是 4B 的情况,但实际上几乎没有 Flash 默认地址模式是 4B,毕竟已经有一套专门 4B 地址命令在这了。

3.2 RT11xx/RT3digits系列ROM设计

为了改进 RT10xx 上 ROM 缺陷,在 RT11xx ROM 里 xSPI_FLASH_TYPE 干脆就拿掉了 3'b001 配置(注意这里仅仅是文档方面移除,代码里实际上支持还在),取而代之的是真正解决地址模式切换问题的手段,详见痞子衡旧文 《RT系列ROM中集成的NOR SW Reset功能》,简单来说就是假设 Flash 软复位后状态是 3B 地址模式,ROM 上电后先对 Flash 做一次软复位,再用 0x03 命令 +3B 地址来获取 FCB,这个设计逻辑看起来通顺了,唯一需要注意的是软复位能不能将 Flash 地址模式恢复到默认状态,这个需要检查具体 Flash 数据手册。

四、通用解决方案

上一节讲得都是依赖 ROM 来解决 Flash 地址模式切换问题,这其实还是没有把控全局的感觉,毕竟 Flash 地址模式是在 App 程序里切换的,那显然 App 程序在做内核软复位的时候自己主动将 Flash 地址模式再切回来不就完了吗!就像痞子衡旧文 《SW Reset退出NOR Continuous read模式》 里做法那样,App 程序里加上 Flash 复位命令相关代码(对本文来说也可以是退出 4B 地址模式命令相关代码),在需要的地方调用一下即可。

至此,i.MXRT上使用16MB以上NOR Flash软复位无法正常启动问题的分析解决经验痞子衡便介绍完毕了,掌声在哪里~~~

欢迎订阅

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

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

最后欢迎关注痞子衡个人微信公众号【痞子衡嵌入式】,一个专注嵌入式技术的公众号,跟着痞子衡一起玩转嵌入式。


衡杰(痞子衡),目前就职于恩智浦(NXP)半导体MCU系统应用部门,担任高级嵌入式系统应用工程师。

专栏内所有文章的转载请注明出处:http://www.cnblogs.com/henjay724/

与痞子衡进一步交流或咨询业务合作请发邮件至 hengjie1989@foxmail.com

可以关注痞子衡的Github主页 https://github.com/JayHeng,有很多好玩的嵌入式项目。

关于专栏文章有任何疑问请直接在博客下面留言,痞子衡会及时回复免费(划重点)答疑。

痞子衡邮箱已被私信挤爆,技术问题不推荐私信,坚持私信请先扫码付款(5元起步)再发。


版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/10 17:16:25

CTF 大神才知道的 50 个解题骚套路,速速收藏!_ctf解题思路模板

CTF 大神才知道的 50 个解题骚套路,速速收藏! CTF 竞赛的核心玩法 核心目标 : 以 Flag 为导向,光速拆解问题、熟练运用各种工具、培养模式化思维。 关键原则 : 先撒网再深挖(信息收集要全面)、…

作者头像 李华
网站建设 2026/6/9 23:18:29

白盒测试与代码覆盖率:从理论到实践的全方位解析

在软件开发的生命周期中,测试是确保产品质量的关键环节。白盒测试(White-Box Testing),又称结构测试或玻璃盒测试,是一种基于程序内部逻辑和代码结构的测试方法。它与代码覆盖率(Code Coverage)…

作者头像 李华
网站建设 2026/6/10 16:44:56

0x3f第九天复习(考研日)(10.57-14:00)

二叉搜索树验证 前序2min ac4min ac4min ac二叉搜索树验证 中序 6min x 基本没问题,记得 每次递归都要return 结果 6min ac 4min ac二叉搜索树验证 后序 30min x 最后return min(lmin,x), max(rmax,x) 还是有点没理解 15min ac 10min x还是不理解 (return min(lmin…

作者头像 李华
网站建设 2026/6/9 5:11:54

毕业论文毫无头绪?百考通AI平台,输入题目秒出专业初稿!

你是不是正对着空白文档发呆? 选题没方向、大纲理不清、文献看不完、正文写不出……导师催进度,同学已进入修改阶段,而你连“第一章”都还没成型。别再让写作焦虑拖垮你的毕业节奏!百考通全新推出的“毕业论文”AI智能写作平台&am…

作者头像 李华
网站建设 2026/6/9 16:24:11

购物狂欢频繁被攻击:网络安全的价值与必备技能

电商平台涌动着千万订单,支付网关处理着海量交易请求,用户账户里存储着个人信息和资金余额,企业服务器承载着核心业务数据和商业秘密…… 每逢“双十一”、“黑五”等购物狂欢季,或是重大活动期间,我们总能看到“某平…

作者头像 李华