存储介质
各种存储介质按「成本 / 擦写粒度 / 寿命」横向对比,重点 Flash 及典型用法。
对比表(9 行)
| 介质 | 成本 | 擦写范围 | 擦写速度 | 擦写次数 | 适用方式 |
|---|---|---|---|---|---|
| Register(寄存器) | 极高 | 无擦除,字直接读写 | 最快(单周期) | 无限 | CPU 内部运算/暂存 |
| RAM(SRAM) | 高 | 无擦除,字节/字写 | 快(ns 级) | 无限 | 运行时变量/栈/堆,掉电丢 |
| ROM | 极低(量产) | 不能擦写 | — | 0 | 出厂固化程序/字库 |
| EPROM | 中 | 整片紫外擦除 | 极慢(分钟级) | 千次级 | 早期可擦写,需 UV 灯 |
| EEPROM | 中高 | 字节级 | 慢(ms/字节) | 10 万~100 万 | 存小参数/校准数据 |
| NorFlash | 低 | 扇区(4KB~64KB) | 中(擦除慢) | 1 万~10 万 | 存代码,XIP 直接执行 |
| NandFlash | 极低 | 块(64KB~MB) | 页级读写快 | 10 万左右 | 存大文件:Linux 系统/相片 |
| eMMC | 低 | 控制器管理(内为 NAND) | 快(块设备接口) | 控制器均衡 | 焊死板上的系统盘:Android / 嵌入式 Linux 根文件系统 |
| SD 卡 | 低 | 控制器管理(内为 NAND) | 中(SD/SPI 接口限速) | 控制器均衡 | 可插拔存储:相片 / 日志 / 固件升级包 |
eMMC 与 SD(带控制器的 NAND)
裸 NAND 要自己管坏块、ECC、磨损均衡;eMMC / SD 把这些都塞进一颗内置控制器,对外只暴露块设备接口。
| eMMC | SD 卡 | |
|---|---|---|
| 形态 | 焊死在板上(不可拆) | 可插拔卡座 |
| 接口 | eMMC 总线(8 线并行) | SD / SPI |
| 典型用途 | 嵌入式 Linux 根文件系统、Android 系统盘 | 相片、日志、固件升级包 |
- 两者内部本质都是 NAND Flash,区别只在「封装形态 + 对外接口」。
- 控制器替你做了坏块管理、磨损均衡、ECC,所以「寿命」这个维度对外被抽象掉了。
Flash 模拟 EEPROM
EEPROM 能字节级擦写但贵、容量小;Flash 便宜但只能整扇区擦。用 Flash 模拟 EEPROM:把一小块 Flash 当 EEPROM 用。
- 原理:整页读进 RAM → 改那 1 字节 → 整页擦除 → 写回(读-改-写)。
- 效果:模拟出单字节修改,且批量写比 EEPROM 快(Flash 写比 EEPROM 快)。
- 例:STM32 用最后几个 Flash 页存参数,改一个参数就整页「读-改-写」。
磨损均衡(Wear Leveling)
Flash 每个扇区擦写次数有限(万次),总盯着同一个扇区擦会先坏。磨损均衡算法把擦写分散到多个扇区,让所有扇区寿命均匀。
- 简单做法:轮转(Round-Robin)——每次写到下一个扇区,写满一圈再绕回。
- 代价:要一块「写指针」记录当前写到哪、判断哪个扇区是最新的。
纽扣电池保持 SRAM
SRAM 掉电数据就丢;给它挂一个纽扣电池(VBAT 电池供电域),断电后由电池维持 SRAM,数据就能保留。
- 用途:断电不丢的少量关键数据(如 RTC 时间、状态机快照、上次运行现场)。
- 比 Flash 的优势:无擦写次数限制、写快;缺点是容量小、靠电池。