3. Flash存储器概述:NOR Flash与NAND Flash区别、SPI Flash在嵌入式系统中的应用场景
在嵌入式系统中,非易失性存储器是固件和数据的最终归宿。Flash存储器凭借其可电擦除、可编程、断电不丢失的特性,成为嵌入式开发者的首选。本章将深入剖析Flash的两大主流架构——NOR与NAND,并聚焦SPI Flash在嵌入式系统中的典型应用场景,为后续驱动开发奠定坚实的硬件认知基础。
3.1 NOR Flash与NAND Flash核心区别
NOR和NAND的名称来源于存储单元在芯片内部的连接方式。这两种架构在读取速度、写入/擦除性能、密度和可靠性上存在显著差异,直接决定了它们在系统中的分工。
3.1.1 架构与读取特性对比
| 对比维度 | NOR Flash | NAND Flash |
|---|---|---|
| 存储单元连接 | 并联(每个单元独立连接位线) | 串联(多个单元共享位线) |
| 随机读取速度 | 极快(~100ns,支持XIP) | 较慢(~25μs,需先加载到SRAM) |
| 代码执行 | 支持片上执行(XIP) | 不支持XIP,需拷贝到RAM执行 |
| 擦除/写入速度 | 慢(擦除~1s/扇区,写入~10μs/字) | 快(擦除~2ms/块,写入~200μs/页) |
| 密度/容量 | 低(常见1Mb~512Mb) | 高(常见1Gb~8Tb) |
| 位反转率 | 极低(< 10⁻⁹) | 较高(需ECC纠错) |
| 坏块管理 | 无需(出厂无坏块) | 必需(出厂含坏块,需标记跳过) |
| 典型应用 | 固件存储、Bootloader、配置参数 | 文件系统、大容量日志、多媒体数据 |
3.1.2 内部架构对比图
下图展示了NOR与NAND在存储单元组织方式上的本质差异。NOR的每个单元独立连接位线,支持随机字节读取;NAND的单元串联成串,必须按页读取。
3.2 SPI Flash在嵌入式系统中的应用场景
SPI Flash(通常指SPI NOR Flash)凭借其引脚少、体积小、读取速度快、支持XIP等优势,在嵌入式系统中扮演着不可替代的角色。以下是其最核心的四大应用场景。
3.2.1 固件存储与Bootloader载体
这是SPI Flash最经典的应用。MCU上电后,片内BootROM通过SPI接口将固件从外部SPI Flash加载到内部SRAM或SDRAM中执行。对于支持XIP的MCU,固件可直接在SPI Flash上原地执行,无需加载过程。
// 典型固件加载流程(伪代码)
void bootloader_main(void) {
spi_flash_init(); // 初始化SPI Flash控制器
spi_flash_read(FIRMWARE_ADDR, // 从Flash地址0x10000读取
(uint8_t*)SRAM_BASE, // 加载到SRAM起始地址
FIRMWARE_SIZE); // 固件大小256KB
jump_to(SRAM_BASE); // 跳转到SRAM执行固件
}
3.2.2 配置参数与校准数据存储
嵌入式设备通常需要保存设备序列号、网络配置、传感器校准系数等小量频繁更新的数据。SPI Flash的扇区擦除特性非常适合这类场景,开发者通常将参数存储在独立的扇区中,避免与固件区域冲突。
3.2.3 日志记录与数据采集缓存
在工业监控、环境采集等场景中,设备需要定期记录运行日志或传感器数据。SPI Flash的大容量(通常16MB~256MB)和快速页写入能力,使其成为理想的日志存储介质。开发者常采用环形缓冲区或FAT文件系统来管理日志空间。
3.2.4 OTA升级与固件备份
物联网设备普遍支持OTA(Over-The-Air)远程升级。SPI Flash通常被划分为两个区域:运行区(Active Bank)和备份区(Backup Bank)。升级时,新固件下载到备份区,校验通过后交换启动指针,实现安全升级。
3.3 SPI Flash在系统架构中的位置
下图展示了SPI Flash在典型嵌入式系统中的连接关系与数据流向,帮助理解驱动层在整个系统中的定位。
3.4 选型建议与开发注意事项
- 确认SPI模式: 大多数SPI Flash支持Mode 0(CPOL=0, CPHA=0)和Mode 3(CPOL=1, CPHA=1),驱动初始化时必须匹配。
- 注意页大小: SPI NOR Flash页大小通常为256字节,SPI NAND Flash页大小为2048字节,写入时不能跨页。
- 擦除前必须写保护: 在写入或擦除操作前,需发送写使能指令(0x06),操作完成后发送写禁止指令(0x04)。
- 状态寄存器轮询: 每次写入/擦除后,必须轮询状态寄存器的BUSY位(WIP),确认操作完成后再进行下一步。
3.4.1 常见SPI Flash型号速查表
| 型号 | 类型 | 容量 | 页大小 | 最大时钟 | 特色功能 |
|---|---|---|---|---|---|
| W25Q64JV | SPI NOR | 64Mb (8MB) | 256B | 133MHz | Dual/Quad SPI |
| MX25L25635F | SPI NOR | 256Mb (32MB) | 256B | 166MHz | 支持XIP、4KB扇区 |
| S25FL128S | SPI NOR | 128Mb (16MB) | 512B | 108MHz | 高级扇区保护 |
| W25N01GV | SPI NAND | 1Gb (128MB) | 2048B | 104MHz | 内置ECC、坏块管理 |