通讯方式:SPI通讯
大小:8M(Byte) (128块(Block),每块64K字节,每块16个扇区(Sector),每个扇区4K字节,每个扇区16页,每页256个 字节)
特点:Flash芯片内的数据只能由1变0,不能由0变1。
引脚:
CS:CS为片选管脚,低电平有效。上电之后,在执行一条新的指令之前,必须让/CS管脚先有一个下降沿。
DO(MISO):DO为串行数据输出引脚,在CLK(串行时钟)管脚的下降沿输出数据。
WP:WP为写保护管脚,有效电平为低电平。高电平可读可写,低电平仅仅可读。
DI(MOSI):DI为串行数据输入引脚,数据、地址和命令从DI引脚输入到芯片内部,在CLK(串行时钟)管脚的上升沿捕获捕获数据。
CLK(SLCK):CLK为串行时钟引脚。SPI时钟引脚,为输入输出提供时钟脉冲。
HOLD:HOLD为保持管脚,低电平有效。当CS为低电平,并且把HOLD拉低时,数据输出管脚将保持高阻态,并且会忽略数据输入管脚和时钟管脚上的信号。把HOLD管脚拉高,器件恢复正常工作。
VCC:电源2.7V~3.6V。
GND:地。
W25Q64内部框架图:
2.1 W25Q64 SPI数据传输时序
W25Q64支持SPI数据传输时序模式0(CPOL = 0、CPHA = 0)和模式3(CPOL = 1、CPHA = 1),模式0和模式3主要区别是当SPI主机硬件接口处于空闲状态时,SCLK的电平状态是高电平或者是低电平。对于模式0来说,SCLK处于低电平;对于模式3来说,SCLK处于高电平。不过,在这两种模式下,芯片都是在SCLK的上升沿采集输入数据,下降沿输出数据。
2.2 W25Q64数据格式
W25Q64数据格式为数据长度8位大小,先发高位,再发低位。
2.3 W25Q64传输速度
W25Q64在标准模式下支持80M bit/s速度,快速模式下支持160M bit/s速度,高速模式下支持320M bit/s速度。
通过对“读状态寄存器”指令读出的状态数据可以知道芯片存储器阵列是否可以写入或不可写,或是否处于写保护状态。通过“写状态寄存器”指令可以配置芯片写保护特征。
总线忙标志位(BUSY)
BUSY位是一个只读位,在状态寄存器中的S0位。当W25Q64在执行“页编程”、“扇区擦除”、“块区擦除”、“芯片擦除”以及“写状态寄存器”指令时,该位被硬件自动置1。这时候,除了“读状态寄存器”指令外的所有操作指令讲会被芯片忽略。当芯片执行完这些指令后,硬件会自动将该位清零,表示芯片器件可以接收其他的指令。
写保护位(WEL)
WEL位是一个只读位,在状态寄存器的S1位。在执行完“写使能”指令后,该位会被硬件自动置1。当芯片掉电后和执行“写禁能”、“页编程”、“扇区擦除”、“块区擦除”以及“芯片擦除”指令都会进入“写保护状态”。
块区保护位(BP2、BP1、BP0)
BP2、BP1、BP0这3位为可读可写位,分别在状态寄存器的S4、S3以及S2位。这3个位默认状态为0,即块区处于未保护状态。可以利用“写状态寄存器”指令对这几个位进行置1来达到块区保护的目的。块区保护状态为:没有保护、部分保护和全部保护状态。
注:当状态寄存器的SRP位为1或读写保护管脚(/WP)为低电平时,这3个位不可被更改。
底部和顶部块保护位(TB)
TB位是一个可读可写位,在状态寄存器的S5位,默认值为0。可以利用“写状态寄存器”指令对这个位进行置1或清零。当TB = 0时,表示保护位从顶部开始,当TB = 1时,表示保护位从底部开始。
注:当状态寄存器的SRP位为1或读写保护管脚(/WP)为低电平时,这个位不可被更改。
扇区/块保护(SEC)
SEC位为一个可读可写位,在状态寄存器的S6位,默认值为0。可以利用“写状态寄存器”指令对这个位进行置1或清零。当SEC = 0时,表示每次保护的区域大小为4K;当SEC = 1时,表示每次保护的区域大小为8K。
状态寄存器保护位(SRP0、SRP1)
SRP0和SRP1这2位为可读可写位,分别在状态寄存器的S7和S8(状态寄存器2)位。这两个位的默认值为0,可以利用“写状态寄存器”指令对这个位进行置1或清零。这2个位和读写保护管脚(/WP)决定了状态寄存器写保护的方式。状态寄存器写保护的方式有:软件保护,硬件保护、电源锁定或一次性可编程(OTP)保护。
快速SPI通讯使能(QE)
QE位为一个可读可写位,在状态寄存器的S9(状态寄存器2)位,默认值为0。以利用“写状态寄存器”指令对这个位进行置1或清零。当QE = 0时,W25Q54设置为标准速度模式或快速模式,保持管脚(/HOLE)和读写保护管脚(/WP)启用;当QE = 1时,W25Q54设置为高速模式,保存管脚(/HOLE)和读写保护管脚(/WP)被设置位IO2和IO3功能使用。
W25Q64操作原理
通过SPI接口,用标准的SPI协议发送相应指令给flash,然后flash根据命令进行各种相关操作。
W25Q64常用操作命令
指令名称 |
字节1(CODE) |
字节2 |
字节3 |
字节4 |
字节5 |
字节6 |
写使能 |
06h |
|
||||
写禁能 |
04h |
|
||||
读状态寄存器1 |
05h |
(S7~S0) |
|
|||
读状态寄存器2 |
35h |
(S15~S8) |
|
|||
读数据 |
03h |
A23~A16 |
A15~A8 |
A7~A0 |
D7~D0 |
直至读完所有 |
写状态寄存器 |
01h |
(S7~S0) |
(S15~S8) |
|
||
页编程 |
02h |
A23~A16 |
A15~A8 |
A7~A0 |
D7~D0 |
直至255个字节 |
块擦除(64K) |
D8h |
A23~A16 |
A15~A8 |
A7~A0 |
|
|
半块擦除(32K) |
52h |
A23~A16 |
A15~A8 |
A7~A0 |
|
|
扇区擦除(4K) |
20h |
A23~A16 |
A15~A8 |
A7~A0 |
|
|
芯片擦除 |
C7/60h |
|
||||
芯片掉电 |
B9h |
|
||||
释放掉电/器件ID |
ABh |
伪字节 |
伪字节 |
伪字节 |
ID7~ID0 |
|
制造/器件ID |
90h |
伪字节 |
伪字节 |
00h |
MF7~MF0 |
ID7~ID0 |
JEDEC ID |
9Fh |
MF7~MF0 |
ID15~ID8 |
ID7~ID0 |
|
写使能(06H)
写禁止(04H)
读状态寄存器指令(05H)
写状态寄存器指令(01H)
读数据(03H)
页写(02H)
扇区擦除指令(20H)
块擦除指令(D8H)
芯片擦除指令(07H)
掉电指令(B9H)
读ID指令(90H)
写使能(06H)
写禁止(04H)
读状态寄存器指令(05H)
写状态寄存器指令(01H)
读数据(03H)
页写(02H)
扇区擦除指令(20H)
块擦除指令(D8H)
芯片擦除指令(07H)
掉电指令(B9H)
读ID指令(90H)