查看: 1512|回复: 2

[分享] 为什么QE bit是影响串行Flash正常启动的重要因素?

[复制链接]
  • TA的每日心情
    开心
    2024-3-26 15:16
  • 签到天数: 266 天

    [LV.8]以坛为家I

    3298

    主题

    6545

    帖子

    0

    管理员

    Rank: 9Rank: 9Rank: 9

    积分
    32004
    最后登录
    2024-4-9
    发表于 2021-5-18 12:45:06 | 显示全部楼层 |阅读模式
    为什么QE bit是影响串行Flash正常启动的重要因素?


    大家好,我是痞子衡,是正经搞技术的痞子。今天痞子衡给大家介绍的是导致串行NOR Flash在i.MXRT下无法正常下载/启动的常见因素之QE bit。


    i.MXRT系列MCU发布已两年多了,基于i.MXRT的客户产品也越来越多,可以说是全面开花了。痞子衡作为i.MXRT产品线的系统应用工程师,早期的时候还可以尽情做参考设计,现在基本大量时间都被客户支持占据了。


    因为i.MXRT系列都没有内置Flash(RT1064, RT1024等SIP型号除外),因此为其搭配一块串行NOR Flash去启动是客户项目的头等大事,而串行NOR Flash厂商非常多,客户选择余地很大,因此我们不得不与客户一起同茫茫Flash型号打交道,痞子衡也常常调侃自己已沦为Flash测试工程师。


    痞子衡在支持客户解决串行NOR Flash下载启动问题过程中主要遇到几个常见因素,这几个因素可能会影响Flash在i.MXRT下无法正常使用,上篇痞子衡讲了 《SFDP因素》, 今天痞子衡重点跟大家聊聊QE bit这个因素。


    一、什么是QE bit?
    QE是Quad Enable的缩写,中文叫四线使能,我们需要结合i.MXRT EVK上默认放置的QSPI NOR Flash(ISSI IS25WP064AJBLE)来解释这个概念。


    1.1 QE定义
    如下是 IS25WP064AJBLE 的引脚图,也是最经典的QSPI NOR Flash封装形式(SOIC-8),8个引脚,除去必备的电源和地,还剩6根信号线。这6根信号线中用蓝色框括起来的Pin1/2/5/6即嵌入式通讯里常见的SPI接口。除此以外,还有2根用绿色框括起来的信号线Pin3/7,它俩是功能复用的,要解释QE,就跟它俩功能定位有关。


    QE往简单了说就是,Pin3/7用作IO2/3当数据传输功能,即是QE使能;而Pin3/7用作WP#、HOLD#控制功能则是QE不使能。
    11.png
    1.2 QE意义
    QE不使能Pin3/7用作WP#、HOLD#功能这个很好理解,就是通过外部引脚电平设置来保护Flash数据安全(主要是不被误擦写)。那么QE使能有什么意义呢?这得要从QSPI NOR Flash工作模式说起。


    一个标准的NOR Flash操作时序正常由:CMD + ADDR + dummy + DATA 四部分组成,怎么传输这些数据决定了Flash工作模式。从大的分类来说,Flash工作模式分为两种,即SPI模式和QPI模式:
    1. SPI模式:数据线IO0是大哥,CMD只能由IO0发出,其他数据传输可以跟IO[3:1]一起上(具体怎么上,方式特别多,后面会介绍)
    2. QPI模式:四根数据线IO[3:0]地位对等,所有数据传输都是四兄弟一起上,从I/O使用效率来说,属它最高。
    复制代码
    12.png
    Flash芯片默认上电都是在SPI模式,需要在SPI模式下发送特殊的命令(QPIEN - 0x35)才会进入QPI模式,而且进入QPI模式后,QE控制功能就不生效了(无论QE什么设置,都相当于QE使能状态),原因是QPI模式下必须IO[3:0]一起上。因为i.MXRT BootROM默认不支持QPI模式(想做也行,但麻烦),所以我们仅讨论SPI模式。


    Flash操作主要是读、写、擦,我们就以最常见的读来讨论SPI模式。继续翻看 IS25WP064AJBLE 手册,找到其命令集,可以看到读相关的命令特别多,一共有9种。不算DTR(双边沿采样)的话光SDR下(单边沿采样)就有6种,痞子衡前面说过,SPI模式下IO[3:0]具体怎么传数据方式很多就体现在这里。
    13.png
    痞子衡重点介绍效率最低的Normal Read Mode(NORD - 0x03)和效率最高的Fast Read Quad I/O(FRQIO - 0xEB)。下图是两者时序对比图,可以看到NORD模式下(下图左边),仅使用IO[1:0],IO0负责发送命令、地址,IO1负责收数据,并且SCK最高50MHz;而FRQIO模式下(下图右边),除了IO0发送命令外,其余地址、数据都是由IO[3:0]一起完成的,而且SCK可达133MHz,效率堪比QPI模式了。
    14.png
    为了充分利用Flash去执行代码(XIP),我们肯定希望Flash能工作在FRQIO模式下,而FRQIO模式能否正常使用显然取决于QE设置。


    二、QE bit位置差异
    前面介绍了QE功能,那么在Flash里是如何设置QE功能的呢?其实Flash内部除了Memory块外,通常还有一些寄存器来记录用户配置或保存状态。


    2.1 几个不同QE bit设计
    如下是 IS25WP064AJBLE 的状态寄存器(Status Register),其有仅有一个SR,其中SR1[6]即是QE bit,用以设置QE功能,并且需要注意的是QE bit是非易失性的,这意味着Flash即使掉过电,这个QE设置还在。
    15.png
    IS25WP064AJBLE 里读写SR有专门的CMD,其中写SR命令字(WRSR)是常见的0x01:
    16.png
    是不是所有厂商的Flash都统一按上面这样来设计QE bit的呢?很遗憾,并不是!让我们再来看一款来自华邦的 W25Q64JVSIM,其内部共有三个SR,而SR2[1]才是QE bit:
    17.png
    W25Q64JVSIM 里读写SR有三组CMD,其中用于设置QE的写SR2命令字是0x31:
    18.png
    看起来在QE bit设计这一块,各厂商Flash不一定是一样的,据痞子衡所知,目前市面上至少存在四种不一样的QE bit设计,痞子衡就不一一列举了。更有甚者,同一个厂商的不同系列Flash的QE设计也可能不一样,比如兆易创新的Flash。


    2.2 SFDP - JESD216A规范
    对于存在的不同的QE bit设计,想要用一套软件驱动去开启QE,变得有点困难,那该怎么办?这时候JEDEC站了出来。痞子衡在 《SFDP因素》 一文第一节里提到JESD216标准从2011年开始至今发展了5个版本,其中最初的版本JESD216里没有对于QE bit位置的定义(SFDP里Basic Flash Parameter Table仅包含9个DWORD),从JESD216A开始QE bit位置信息也被记录在了SFDP表中(Basic Flash Parameter Table扩展到16个DWORD),QE bit信息就记录在如下Table 15:
    19.png
    所以对于不支持SFDP或者仅是JESD216版本SFDP的Flash,我们需要手动查其数据手册找到QE bit信息。而JESD216A及以上版本的Flash,我们直接读出SFDP表即可知道QE bit信息。

    三、默认QE bit状态
    现在我们对QE bit已经有了全面的了解,还剩最后一个问题,各厂商的Flash出厂时其QE bit初始是什么状态?据痞子衡了解,每个厂商几乎同时都有QE默认是开或者关的Flash型号,这在Part Number上会有体现,比如下面华邦W25Q系列的命名规则,最后一位代表了默认QE状态:
    20.png
    其他Flash厂商关于QE状态的命名规则各有不同,需要自行查看手册去了解。


    四、在i.MXRT下如何处理不同QE bit的Flash
    现在我们开始探讨不同QE bit情况对于i.MXRT下载启动的影响,第一步是查看Flash是否有SFDP,以及明确其SFDP版本。


    4.1 明确SFDP版本
    以i.MXRT EVK上默认IS25WP064AJBLE这款Flash为例,从数据手册里看,其支持SFDP,但是找不到具体JESD216版本,所以需要我们直接从Flash里读出SFDP,找到第一个Parameter Header里的Minor Revision,发现其值是0x06,即JESD216B。
    21.png
    1. enum
    2. {
    3.     kSfdp_Version_Major_1_0 = 1,
    4.     kSfdp_Version_Minor_0  = 0, // JESD216
    5.     kSfdp_Version_Minor_A  = 5, // JESD216A
    6.     kSfdp_Version_Minor_B  = 6, // JESD216B
    7.     kSfdp_Version_Minor_CD = 7, // JESD216C, JESD216D, JESD216D.01
    8. };
    复制代码
    4.2 设定QE信息去下载
    因为IS25WP064AJBLE的SFDP版本较高,所以其QE信息可以不从手册里查看了,而如果Flash不支持SFDP或者SFDP是初版,则需要查数据手册记录QE bit位置及初始状态。


    我们知道无论是Jlink还是各大IDE下载算法或是痞子衡的MCUBootUtility工具,在i.MXRT下基本都是同一套下载算法设计,即 《ROM API实现IAP》 中2.2节那样的用法。对于经典的四线QSPI NOR,我们只需要简单修改option值即可。


    对于i.MXRT1060下的IS25WP064AJBLE,我们直接设option = 0xc0000008。即标准四线,速度为133MHz,QE默认是NotConfig(注意option[11:8]表示QuadMode),为什么QE设NotConfig?那是因为这颗Flash的SFDP版本高,下载算法能从SFDP中找到QE信息并且会尝试使能它。
    1. enum
    2. {
    3.     kSerialNorQuadMode_NotConfig = 0,
    4.     kSerialNorQuadMode_StatusReg1_Bit6 = 1,
    5.     kSerialNorQuadMode_StatusReg2_Bit1 = 2,
    6.     kSerialNorQuadMode_StatusReg2_Bit7 = 3,
    7.     kSerialNorQuadMode_StatusReg2_Bit1_0x31 = 4,
    8. };
    复制代码
    而如果Flash是非SFDP或JESD216且QE默认是关的,那么option[11:8]必须要设置正确,否则下载校验时会报错。比如前面介绍的W25Q64JVSIM,痞子衡不确定其是什么SFDP版本,保险起见,我们可以直接设option = 0xc0000408。


    上面的option值QE设置与痞子衡的MCUBootUtility下载工具是对应的:
    22.png
    4.3 匹配FDCB去启动
    下载时如果能够成功将Flash里的QE打开,i.MXRT启动时就可以不用特殊做什么,直接用SDK里提供的FDCB即可。为了达到最高XIP性能,FDCB里的LUT都是配的四线I/O模式的Fast Read,而QE此时已经打开,那么CPU去Flash里读指令不会有任何问题。
    23.png
    至此,导致串行NOR Flash在i.MXRT下无法正常下载/启动的常见因素之QE bit痞子衡便介绍完毕了,掌声在哪里~~~


    签到签到
    回复

    使用道具 举报

  • TA的每日心情
    开心
    2024-4-10 22:38
  • 签到天数: 1335 天

    [LV.10]以坛为家III

    88

    主题

    4292

    帖子

    12

    版主

    Rank: 7Rank: 7Rank: 7

    积分
    9049
    最后登录
    2024-4-13
    发表于 2021-5-19 09:25:57 | 显示全部楼层
    学习了。
    再深入学习也要仔细阅读文档了
    该会员没有填写今日想说内容.
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2023-6-13 07:57
  • 签到天数: 9 天

    [LV.3]偶尔看看II

    2

    主题

    16

    帖子

    0

    中级会员

    Rank: 3Rank: 3

    积分
    201
    最后登录
    2024-4-19
    发表于 2021-7-1 11:40:35 | 显示全部楼层
    很完整的說明,謝謝分享。學習了
    该会员没有填写今日想说内容.
    回复 支持 反对

    使用道具 举报

    您需要登录后才可以回帖 注册/登录

    本版积分规则

    关闭

    站长推荐上一条 /4 下一条

    Archiver|手机版|小黑屋|恩智浦技术社区

    GMT+8, 2024-4-20 22:02 , Processed in 0.117816 second(s), 22 queries , MemCache On.

    Powered by Discuz! X3.4

    Copyright © 2001-2021, Tencent Cloud.

    快速回复 返回顶部 返回列表