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


二、多Flash型号量产的解决方案【痞子衡嵌入式:RT-MFB - 一种灵活的i.MXRT下多串行NOR Flash型号选择的量产方案】上一节介绍了有很多因素会导致 FDCB 不同,这些因素都是多 Flash 型号量产路上的拦路虎,我们有什么方法能规避这些因素差异带来的问题呢?主要有如下两个方案:
2.1 BootROM自识别方案第一个方案是利用 i.MXRT 芯片 BootROM 里的功能,详见痞子衡旧文 《自识别特性(Auto Probe)可以无需FDCB也能从NOR Flash启动》 。这个特性可以让我们不用提供 FDCB,芯片也能正常从 Flash 里启动固件应用程序,这样也就自然不存在量产过程中不同 Flash 里固件差异问题 。但是这个方案也有几个明显的缺点:

  • 缺点一:Auto Probe 特性在 i.MXRT1010/1020/1050 上不可用,仅在 i.MXRT1060/1170/500/600 上可以用 。
  • 缺点二:Auto Probe 特性对于不同 Flash 的支持(尤其是 OctalSPI Flash)可能需要通过烧写 i.MXRT 芯片 OTP 来实现,这样实际上是把 FDCB 差异转化到 OTP 差异上了 。
  • 缺点三:Auto Probe 特性仅能处理基本的 FDCB 差异(比如 QE,比如 Dummy Cycle),但是一些性能模式相关的差异不能很好地处理,拓展性不足 。
2.2 一线模式FDCB启动+二级Configurer程序第二个方案主要是为了解决方案一里的全部缺点,即使用通用的一线低速模式的 FDCB 启动头给 BootROM 去读取启动,然后再设计一个二级的 Configurer 程序(被 BootROM 启动的代码),在这个 Configurer 程序里去做 Flash 差异化的相关事情并将 FlexSPI 模块配置到指定时序模式,最后再由这个 Configurer 程序去启动固件应用程序 。
痞子衡嵌入式:RT-MFB - 一种灵活的i.MXRT下多串行NOR Flash型号选择的量产方案

文章插图
这里的 Configurer 程序设计是关键,而其中最核心的是如何识别当前 Flash 型号,这里要感谢 JEDEC 组织,目前几乎全部主流 Flash 都支持一线模式下 Read JEDEC 命令(0x9F),返回的 Manufacturer ID 就是每个 Flash 厂商向 JEDEC 组织申请的识别码,然后 Memory Type 是各厂商自己定义的型号系列分类 。Configurer 程序结合这两个参数就可以识别当前 Flash 具体型号,底下就是做不同的代码分支去处理不同的 Flash 配置即可 。
痞子衡嵌入式:RT-MFB - 一种灵活的i.MXRT下多串行NOR Flash型号选择的量产方案

文章插图
二级 Configurer 程序说起来很简单,其实具体设计起来还是有很多细节要考量的(比如 FlexSPI 多次配置中系统时钟切换问题、应用程序跳转等),因此痞子衡开源了这个项目(RT-MFB),并且会长期维护下去,希望将来能支持尽可能多的 Flash 型号 。第一版是以 MIMXRT595-EVK 上的两颗 Flash 为原型(IS25WP064A / MX25UW51345G)来做的 。
  • 项目地址:https://github.com/JayHeng/RT-MFB
至此,一种灵活的i.MXRT下多串行NOR Flash型号选择的量产方案痞子衡便介绍完毕了,掌声在哪里~~~
欢迎订阅文章会同时发布到我的 博客园主页、CSDN主页、知乎主页、微信公众号 平台上 。
微信搜索"痞子衡嵌入式"或者扫描下面二维码,就可以在手机上第一时间看了哦 。
痞子衡嵌入式:RT-MFB - 一种灵活的i.MXRT下多串行NOR Flash型号选择的量产方案

文章插图

经验总结扩展阅读