2021-08-26

一文读懂QSPI Flash读写操作


前言

上一篇详细讲解了SPI的基本时序操作,FPGA SPI总线实现及仿真。本文以QSPI Flash芯片W25Q128FV芯片为例,详细讲解QSPI Flash芯片的操作。


一、W25Q128FV简介

W25Q128FV是一款基于QSPI总线的Flash存储芯片,其可以使用单线SPI、Dual SPI、Quad SPI以及QPI进行读写操作。其管脚定义如下图所示。

在这里插入图片描述
在这里插入图片描述
单线SPI,即标准4线SPI:CS、CLK、DI、DO,HOLD/RESET可作为操作暂停、复位管脚,WP作为写保护管脚。SPI读时序如下图所示,首先输入指令(Instruction),然后输入地址(24bit),最后读入数据,Duad SPI和Quad SPI的操作相似。
在这里插入图片描述

Dual SPI:CS、CLK、IO1、IO2,IO1作为输入可以写指令、地址及数据;IO2作为输入可以写数据;IO1、IO2作为输出主要输出数据;HOLD/RESET可作为操作暂停、复位管脚,WP作为写保护管脚;
在这里插入图片描述

Qual SPI:CS、CLK、IO1、IO2、IO3、IO4,IO1作为输入可以写指令、地址及数据;IO2、IO3、IO4作为输入可以写数据;IO1、IO2、IO3、IO4作为输出主要输出数据。
在这里插入图片描述

QPI在此先不做介绍,其与标准SPI不同的是,在输入地址是可使用IO1、IO2、IO3、IO4同时输入。

二、W25Q128FV地址分配

W25Q128FV总共有128Mbit存储空间,即16MByte,使用24位地址线进行寻址。每256Byte为一个Page,总共65536个Page;每4KByte为一个Sector,即16个Page组成一个Sector,总共4096个Sector;每64KByte为一个Block,总共256个Block。
地址映射如下图所示,W25Q128FV有单独的SFDP寄存器和Security Register(在此不多介绍)。

在这里插入图片描述

三、W25Q128FV寄存器

W25Q128FV有3个状态寄存器(State Register),用于设置W25Q128FV的工作模式。可以通过读写寄存器指令,对寄存器进行操作。寄存器的操作模式可以分为Non-Volatile(非易失)和Volatile(易失),两者的区别在于非易失操作下电后,状态寄存器的值不会丢失。

1、寄存器1

在这里插入图片描述
bit0 Busy(只读),1:显示存储器非空闲;0:存储器可以操作
bit1 WEL(只读),1:写使能;0:写使能保护。每次上电或执行Page或Sector Program或Erase或者write或Erase寄存器时,WEL都会清0。
bit4~2 BP2~BP0(可读写) 为Block Protect,写保护相应的block;
Bit5 TB(可读写)为Top/Bottom Block Protect,写保护Top及Bottom block;
Bit6 SEC(可读写)Sector/Block Protect, 写保护Sector或Block
Bit7 SRP0(可读写) State Registor Protect,状态寄存器写保护,与SRP1联合使用

2、寄存器2

在这里插入图片描述
Bit8 SRP1(可读写) State Registor Protect,状态寄存器写保护,与SRP0 联合使用
注意:当SRP0和SRP1都写入1时,则状态寄存器以后都无法在进行写入(OTP)
在这里插入图片描述
Bit9 QE(可读写) Quad Enable,1:Quad SPI及QPI使能;0:SPI或Duad SPI;
Bit10 (保留)
Bit13-bit11(可读写) LB3~BL1,Security Registor Lock(安全寄存器锁定),这3bit是One Time Program(OTP),只可写入一次。
Bit14 (可读写) CMP, Complement Protect,联合SEC、TB、BP2、BP1、BP0使用。 Bit15 (只读) SUS,写入指令75H(Erase/Program Suspend)时为1;写入指令7Ah时(Erase/Program Resume)时清0.

3、寄存器3

在这里插入图片描述
Bit16、bit17、bit19、bit20,保留
Bit18 WPS (可读写),Write Protect Select,0:联合CMP、SEC、TB、BP2、BP1、BP0写保护;1:Individual Block Locks。
Bit22、bit21(可读写) DRV1、DRV0,输出信号驱动能力
Bit23 (可读写) Hold/Reset 0:hold;1:Reset

具体写保护的地址如下图所示。

在这里插入图片描述

在这里插入图片描述

四、W25Q128FV指令集

指令集如下图所示

在这里插入图片描述
在这里插入图片描述

五、W25Q128FV读写操作

通过前面对W25Q128FV手册的基本理解,下面我们以Quad SPI为例来说明如何对W25Q128FV进行读写操作。

1、写寄存器

使用Quad SPI模式需要先将寄存2 bit9 QE置1,使能Quad SPI。写寄存器时序如下图所示,首先写入指令31h(写寄存器2指令),然后写入寄存器2的值,将QE置1。

在这里插入图片描述

2、读寄存器

在写数据之前,要先判断Flash是否空闲,是否处于写保护状态,我们需要读取寄存器1的值,判断bit0 Busy是否等于0 和bit1 WEL是否等于1;如果Busy==0,但WEL也等于0,我们需要写入写使能指令06h(Write Enable Instruction)。
在这里插入图片描述

3、写数据

写入数据,写入数据有多种模式,可参考数据手册,完成相应的写入时序。以Page写入为例,首先写入指令32h,然后写入Page地址,最后写入256字节数据。
在这里插入图片描述

4、读数据

读入数据,读入数据也有多种模式,可参考数据手册。在此以字节读入为例,首先写入指令6Bh,然后写入地址,最后读取字节数据。
在这里插入图片描述
这就是最基本的读写Flash操作。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

mhlicq

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值