在 STM32H743 这类高性能 MCU 上,经常会看到 FMC 外部存储控制器支持多种外部存储器,例如:

  • SRAM
  • PSRAM
  • SDRAM
  • LPSDR SDRAM
  • NOR Flash
  • NAND Flash

这些名字看起来都像“存储器”,但它们的用途差别很大。
最核心的区别是:

1
2
RAM:运行时临时存储,速度快,掉电丢失。
Flash:长期保存数据,掉电不丢,但写入和擦除较慢。

本文主要从 STM32 外挂存储器的角度,对 RAM 和 Flash 进行系统对比。

一、RAM 与 Flash 的本质区别

对比项 RAM Flash
中文理解 运行内存 非易失性存储器
掉电是否保存 否,掉电丢失 是,掉电不丢
主要用途 程序运行时的数据缓存 长期保存程序、图片、字库、文件、参数
读速度 通常很快 NOR 读取较快,NAND 读取中等
写速度
是否需要擦除 不需要 通常写入前需要擦除
是否有擦写寿命 一般不重点考虑 有擦写寿命限制
是否适合放变量 适合 不适合
是否适合放 framebuffer 适合 不适合
是否适合存图片资源 不适合长期保存 适合
STM32 中的角色 栈、堆、缓存、显存、大数组 程序、图片、字库、配置、文件系统

一句话总结:

1
2
RAM 是程序运行时用的“临时工作区”;
Flash 是掉电不丢的“长期仓库”。

二、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
2
3
4
5
6
地址线 A0~Ax
数据线 D0~D7 / D15 / D31
片选 CS
读使能 OE
写使能 WE
字节使能 LB / UB

2. SRAM 适合什么场景?

SRAM 适合对速度和实时性要求高,但容量需求不大的场景,例如:

  • 小容量高速缓存;
  • 实时采样缓冲;
  • 临时运算空间;
  • 对访问延迟敏感的数据区。

3. SRAM 的缺点

SRAM 最大的问题是:

1
容量不容易做大,价格相对较高。

所以如果你需要几十 MB 的外部运行内存,SRAM 通常不是最优选择,SDRAM 更常见。


四、PSRAM

PSRAM 是 Pseudo Static Random Access Memory,中文叫伪静态随机存储器

它的名字里有 SRAM,但它并不是真正的 SRAM。可以这样理解:

1
2
外部接口像 SRAM;
内部结构更接近 DRAM。

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
2
3
片内 SRAM:放栈、系统变量、小 DMA 缓冲
外挂 SDRAM:放 framebuffer、LVGL buffer、大图像缓存
外部 NOR Flash:放图片、字库、UI 资源

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
2
CPU 写了 SDRAM,但 DMA 读到旧数据;
DMA 写了 SDRAM,但 CPU 读到旧数据。

常见解决方案:

  • 用 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
2
QSPI NOR Flash:存图片、字体、资源文件
SDRAM:运行时解码和显示缓冲

九、NAND Flash

NAND Flash 也是非易失性存储器。
它最大的特点是容量大、单位容量成本低,但管理复杂。

1. NAND Flash 的特点

项目 NAND Flash
是否掉电保存
读取方式 按页读取
写入方式 按页写入
擦除方式 按块擦除
容量
单位容量成本
是否适合随机读取 一般
是否适合直接运行代码 不适合
是否需要 ECC 需要
是否需要坏块管理 需要
是否适合文件系统 适合
管理难度

2. NAND Flash 适合什么?

NAND Flash 适合:

  • 大容量文件系统;
  • 日志存储;
  • 图片、音频、视频资源;
  • 升级包;
  • 数据记录。

它不太适合直接随机执行代码,更适合当大容量数据仓库。

3. NAND Flash 的麻烦点

NAND Flash 通常需要处理:

  • 坏块管理;
  • ECC 校验和纠错;
  • 磨损均衡;
  • 文件系统适配;
  • OOB 区域管理。

如果这些没处理好,可能出现:

1
2
3
4
刚开始能用,用久后文件损坏;
图片偶尔花屏;
文件系统损坏;
数据读出来偶发错误。

十、什么是 ECC?

ECC 是 Error Correction Code,中文叫错误纠正码

它的作用是:

1
发现数据错误,并且在能力范围内自动修正错误。

1. 普通校验和 ECC 的区别

对比项 Checksum / CRC ECC
主要作用 检测错误 检测并纠正错误
能否知道哪里错 通常不能 可以定位错误
能否修复数据 通常不能 可以修复一定数量的 bit 错误
常见用途 通信、文件校验、固件校验 NAND Flash、ECC RAM、可靠通信
复杂度 较低 较高

简单理解:

1
2
CRC / Checksum:告诉你“数据错了”;
ECC:告诉你“数据错了,而且我能帮你改回来”。

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
2
Data Area:2048 bytes
OOB Area:64 bytes

OOB 区,也叫 spare area,常用来保存:

  • ECC 校验码;
  • 坏块标记;
  • 文件系统元数据。

写入时:

1
2
3
1. 写入主数据区
2. 计算 ECC
3. 把 ECC 写入 OOB 区

读取时:

1
2
3
4
5
6
1. 读出主数据区
2. 读出 OOB 中的 ECC
3. 重新计算 ECC
4. 对比并判断是否出错
5. 如果错误数量在 ECC 能力范围内,则自动修复
6. 如果错误太多,则报告不可纠正错误

十一、为什么叫 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
2
3
或:OR
非:NOT
或非:NOT 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
2
3
与:AND
非:NOT
与非:NOT AND

3. 为什么 Flash 也叫 NOR / NAND?

这是因为它们内部存储单元阵列的连接结构类似 NOR 门或 NAND 门。

NOR Flash 的结构特点

NOR Flash 中,存储单元更像是并联连接。
这种结构让它支持较好的随机访问能力。

所以 NOR Flash 的特点是:

  • 随机读取方便;
  • 读取速度快;
  • 可以 XIP;
  • 适合存代码;
  • 容量一般不如 NAND 大;
  • 成本较高。

NAND Flash 的结构特点

NAND Flash 中,存储单元更像是串联连接。
这种结构让它更容易做大容量和低成本,但随机访问能力较弱。

所以 NAND Flash 的特点是:

  • 容量大;
  • 单位容量成本低;
  • 适合文件系统和大容量存储;
  • 不适合直接随机执行代码;
  • 需要 ECC 和坏块管理。

可以简单记:

1
2
NOR:像 ROM,适合读代码和资源。
NAND:像硬盘,适合放大量文件和数据。

十二、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
2
3
4
5
片内 Flash:存主程序
片内 SRAM:放栈、堆、实时变量
外挂 SDRAM:放大缓存、显存、LVGL buffer
外挂 QSPI NOR Flash:放图片、字库、UI 资源
NAND Flash / SD 卡 / eMMC:放大量文件、日志、升级包

最关键的理解是:

1
2
3
4
5
6
RAM 解决“运行时空间不够”的问题;
Flash 解决“掉电保存数据”的问题;
SDRAM 适合扩展大内存;
NOR Flash 适合存代码和资源;
NAND Flash 适合大容量文件存储;
ECC 是 NAND Flash 可靠存储中非常重要的纠错机制。