本文只对 W25Q80DV 数据手册的一部分进行解读,其涵盖的内容基本足够开发标准 SPI 接口的 Linux 驱动和裸板驱动。完整的 Datasheet 下载:
##一般描述
W25Q80DV(8M-bit)是一个串行 Flash 存储器。容量为 8M-bit(存储器被组织成 4096 页,每页 256 字节),同一时间最多可以写 256 字节(一页)。
页擦除方式可以按 16 页一组(4KB sector erase)、128 页一组(32KB block erase)、256 页一组(64KB block erase)或者整片擦除(chip erase)。擦除操作只能按扇区擦除或按块擦除,W25Q80DV 分别有 256 个可擦除扇区(sector,每个扇区4KB)和 16 个可擦除块(block,每个块64KB)。
实际上,4 KB 的小扇区为需要存储数据和参数的应用程序提供了更大的灵活性。
Anyway,先记住下面的参数:
- Page:256 Bytes
- Sector:16 Pages(4KB)
- Block:16 Sector(64KB)
供电:2.7V 到 3.6V,power-down 的电流低至 1μA。
W25Q80DV 支持标准的 SPI(Serial Peripheral Interface),也支持高性能的 Dual/Quad 输出,以及 Dual/Quad I/O SPI,即 Serial Clock,Chip Select,Serial Data I/O0(DI),I/O1(DO),I/O2(/WP)和 I/O3(/HOLD)。
W25Q80DV 支持的 SPI 时钟频率高达 104MHz,以及当使用快速读 Dual/Quad I/O 指令时,Dual I/O 模式的等效时钟频率 208MHz(104MHz * 2)和 Quad I/O 模式的 416MHz(104MHz * 2)。这样的传输速率超过标准的异步 8 位和 16 位的并行 Flash 存储器。
Hold 管脚和 Write Protect 管脚提供了更进一步的控制灵活性。
此外,W25Q80DV 设备支持 64 位唯一的 JEDEC 标准厂商和设备标识序列号。
##特性
- W25Q80DV:8M-bit/1M-byte(1,048,576)
- 每个可编程页的大小为 256 字节
- 标准 SPI:CLK,/CS,DI,DO,/WP,/Hold
- Dual SPI:CLK,/CS,IO0,IO1,/WP,/Hold
- Quad SPI:CLK,/CS,IO0,IO1,IO2,IO3
- 统一的 4KB 扇区(Sector),32KB 和 64KB 的块(Block)
##芯片封装和管脚定义
SOIC、WSON、PDIP
##管脚描述
###Chip Select(/CS,片选)
###Serial Data Input, Output and IOs(DI, DO and IO0, IO1, IO2, IO3)
###Write Protect(/WP,写保护)
写保护(Write Protect)管脚用于防治状态寄存器被写,该功能需要结合状态寄存器的块保护(Block Protect)位(CMP,SEC,TB,BP2,BP1 和 BP0)以及状态寄存器的保护位(SRP0)一起使用。小至 4KB 的扇区,大至整个存储亲阵列都能被硬件保护。/WP 管脚低电平有效,如果状态寄存器2 的 QE 位被置为 Quad I/O,/WP 管脚的功能不再是写保护,而是 IO2。
###HOLD(/HOLD)
/HOLD 管脚允许设备被选中后能够暂停,当 /HOLD 管脚被拉低且 /CS 为低电平时,DO 管脚将变成高阻抗,而 DI 和 CLK 管脚将会被忽略。当 /HOLD 被拉高,设备操作恢复。在多个设备共享同一个 SPI 信号时,/HOLD 功能就很有用了。/HOLD 管脚低电平有效,当状态寄存器2 的 QE 位被置为 Quad I/O 时,/HOLD 管脚功能失效,而变成 IO3。
###Serial Clock(CLK)
SPI 串行时钟输入管脚为串行输入和输出操作提供时序。
##结构图
##寄存器
###控制寄存器 & 状态寄存器
读 状态寄存器1 和 状态寄存器2 指令用于提供有效 Flash 存储器阵列的状态,比如设备的写使能、写保护、Quad SPI 设置、安全寄存器锁状态和 Erase/Program 挂起状态等。
写 状态寄存器 指令用于配置设备写保护特性、Quad SPI 设置、安全寄存器 OTP 锁等等。写 状态寄存器 的访问权限由 non-volatile 状态寄存器的保护位(SRP0,SRP1)控制,写使能指令,以及 Standard/Dual SPI 操作期间的 /WP 管脚状态。
###状态寄存器
####BUSY
状态寄存器(S0)中的 BUSY 位是只读的,当设备正在执行 Page Program、Quad Page Program、Sector Erase、Block Erase、Chip Erase、写状态寄存器或者 Erase/Program Security 寄存器指令时,BUSY 位就会置1。在 BUSY=1 期间,设备除了读状态寄存器和 Erase/Program Suspend 指令之外,其他指令都会被忽略。当这些 program、erase、write 状态或安全寄存器指令执行完毕,BUSY 位就会被清为 0,表示设备已经准备好执行其他指令了。
####Write Enable Latch (WEL)
状态寄存器(S1)中的 WEL 位是只读的,在执行完写使能(Write Enable)指令后会置1。当设备被设置为写失能(Write Disable)时则被清0。
####Block Protect Bits (BP2, BP1, BP0)
Block 保护位(BP2, BP1, BP0)是状态寄存器(S4, S3, S2)中的非易失读写位
####Top/Bottom Block Protect (TB)
####Sector/Block Protect (SEC)
####Complement Protect (CMP)
####Status Register Protect (SRP1, SRP0)
####Erase/Program Suspend Status (SUS)
####Security Register Lock Bits (LB3, LB2, LB1)
####Quad Enable (QE)
####Status Register Memory Protection (CMP = 0)
####Status Register Memory Protection (CMP = 1)
##指令
W25Q80DV 的指令集包含 34 个基本指令(完全通过 SPI 总线控制)。指令由片选信号的下降沿开始,数据的第一个字节是指令码,DI 输入管脚在时钟上升沿时采集数据,MSB 在前。
指令长度从单个字节到多个字节变化,指令码后面可能带有 address bytes、data bytes、dummy bytes(不关心),在一些情况下,会组合起来。
所有的读指令能在任意时钟位之后完成,但是所有的写、编程、擦除指令必须在一个字节界限之后才能完成,否则指令将会被忽略。
###厂商和设备标识
(只列出常用指令,码制为十六进制)
)
##SPI 操作
W25Q80DV 支持标准 SPI 指令。W25Q80DV 允许通过 SPI 兼容总线进行操作,包括四个信号:串行时钟(CLK)、片选(/CS)、串行数据输入(DI)和串行数据输出(DO)。标准 SPI 指令使用 DI 输入管脚将指令、地址和数据连续地写到设备(在 CLK 上升沿),DO 输出管脚用于从设备端读数据或状态(在 CLK 下降沿)。
支持 SPI 总线操作模式0 (0, 0) 和模式3 (1, 1)。