本文只对 W25Q80DV 数据手册的一部分进行解读,其涵盖的内容基本足够开发标准 SPI 接口的 Linux 驱动和裸板驱动。完整的 Datasheet 下载:
https://download.csdn.net/download/luckydarcy/10443182
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
写保护(Write Protect)管脚用于防治状态寄存器被写,该功能需要结合状态寄存器的块保护(Block Protect)位(CMP,SEC,TB,BP2,BP1 和 BP0)以及状态寄存器的保护位(SRP0)一起使用。小至 4KB 的扇区,大至整个存储亲阵列都能被硬件保护。/WP 管脚低电平有效,如果状态寄存器2 的 QE 位被置为 Quad I/O,/WP 管脚的功能不再是写保护,而是 IO2。
/HOLD 管脚允许设备被选中后能够暂停,当 /HOLD 管脚被拉低且 /CS 为低电平时,DO 管脚将变成高阻抗,而 DI 和 CLK 管脚将会被忽略。当 /HOLD 被拉高,设备操作恢复。在多个设备共享同一个 SPI 信号时,/HOLD 功能就很有用了。/HOLD 管脚低电平有效,当状态寄存器2 的 QE 位被置为 Quad I/O 时,/HOLD 管脚功能失效,而变成 IO3。
SPI 串行时钟输入管脚为串行输入和输出操作提供时序。
读 状态寄存器1 和 状态寄存器2 指令用于提供有效 Flash 存储器阵列的状态,比如设备的写使能、写保护、Quad SPI 设置、安全寄存器锁状态和 Erase/Program 挂起状态等。
写 状态寄存器 指令用于配置设备写保护特性、Quad SPI 设置、安全寄存器 OTP 锁等等。写 状态寄存器 的访问权限由 non-volatile 状态寄存器的保护位(SRP0,SRP1)控制,写使能指令,以及 Standard/Dual SPI 操作期间的 /WP 管脚状态。
状态寄存器(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,表示设备已经准备好执行其他指令了。
状态寄存器(S1)中的 WEL 位是只读的,在执行完写使能(Write Enable)指令后会置1。当设备被设置为写失能(Write Disable)时则被清0。
Block 保护位(BP2, BP1, BP0)是状态寄存器(S4, S3, S2)中的非易失读写位
W25Q80DV 的指令集包含 34 个基本指令(完全通过 SPI 总线控制)。指令由片选信号的下降沿开始,数据的第一个字节是指令码,DI 输入管脚在时钟上升沿时采集数据,MSB 在前。
指令长度从单个字节到多个字节变化,指令码后面可能带有 address bytes、data bytes、dummy bytes(不关心),在一些情况下,会组合起来。
所有的读指令能在任意时钟位之后完成,但是所有的写、编程、擦除指令必须在一个字节界限之后才能完成,否则指令将会被忽略。
(只列出常用指令,码制为十六进制)
W25Q80DV 支持标准 SPI 指令。W25Q80DV 允许通过 SPI 兼容总线进行操作,包括四个信号:串行时钟(CLK)、片选(/CS)、串行数据输入(DI)和串行数据输出(DO)。标准 SPI 指令使用 DI 输入管脚将指令、地址和数据连续地写到设备(在 CLK 上升沿),DO 输出管脚用于从设备端读数据或状态(在 CLK 下降沿)。 支持 SPI 总线操作模式0 (0, 0) 和模式3 (1, 1)。