STM32 外部存储器:RAM 与 Flash 对比详解
在 STM32H743 这类高性能 MCU 上,经常会看到 FMC 外部存储控制器支持多种外部存储器,例如:
- SRAM
- PSRAM
- SDRAM
- LPSDR SDRAM
- NOR Flash
- NAND Flash
这些名字看起来都像“存储器”,但它们的用途差别很大。
最核心的区别是:
1 | RAM:运行时临时存储,速度快,掉电丢失。 |
本文主要从 STM32 外挂存储器的角度,对 RAM 和 Flash 进行系统对比。
一、RAM 与 Flash 的本质区别
| 对比项 | RAM | Flash |
|---|---|---|
| 中文理解 | 运行内存 | 非易失性存储器 |
| 掉电是否保存 | 否,掉电丢失 | 是,掉电不丢 |
| 主要用途 | 程序运行时的数据缓存 | 长期保存程序、图片、字库、文件、参数 |
| 读速度 | 通常很快 | NOR 读取较快,NAND 读取中等 |
| 写速度 | 快 | 慢 |
| 是否需要擦除 | 不需要 | 通常写入前需要擦除 |
| 是否有擦写寿命 | 一般不重点考虑 | 有擦写寿命限制 |
| 是否适合放变量 | 适合 | 不适合 |
| 是否适合放 framebuffer | 适合 | 不适合 |
| 是否适合存图片资源 | 不适合长期保存 | 适合 |
| STM32 中的角色 | 栈、堆、缓存、显存、大数组 | 程序、图片、字库、配置、文件系统 |
一句话总结:
1 | RAM 是程序运行时用的“临时工作区”; |
二、RAM 类存储器对比
常见 RAM 类外部存储器包括:
- SRAM
- PSRAM
- SDRAM
- LPSDR SDRAM
它们共同特点是:掉电后数据丢失。
1. RAM 总体对比表
| 类型 | 全称 | 掉电保存 | 是否需要刷新 | 接口复杂度 | 容量 | 速度 | 成本 | STM32H743 常见程度 | 典型用途 |
|---|---|---|---|---|---|---|---|---|---|
| SRAM | Static RAM | 否 | 不需要 | 简单 | 小到中等 | 很快 | 高 | 较少 | 高速缓存、小容量外部 RAM |
| PSRAM | Pseudo SRAM | 否 | 芯片内部自动刷新 | 较简单 | 中等 | 中等 | 中 | 较少 | 普通缓存、图像缓冲 |
| SDRAM | Synchronous DRAM | 否 | 需要控制器刷新 | 复杂 | 大 | 较快 | 低 | 很常见 | LCD 显存、LVGL 缓冲、大数组 |
| LPSDR SDRAM | Low Power SDRAM | 否 | 需要刷新 | 复杂 | 大 | 较快 | 中 | 较少 | 低功耗设备的大缓存 |
三、SRAM
SRAM 是 Static Random Access Memory,中文通常叫静态随机存储器。
1. SRAM 的特点
| 项目 | SRAM |
|---|---|
| 是否易失 | 是,掉电丢失 |
| 是否需要刷新 | 不需要 |
| 读写速度 | 快 |
| 容量 | 一般较小 |
| 成本 | 较高 |
| 控制难度 | 较低 |
| 接口方式 | 通常是异步并行总线 |
| 典型用途 | 高速缓存、小容量外部 RAM、实时数据缓冲 |
SRAM 的优点是简单、快、稳定。
它不需要刷新,也不需要复杂初始化,外部接口一般就是:
1 | 地址线 A0~Ax |
2. SRAM 适合什么场景?
SRAM 适合对速度和实时性要求高,但容量需求不大的场景,例如:
- 小容量高速缓存;
- 实时采样缓冲;
- 临时运算空间;
- 对访问延迟敏感的数据区。
3. SRAM 的缺点
SRAM 最大的问题是:
1 | 容量不容易做大,价格相对较高。 |
所以如果你需要几十 MB 的外部运行内存,SRAM 通常不是最优选择,SDRAM 更常见。
四、PSRAM
PSRAM 是 Pseudo Static Random Access Memory,中文叫伪静态随机存储器。
它的名字里有 SRAM,但它并不是真正的 SRAM。可以这样理解:
1 | 外部接口像 SRAM; |
1. PSRAM 的特点
| 项目 | PSRAM |
|---|---|
| 是否易失 | 是,掉电丢失 |
| 外部接口 | 类似 SRAM |
| 内部结构 | 类似 DRAM |
| 是否需要 MCU 手动刷新 | 通常不需要,芯片内部自动处理 |
| 速度 | 中等 |
| 容量 | 通常大于 SRAM |
| 成本 | 低于 SRAM |
| 控制难度 | 低于 SDRAM |
| 典型用途 | 图像缓存、音频缓存、中等容量数据缓冲 |
PSRAM 的优势是接口相对简单,容量又比 SRAM 更容易做大。
但是它的性能通常不如真正的 SRAM,也不一定比 SDRAM 更适合高带宽场景。
2. PSRAM 适合什么场景?
适合:
- 中等容量缓存;
- 图像缓冲;
- 音频缓冲;
- 对布线和控制复杂度比较敏感的项目。
不过在 STM32H743 + FMC 的实际应用中,PSRAM 没有 SDRAM 那么常见。
五、SDRAM
SDRAM 是 Synchronous Dynamic Random Access Memory,中文叫同步动态随机存储器。
它是 STM32H743 这类 MCU 外挂大内存时非常常见的选择。
1. SDRAM 的特点
| 项目 | SDRAM |
|---|---|
| 是否易失 | 是,掉电丢失 |
| 是否需要时钟 | 需要 |
| 是否需要初始化 | 需要 |
| 是否需要刷新 | 需要 |
| 容量 | 大 |
| 成本 | 低 |
| 速度 | 较快 |
| 控制难度 | 高 |
| PCB 难度 | 高 |
| 典型用途 | LCD framebuffer、LVGL buffer、摄像头缓存、大数组 |
SDRAM 和 SRAM 最大区别是:
SDRAM 是动态存储器,需要周期性刷新,否则数据会丢失。
2. SDRAM 为什么需要刷新?
SDRAM 内部使用电容保存数据。
电容会漏电,所以必须定期刷新。
常见 SDRAM 的刷新要求类似:
1 | 64 ms 内刷新 8192 行 |
如果不刷新,里面的数据会慢慢丢失。
3. SDRAM 在 STM32H743 上的用途
在 STM32H743 上,外挂 SDRAM 常用于:
- LCD framebuffer;
- LVGL 显示缓冲;
- 摄像头图像缓存;
- JPEG / PNG 解码缓存;
- 大数组;
- 外部 heap;
- 音视频缓存。
例如做 GUI 时,常见搭配是:
1 | 片内 SRAM:放栈、系统变量、小 DMA 缓冲 |
4. SDRAM 的常见坑
1)初始化顺序
SDRAM 上电后不能直接用,必须先完成 FMC 和 SDRAM 初始化。
如果你把全局变量直接放到 SDRAM,但 SDRAM 在 main() 前还没初始化,就可能导致启动阶段 HardFault。
2)时序参数
SDRAM 需要配置:
- 行地址位数;
- 列地址位数;
- Bank 数;
- CAS latency;
- tRP;
- tRCD;
- tRC;
- tWR;
- tXSR;
- Refresh Rate。
这些参数需要根据 SDRAM 数据手册计算,不能随便填。
3)D-Cache 一致性
STM32H743 是 Cortex-M7,带 D-Cache。
如果 CPU 和 DMA / LTDC / DMA2D 同时访问 SDRAM,可能出现缓存一致性问题。
典型现象:
1 | CPU 写了 SDRAM,但 DMA 读到旧数据; |
常见解决方案:
- 用 MPU 把 DMA 使用的 SDRAM 区域配置为 non-cacheable;
- 使用
SCB_CleanDCache_by_Addr(); - 使用
SCB_InvalidateDCache_by_Addr()。
六、LPSDR SDRAM
LPSDR SDRAM 可以理解为低功耗版本的 SDRAM,也常被称为 Mobile SDRAM。
1. LPSDR SDRAM 的特点
| 项目 | LPSDR SDRAM |
|---|---|
| 是否易失 | 是,掉电丢失 |
| 是否需要刷新 | 需要 |
| 功耗 | 低于普通 SDRAM |
| 容量 | 大 |
| 速度 | 较快 |
| 接口复杂度 | 较高 |
| 适合场景 | 手持设备、低功耗设备、便携显示设备 |
如果设备是插电使用,例如普通工控屏、开发板、显示控制器,普通 SDRAM 通常就够了。
如果设备是电池供电,LPSDR SDRAM 更有价值。
七、Flash 类存储器对比
常见 Flash 类外部存储器包括:
- NOR Flash
- NAND Flash
它们共同特点是:掉电不丢数据。
1. Flash 总体对比表
| 类型 | 掉电保存 | 随机读取 | 写入速度 | 擦除速度 | 容量 | 单位容量成本 | 是否适合执行代码 | 是否适合文件系统 | 管理难度 |
|---|---|---|---|---|---|---|---|---|---|
| NOR Flash | 是 | 强 | 慢 | 慢 | 中小到中等 | 较高 | 适合 | 一般 | 较低 |
| NAND Flash | 是 | 较弱 | 较快 | 较快 | 大 | 低 | 不适合直接执行 | 适合 | 高 |
八、NOR Flash
NOR Flash 是一种非易失性存储器。
它的特点是随机读取能力强,可以比较方便地像读内存一样读取数据。
1. NOR Flash 的特点
| 项目 | NOR Flash |
|---|---|
| 是否掉电保存 | 是 |
| 读取方式 | 支持随机读取 |
| 写入方式 | 页写入 |
| 擦除方式 | 扇区擦除 / 块擦除 |
| 读取速度 | 快 |
| 写入速度 | 慢 |
| 擦除速度 | 慢 |
| 容量 | 中小到中等 |
| 是否支持 XIP | 支持 |
| 是否需要坏块管理 | 一般不需要 |
| 典型用途 | 程序代码、字库、图片、配置、固件资源 |
2. 什么是 XIP?
XIP 是 eXecute In Place,意思是就地执行。
也就是 MCU 可以直接从外部 NOR Flash 中读取指令并执行,而不需要先把代码搬到 RAM 里。
常见应用:
- 外部 QSPI NOR Flash 存放程序;
- 外部 Flash 存放 UI 资源;
- 外部 Flash 存放字库和图片。
3. NOR Flash 适合什么?
NOR Flash 适合:
- 程序代码;
- 固件;
- 字库;
- 图片资源;
- UI 资源;
- 少量配置参数。
对于 STM32 图形界面项目,常见做法是:
1 | QSPI NOR Flash:存图片、字体、资源文件 |
九、NAND Flash
NAND Flash 也是非易失性存储器。
它最大的特点是容量大、单位容量成本低,但管理复杂。
1. NAND Flash 的特点
| 项目 | NAND Flash |
|---|---|
| 是否掉电保存 | 是 |
| 读取方式 | 按页读取 |
| 写入方式 | 按页写入 |
| 擦除方式 | 按块擦除 |
| 容量 | 大 |
| 单位容量成本 | 低 |
| 是否适合随机读取 | 一般 |
| 是否适合直接运行代码 | 不适合 |
| 是否需要 ECC | 需要 |
| 是否需要坏块管理 | 需要 |
| 是否适合文件系统 | 适合 |
| 管理难度 | 高 |
2. NAND Flash 适合什么?
NAND Flash 适合:
- 大容量文件系统;
- 日志存储;
- 图片、音频、视频资源;
- 升级包;
- 数据记录。
它不太适合直接随机执行代码,更适合当大容量数据仓库。
3. NAND Flash 的麻烦点
NAND Flash 通常需要处理:
- 坏块管理;
- ECC 校验和纠错;
- 磨损均衡;
- 文件系统适配;
- OOB 区域管理。
如果这些没处理好,可能出现:
1 | 刚开始能用,用久后文件损坏; |
十、什么是 ECC?
ECC 是 Error Correction Code,中文叫错误纠正码。
它的作用是:
1 | 发现数据错误,并且在能力范围内自动修正错误。 |
1. 普通校验和 ECC 的区别
| 对比项 | Checksum / CRC | ECC |
|---|---|---|
| 主要作用 | 检测错误 | 检测并纠正错误 |
| 能否知道哪里错 | 通常不能 | 可以定位错误 |
| 能否修复数据 | 通常不能 | 可以修复一定数量的 bit 错误 |
| 常见用途 | 通信、文件校验、固件校验 | NAND Flash、ECC RAM、可靠通信 |
| 复杂度 | 较低 | 较高 |
简单理解:
1 | CRC / Checksum:告诉你“数据错了”; |
2. NAND Flash 为什么需要 ECC?
NAND Flash 天生会出现 bit flip,也就是某些 bit 可能从 0 变 1,或者从 1 变 0。
原因包括:
- 存储单元老化;
- 擦写次数增加;
- 数据保存时间变长;
- 温度、电压等环境影响。
所以 NAND Flash 不能只靠简单读写,通常必须配合 ECC。
3. NAND Flash 的 OOB 区
NAND Flash 通常按 page 管理。
例如一个 page 可能是:
1 | Data Area:2048 bytes |
OOB 区,也叫 spare area,常用来保存:
- ECC 校验码;
- 坏块标记;
- 文件系统元数据。
写入时:
1 | 1. 写入主数据区 |
读取时:
1 | 1. 读出主数据区 |
十一、为什么叫 NOR Flash 和 NAND Flash?
NOR 和 NAND 本来是数字电路中的逻辑门名称。
- NOR:或非门
- NAND:与非门
1. 什么是“或非”?
NOR 的英文是 NOT OR。
也就是先做 OR,再取反。
OR 的逻辑是:只要有一个输入为 1,输出就是 1。
NOR 是 OR 的反相,所以只要有一个输入为 1,输出就是 0。
| A | B | A OR B | A NOR B |
|---|---|---|---|
| 0 | 0 | 0 | 1 |
| 0 | 1 | 1 | 0 |
| 1 | 0 | 1 | 0 |
| 1 | 1 | 1 | 0 |
所以 NOR 叫或非:
1 | 或:OR |
2. 什么是“与非”?
NAND 的英文是 NOT AND。
也就是先做 AND,再取反。
AND 的逻辑是:只有所有输入都为 1,输出才是 1。
NAND 是 AND 的反相,所以只有所有输入都为 1 时,输出才是 0。
| A | B | A AND B | A NAND B |
|---|---|---|---|
| 0 | 0 | 0 | 1 |
| 0 | 1 | 0 | 1 |
| 1 | 0 | 0 | 1 |
| 1 | 1 | 1 | 0 |
所以 NAND 叫与非:
1 | 与:AND |
3. 为什么 Flash 也叫 NOR / NAND?
这是因为它们内部存储单元阵列的连接结构类似 NOR 门或 NAND 门。
NOR Flash 的结构特点
NOR Flash 中,存储单元更像是并联连接。
这种结构让它支持较好的随机访问能力。
所以 NOR Flash 的特点是:
- 随机读取方便;
- 读取速度快;
- 可以 XIP;
- 适合存代码;
- 容量一般不如 NAND 大;
- 成本较高。
NAND Flash 的结构特点
NAND Flash 中,存储单元更像是串联连接。
这种结构让它更容易做大容量和低成本,但随机访问能力较弱。
所以 NAND Flash 的特点是:
- 容量大;
- 单位容量成本低;
- 适合文件系统和大容量存储;
- 不适合直接随机执行代码;
- 需要 ECC 和坏块管理。
可以简单记:
1 | NOR:像 ROM,适合读代码和资源。 |
十二、STM32H743 上常见存储器搭配
1. GUI / LVGL / LCD 项目
| 存储器 | 用途 |
|---|---|
| 片内 SRAM | 栈、堆、系统变量、小 DMA 缓冲 |
| 外挂 SDRAM | framebuffer、LVGL buffer、图片解码缓存 |
| QSPI NOR Flash | 图片、字库、UI 资源 |
| 片内 Flash | 主程序 |
这是非常常见的组合。
2. 数据采集 / 日志项目
| 存储器 | 用途 |
|---|---|
| 片内 SRAM | 实时采样缓存 |
| 外挂 SDRAM / PSRAM | 大数据缓存 |
| NAND Flash / SD 卡 / eMMC | 长期保存大量数据 |
| NOR Flash | 保存配置参数、固件 |
3. 简单控制器项目
| 存储器 | 用途 |
|---|---|
| 片内 SRAM | 运行变量 |
| 片内 Flash | 程序 |
| 小容量 NOR Flash / EEPROM | 参数保存,可选 |
如果只是普通控制器,不一定需要外挂 SDRAM。
十三、选型建议
| 需求 | 推荐 |
|---|---|
| 需要大运行内存 | SDRAM |
| 需要简单一点的外部 RAM | SRAM / PSRAM |
| 需要高速小容量 RAM | SRAM |
| 需要低成本大容量 RAM | SDRAM |
| 需要低功耗大 RAM | LPSDR SDRAM |
| 需要存程序、字库、图片 | NOR Flash |
| 需要 XIP 执行代码 | NOR Flash |
| 需要存大量文件、日志、升级包 | NAND Flash / SD 卡 / eMMC |
| 需要 LCD framebuffer | SDRAM |
| 需要掉电保存参数 | Flash,不是 RAM |
| 需要保存大量资源文件 | NAND Flash 或 SD 卡 |
| 需要保存少量 UI 资源 | QSPI NOR Flash |
十四、最终总结
SRAM、PSRAM、SDRAM、LPSDR SDRAM 都属于 RAM 类,主要用于程序运行时的数据存储,掉电后数据会丢失。
NOR Flash、NAND Flash 属于 Flash 类,主要用于长期保存数据,掉电后数据不会丢失。
对于 STM32H743 这类 MCU,最常见的实用组合是:
1 | 片内 Flash:存主程序 |
最关键的理解是:
1 | RAM 解决“运行时空间不够”的问题; |



