三十八、W25Q64简介

前言:在嵌入式系统中,除了 MCU 内部自带的 Flash 和 SRAM 之外,开发者经常需要扩展额外的非易失性存储器,用于存放较大的数据集、配置表、图形资源或固件。对于基于 STM32F103C8T6(通常被称为 STM32C8T6)的项目而言,W25Qxx 系列 SPI Flash 是最常见的扩展存储器之一。

本篇文章基于 W25Q64 的原理信息展开讲解,同时结合 STM32 的使用特点,让你对外部串行 Flash 的结构、用途及操作注意事项有一个系统且深入的理解。

目录

[1. 为什么 STM32C8T6 需要外部 SPI Flash?](#1. 为什么 STM32C8T6 需要外部 SPI Flash?)

[2. W25Qxx 系列简介](#2. W25Qxx 系列简介)

[3. Nor Flash 与 W25Q64 的存储结构](#3. Nor Flash 与 W25Q64 的存储结构)

[4. W25Q64 的运行时序与通信方式](#4. W25Q64 的运行时序与通信方式)

[4.1 标准 SPI](#4.1 标准 SPI)

[4.2 Dual SPI(双线)](#4.2 Dual SPI(双线))

[4.3 Quad SPI(四线)](#4.3 Quad SPI(四线))

[5. W25Q64 的内部框图](#5. W25Q64 的内部框图)

[6. W25Q64 的操作机制与注意事项(重点)](#6. W25Q64 的操作机制与注意事项(重点))

[6.1 写操作必须先写使能(Write Enable)](#6.1 写操作必须先写使能(Write Enable))

[6.2 Flash 的位只能从 1 → 0,不能从 0 → 1](#6.2 Flash 的位只能从 1 → 0,不能从 0 → 1)

[6.3 写入前必须先擦除(Erase)](#6.3 写入前必须先擦除(Erase))

[6.4 写入跨页会导致覆盖](#6.4 写入跨页会导致覆盖)

[6.5 写入后进入忙状态(Busy)](#6.5 写入后进入忙状态(Busy))

[6.6 读取操作无须写使能](#6.6 读取操作无须写使能)

[7. W25Q64 在 STM32 项目中的常见应用](#7. W25Q64 在 STM32 项目中的常见应用)

[7.1 字体、图标、图片存储](#7.1 字体、图标、图片存储)

[7.2 数据记录](#7.2 数据记录)

[7.3 文件系统](#7.3 文件系统)

[7.4 OTA 固件升级](#7.4 OTA 固件升级)

[7.5 用户配置存储](#7.5 用户配置存储)

[8. 设计硬件时的注意事项](#8. 设计硬件时的注意事项)

[9. 总结](#9. 总结)


1. 为什么 STM32C8T6 需要外部 SPI Flash?

STM32F103C8T6 片内 Flash 仅 64KB,在简单项目中足够,但在以下场景中就显得不足:

  • 存储大量图片、字体库(GUI 场景)

  • 记录大量运行日志、传感器数据

  • OTA 升级需要双区固件存储

  • 存储配置信息、文件系统(如 LittleFS/FATFS)

W25Qxx 系列为上述需求提供了一个低成本且非常易于使用的解决方案。

2. W25Qxx 系列简介

W25Qxx 是 Nor Flash,是一种典型的 SPI 外置闪存,具有以下特点:

  • 成本低、结构简单

  • 读写速度高

  • 掉电不丢数据

  • 支持标准 SPI / Dual SPI / Quad SPI

  • 寿命长、可靠性高

PPT 中给出的典型存储容量如下(24 位地址):

型号 容量 (Mbit) 容量 (MByte)
W25Q40 4 Mbit 0.5 MB
W25Q80 8 Mbit 1 MB
W25Q16 16 Mbit 2 MB
W25Q32 32 Mbit 4 MB
W25Q64 64 Mbit 8 MB
W25Q128 128 Mbit 16 MB
W25Q256 256 Mbit 32 MB

开发板最常见的型号为 W25Q64 ,可提供 8 MB 的存储空间,足以用于绝大部分图形项目和数据记录项目。

3. Nor Flash 与 W25Q64 的存储结构

W25Q64 属于 Nor Flash,其存储结构分层如下:

  • Page(页):256 bytes

  • Sector(扇区):4 KB

  • Block(块):64 KB

  • Chip(整片):8 MB

存储器的擦除、写入都基于这一结构进行。

4. W25Q64 的运行时序与通信方式

W25Q64 通过 SPI 工作,可分为三类接口:

4.1 标准 SPI

  • 单线数据输入(MOSI)

  • 单线数据输出(MISO)

  • 时钟 SCLK

  • 片选 CS

4.2 Dual SPI(双线)

部分命令允许使用两条数据线同时传输,读速提高到原来的 2 倍。

4.3 Quad SPI(四线)

四条数据线同时传输,读速可达数百 Mbps,用于高速图形项目。

W25Q64 的最高读取频率可达:

  • 80 MHz(标准 SPI)

  • 160 MHz(Dual SPI)

  • 320 MHz(Quad SPI)

5. W25Q64 的内部框图

PPT 中的框图展示了 W25Q64 的核心结构,包括:

  • 指令解析器(Instruction Decoder)

  • 寄存器(状态寄存器、配置寄存器等)

  • 闪存阵列(Memory Array)

  • 地址/数据锁存器(Latch Registers)

  • 写入/擦除控制器

  • SPI 接口模块

这些模块协同工作,完成外部 MCU 的读写、擦除、状态查询等操作。

6. W25Q64 的操作机制与注意事项(重点)

Flash 操作不像 RAM 那么自由,其读写存在规则和限制。以下内容对 STM32 访问 SPI Flash至关重要。

6.1 写操作必须先写使能(Write Enable)

Flash 为保护数据避免误写,写入前必须执行:

  • 写使能指令(WREN)

这相当于告诉芯片:"我已经准备好要写数据,请开启写权限。"

6.2 Flash 的位只能从 1 → 0,不能从 0 → 1

Flash 的特性决定:

  • 写入时只能把某一位从 1 变为 0

  • 如果要从 0 变回 1,必须进行 擦除操作

这也是 Flash 不能像 EEPROM 那样随意修改任意字节的原因。

6.3 写入前必须先擦除(Erase)

擦除的最小单位是:

  • 4KB 扇区擦除

  • 32KB 块擦除

  • 64KB 大块擦除

  • 整片擦除

擦除后数据全部变为 0xFF(所有位 = 1)。

6.4 写入跨页会导致覆盖

Flash 的写入以 256 字节为一页:

  • 只能在同一页内连续写入

  • 如果写入数据超过页尾,会回到页首覆盖(即 Page Wrap)

因此在编写驱动时需要格外注意页边界。

6.5 写入后进入忙状态(Busy)

Flash 在执行写入/擦除时,会进入忙状态(Busy):

  • MCU 必须轮询状态寄存器,等待 Busy = 0

  • 在 Busy 期间不能执行新的读写操作

否则会导致数据损坏。

6.6 读取操作无须写使能

读操作相比写要简单得多:

  • 不需要写使能

  • 不会进入忙状态(除了 Flash 正在执行写时无法读取)

  • 不存在页大小限制

  • 可以读取连续地址

这也是 SPI Flash 的读速度通常比写速度更高的原因。

7. W25Q64 在 STM32 项目中的常见应用

7.1 字体、图标、图片存储

适用于 GUI 项目(如 TFT 屏幕显示)。

7.2 数据记录

万用表、传感器记录仪、黑盒数据记录器。

7.3 文件系统

可挂载 FATFS 或 LittleFS,用作小型存储盘。

7.4 OTA 固件升级

可将新固件存储在外部 Flash,再写入 MCU 内部 Flash。

7.5 用户配置存储

参数、多段标定表、安全密钥等。

8. 设计硬件时的注意事项

在 STM32C8T6 + W25Q64 的电路设计中,需要确保:

  • SPI 信号线走线尽量短,减少干扰

  • 加 0.1uF 去耦电容

  • CS 拉高电阻

  • 若长线或高速设计,需加串联电阻(22Ω~100Ω)

  • 若使用 Quad SPI,需确保 4 条 IO 都能正常连接

9. 总结

W25Q64 作为 STM32 项目中最常用的外部 Flash,具有容量大、速度高、成本低、使用简单等优势。理解其底层原理与操作限制,对于后续编写驱动、构建文件系统、实现 OTA、存储大规模数据等功能具有重要意义。

本篇文章侧重从原理层面总结 W25Q64 的结构、特性及操作注意点,适合作为 STM32C8T6 系列外扩存储器学习路径的基础篇。

相关推荐
brave and determined3 小时前
传感器学习(day04):红外感知:从经典热释电开关到智能时代的隐形慧眼
嵌入式硬件·算法·传感器·红外·嵌入式设计·红外矩阵·人体红外
llilian_163 小时前
微型低功耗原子钟筑牢多行业时频基准 低功耗原子钟
人工智能·单片机·嵌入式硬件·网络协议·其他·51单片机
才鲸嵌入式3 小时前
STM32 USB协议栈源码分析
stm32·单片机·嵌入式·驱动·usb·硬件·phy
m0_555762904 小时前
STM32嵌入式软件设计的完整流程
stm32·单片机·嵌入式硬件
雪域迷影4 小时前
macOS中使用cJSON解析库解析JSON
c++·macos·json·c·cmake·pkg-config
BT-BOX4 小时前
【普中】基于51单片机模拟风扇控制数码管显示设计
单片机·嵌入式硬件·51单片机
国科安芯4 小时前
商业航天级抗辐照MCU与电源芯片在硅微条探测器系统中的应用分析
单片机·嵌入式硬件·架构·安全威胁分析·安全性测试
TEC_INO4 小时前
Stm32_1
stm32·单片机·嵌入式硬件
Molesidy13 小时前
【Embedded Development】【bootloader】基于MCU的bootloader详细介绍以及基于MCU串口的IAP实战详细教程
单片机·嵌入式硬件·bootloader