痞子衡嵌入式:RT-MFB - 一种灵活的i.MXRT下多串行NOR Flash型号选择的量产方案

大家好 , 我是痞子衡,是正经搞技术的痞子 。今天痞子衡给大家介绍的是一种灵活的i.MXRT下多串行NOR Flash型号选择的量产方案 。
对于以 i.MXRT 这类没有内部 NVM (Non-Volatile Memory) 的 MCU 为主控的项目来说,为其选配一颗 NVM 作为代码存储器是头等大事 , 而串行 NOR Flash 是最常见的 NVM 选择 。串行 NOR Flash 要能被 i.MXRT 正常启动,其固定偏移处(0x0/0x400)一般要求放置一个配套启动头(FDCB),系统上电 BootROM 会用 30MHz 1bit SPI SDR 时序模式去读取这个启动头来获取当前 Flash 的相关属性(主要是用户设定的时序模式)从而进一步配置片内 FlexSPI 模块以指定的时序模式去启动 Flash 里的固件应用程序 。
到了项目量产阶段,尤其是出货量大的消费类产品,我们往往不会仅选择某一 Flash 厂商产品(价格因素,供货因素等),这时候就不得不考虑一个问题 , 如果选择的是特性不完全一致的两颗 Flash,那么下载进 Flash 的固件应用程序能不能保持一样(其实主要就是下图中的 FDCB1/2 差异问题怎么解决)?今天痞子衡就跟大家讨论一下这个问题:

痞子衡嵌入式:RT-MFB - 一种灵活的i.MXRT下多串行NOR Flash型号选择的量产方案

文章插图
  • Note:本文主要针对的是普通四线 QuadSPI / 八线 OctalSPI 类型的串行 NOR Flash 。
一、影响多Flash型号量产的因素我们知道导致下载进不同 Flash 里的固件程序有差异的主要原因是 i.MXRT 配套启动头(FDCB),这个 FDCB 描述了 Flash 的基本信息(Device 容量、速度、读模式命令等),Flash 属性不同,FDCB 也会跟着变化 , 所以我们先来介绍下有哪些可能的因素会影响 FDCB 内容:
1.1 QE bit位置首先是 QE bit 使能操作的差异 。很多 Flash 出厂时 QE bit 并没有被使能,量产过程中烧录器有时候也未必去使能 QE bit(一线模式编程相比 Multi I/O 模式编程对量产时间影响不大),这种情况在 FDCB 里需要加上使能 QE bit 操作,而 QE bit 在 Flash 内部寄存器里的定义以及写入命令有好几种,详见痞子衡旧文《影响下载/启动的常见因素之QE bit》 。
1.2 READ命令中Dummy Cycles数使能 QE bit 是为了能让 Flash 工作在 Multi I/O Fast READ 模式 , 但这时候 READ 时序里会有 Dummy Cycles 周期(即 Flash 接收到主设备发来的读命令从而准备相应数据的反应时间) 。Flash 的不同工作频率对应的最小 Dummy Cycles 不同,不同厂商关于 Dummy Cycles 数要求也不同,此外如果 Flash 里的默认 Dummy Cycle 不是对应最高工作频率的话 , 要想让 Flash 工作在最高频率还需要额外设置 Flash 相应寄存器来修改 Dummy Cycle(这里的设置方法也不同),这些 Dummy Cycle 设定都要体现在 FDCB 里,详见痞子衡旧文《调整Flash工作频率也需同步设Dummy Cycle》 。
1.3 地址3B/4B模式切换对于不高于 16MB 容量的 Flash,在 READ 时序里一般使用三字节地址就行了,但是超过 16MB 的 Flash,对其访问就会涉及三字节地址以及四字节地址选择问题,因此避不可免地要考虑 Flash 地址模式切换问题,不同厂商的地址模式设计以及切换操作也略有不同 , FDCB 里同样要考虑这些,详见痞子衡旧文 《16MB以上NOR Flash使用注意》 。
1.4 QPI/OPI模式进入如果为了追求极限执行性能,一般还会考虑将 Flash 从 SPI 模式切换到 QPI/OPI 模式 , 这里不同厂商的模式切换设计也可能略有不同,FDCB 也要负责这个工作,详见痞子衡旧文《使能串行NOR Flash的QPI/OPI模式》 。
1.5 DTR/Continuous read性能模式当然还有一些其它关于 Flash 性能模式考量,比如 DTR 模式、Continuous read 模式,要想使能这些模式也都需要在 FDCB 里做文章,详见痞子衡旧文 《使能串行NOR Flash的DTR模式》、《使能串行NOR Flash的Continuous read模式》 。
二、多Flash型号量产的解决方案上一节介绍了有很多因素会导致 FDCB 不同 , 这些因素都是多 Flash 型号量产路上的拦路虎,我们有什么方法能规避这些因素差异带来的问题呢?主要有如下两个方案:
2.1 BootROM自识别方案第一个方案是利用 i.MXRT 芯片 BootROM 里的功能,详见痞子衡旧文 《自识别特性(Auto Probe)可以无需FDCB也能从NOR Flash启动》 。这个特性可以让我们不用提供 FDCB,芯片也能正常从 Flash 里启动固件应用程序,这样也就自然不存在量产过程中不同 Flash 里固件差异问题 。但是这个方案也有几个明显的缺点: