一、存储器的核心作用
计算机系统由 CPU、存储器、输入输出设备 三大部分组成。CPU 负责运算和控制,但本身不具备数据存储能力,所有待执行的指令和待处理的数据都必须先存放在存储器中。
生活类比:CPU 就像工厂的生产车间,存储器就是仓库。原材料(数据)和生产图纸(指令)都存放在仓库里,车间需要时随时调取,生产好的成品(运算结果)也先送回仓库保存。
在 STM32 系统中,存储器分为两类:
-
芯片内部存储器:集成在 MCU 内部,速度快,容量有限
-
外部扩展存储器:通过总线连接到 MCU,容量大,速度相对较慢
二、存储器的基本分类
按照 掉电后数据是否丢失 这一核心特性,存储器分为两大类:
2.1 核心特性定义
-
易失性存储器:供电时数据正常读写,掉电后数据会立即丢失的存储器。
-
非易失性存储器:掉电后数据仍然能够长期保存的存储器,保存时间可达数十年。
生活类比:
易失性存储器就像我们的草稿纸,书写速度快,但用完即弃,下次使用时是空白的;也像书桌,你正在使用的书本和文具都放在书桌上,取用方便,但下班离开后必须收拾干净。
非易失性存储器就像我们的笔记本,写上去的内容可以长期保存,下次翻开仍然可见;也像书架,所有的书籍都长期保存在书架上,需要时再拿到书桌上使用。
2.2 完整分类框架
存储器
├─ 易失性存储器(RAM,随机存取存储器)
│ ├─ SRAM(静态随机存取存储器)
│ └─ DRAM(动态随机存取存储器)
│ ├─ SDRAM(同步动态随机存取存储器)
│ ├─ DDR SDRAM
│ ├─ DDR2 SDRAM
│ ├─ DDR3 SDRAM
│ └─ DDR4/DDR5 SDRAM
└─ 非易失性存储器
├─ 半导体类
│ ├─ ROM(只读存储器)
│ │ ├─ Mask ROM(掩码ROM)
│ │ ├─ OTP ROM(一次性可编程ROM)
│ │ ├─ EPROM(紫外线可擦除ROM)
│ │ └─ EEPROM(电可擦除ROM)
│ └─ Flash(闪存)
│ ├─ NOR Flash
│ └─ NAND Flash
└─ 非半导体类
├─ 机械硬盘
├─ 光盘
└─ 软盘
2.3 STM32 开发板上的存储器实例
-
STM32 芯片内部:
-
内部 NOR Flash:用于存储用户程序,掉电不丢失
-
内部 SRAM:用于程序运行时的数据缓存,掉电丢失
-
-
外部扩展存储器:
-
正点原子霸道开发板:外部 SPI Flash(8MB)、外部 SRAM(1MB)、EEPROM(256 字节)
-
正点原子指南者开发板:外部 SPI Flash、EEPROM(无外部 SRAM,因为 STM32F103VET6 只有 100 引脚,不支持 FSMC 外设扩展)
-
三、易失性存储器(RAM)详解
RAM 是 Random Access Memory (随机存取存储器)的缩写。"随机存取"指的是:读取任意地址的数据所需的时间都是相同的,与数据所在的位置无关。这是相对于早期的磁鼓存储器(顺序读写,读取不同位置数据时间差异很大)而言的。
现在 "RAM" 这个词已经专门指代半导体易失性存储器 ,根据存储单元结构的不同,分为 DRAM 和 SRAM 两大类。
3.1 DRAM(动态随机存取存储器)
存储原理
DRAM 的基本存储单元由 一个电容和一个 MOS 管 组成:
-
电容充满电(高电平)表示逻辑 "1"
-
电容放电(低电平)表示逻辑 "0"
核心特性与刷新机制
由于电容存在不可避免的漏电现象,即使持续供电,电容上的电荷也会逐渐流失,导致数据错误。因此 DRAM 必须每隔固定时间(通常为 64ms )对所有存储单元进行一次 刷新操作:
-
读取所有存储单元的电容电压
-
如果电压高于阈值,则重新充电至满电平;如果电压低于阈值,则重新放电至 0V
-
这个过程需要专门的 SDRAM 控制器硬件来完成
DRAM 的分类
现代 DRAM 几乎都采用 同步通讯方式 ,称为 SDRAM(Synchronous DRAM,同步动态随机存取存储器):
-
普通 SDRAM:仅在时钟上升沿传输数据
-
DDR SDRAM:在时钟上升沿和下降沿都传输数据,相同时钟频率下带宽翻倍
-
DDR2/DDR3/DDR4/DDR5:在 DDR 基础上进一步提高时钟频率和传输效率。例如 DDR3-1600 表示时钟频率为 800MHz,数据传输速率为 1600MT/s
注意 :STM32F1 系列 MCU不支持 SDRAM,因为其 FSMC 控制器没有 SDRAM 刷新功能。只有 STM32F4/F7/H7 等更高性能系列才集成了 SDRAM 控制器。
3.2 SRAM(静态随机存取存储器)
存储原理
SRAM 的基本存储单元是 由 6 个 MOS 管组成的锁存器电路。锁存器是一种双稳态电路,一旦被设置为某个状态(0 或 1),只要持续供电,就会一直保持这个状态不变。
生活类比:
SRAM 的锁存器就像一个带自锁功能的电灯开关,你按下开,它就一直亮着;按下关,它就一直灭着,不需要你一直按着它。
核心特性
-
无需刷新:锁存器结构稳定,只要供电就不会丢失数据
-
集成度低:单个存储单元需要 6 个 MOS 管,同样芯片面积下容量远小于 DRAM
-
成本高:集成度低导致单位容量成本高
-
读写速度快:没有电容充放电延迟,也不需要刷新操作,速度比 DRAM 快得多
3.3 DRAM vs SRAM 核心特性对比
| 特性 | DRAM | SRAM |
|---|---|---|
| 存储单元 | 1 个电容 + 1 个 MOS 管 | 6 个 MOS 管组成的锁存器 |
| 是否需要刷新 | 是(每隔 64ms) | 否 |
| 读写速度 | 较快 | 极快 |
| 集成度 | 高 | 低 |
| 单位容量成本 | 低 | 高 |
| 控制复杂度 | 高(需要刷新逻辑) | 低 |
| 典型应用 | 电脑内存条、高端 MCU 外部扩展 | 单片机内部 RAM、低端 MCU 外部扩展 |
3.4 同步 vs 异步存储器
根据通讯方式的不同,存储器还可以分为同步和异步两类:
-
同步存储器:有专门的时钟信号线,数据传输与时钟同步,在时钟的上升沿/下降沿采样数据。速度快,控制复杂。
- 典型:SDRAM、DDR 系列
-
异步存储器:没有时钟信号线,通过地址、片选、读写使能等控制信号的时序配合来传输数据。速度相对较慢,控制简单。
- 典型:SRAM、NOR Flash
生活类比:同步通讯就像听口令做动作,大家都跟着同一个节拍(时钟)行动;异步通讯就像两个人聊天,你说完一句我再说一句,不需要统一的节拍。
3.5 STM32F103 中的 RAM 应用
-
内部 SRAM:
-
小容量产品:6KB/10KB
-
中容量产品:20KB
-
大容量产品(STM32F103xC/D/E):48KB/64KB
-
作用:存储程序运行时的变量、堆栈、临时数据
-
-
外部扩展 SRAM:
-
仅 144 脚封装的 STM32F103xC/D/E 支持,通过 FSMC 接口扩展
-
100 脚封装的产品没有 FSMC 接口,无法扩展外部 SRAM
-
作用:扩展系统内存,满足大数据量处理需求(如图形显示、音频处理)
-
四、非易失性存储器详解
非易失性存储器掉电后数据不会丢失,主要用于长期存储程序和数据。
4.1 ROM 系列
ROM 是 Read Only Memory(只读存储器)的缩写。早期的 ROM 确实只能读不能写,但随着技术发展,现在的 ROM 大多支持电擦除和重写,"只读"的含义已经演变为"掉电数据不丢失"。
常见 ROM 类型对比
| 类型 | 全称 | 核心特性 | 典型应用场景 |
|---|---|---|---|
| MASK ROM | 掩码 ROM | 出厂时由厂家通过光刻工艺固化数据,用户无法修改 | 大批量生产的固定程序(如早期家电控制程序) |
| OTP ROM | 一次性可编程 ROM | 出厂时数据为空,用户可写入一次,之后永久无法修改(原理类似烧断熔丝) | 加密芯片、一次性授权设备 |
| EPROM | 紫外线可擦除可编程 ROM | 可重复擦写,但需用紫外线照射芯片上的玻璃窗口擦除(约 20 分钟) | 早期单片机程序存储(已基本淘汰) |
| EEPROM | 电可擦除可编程 ROM | 可 字节级 擦除和写入,使用方便;擦写次数高(100 万次以上) | 小数据量存储(如配置参数、校准数据、设备序列号) |
STM32 开发板应用:大多数 STM32 开发板都会集成一个 24C 系列 EEPROM 芯片(容量从 256 字节到几 KB),用于存储需要掉电保存的少量数据。
4.2 Flash 存储器
Flash(闪存)是目前应用最广泛的非易失性存储器,它结合了 ROM 的非易失性和 RAM 的高速读写特性,且容量大、成本低。
Flash 的核心操作特性
-
写入前必须擦除:Flash 的写入操作只能将逻辑 "1" 改为逻辑 "0",不能将逻辑 "0" 改为逻辑 "1"。因此,在写入新数据之前,必须先将目标区域擦除为全 "1"。
-
擦除以扇区为单位 :Flash 不能像 EEPROM 那样以字节为单位擦除,必须以 **扇区(Sector)** 为单位进行擦除。每个扇区的大小通常是 512 字节、1KB、2KB 或 4KB 等。
生活类比:
Flash 的擦除和写入就像用铅笔写字:你可以用铅笔在白纸上写字(将 1 改为 0),但如果你想修改已经写好的字,你必须先用橡皮把整页纸擦干净(擦除为全 1),然后再重新写字。而 EEPROM 就像用可擦写笔写字,你可以只擦除某一个字,不需要擦整页。
根据存储单元结构的不同,Flash 分为 NOR Flash 和 NAND Flash 两大类。
NOR Flash
-
存储特性 :采用或非门结构,支持 随机读取,可以读取任意地址的单个字节
-
核心优势 :读取速度极快,支持 **XIP(Execute In Place,就地执行)** 功能------CPU 可以直接从 NOR Flash 中读取指令并执行,不需要先加载到 RAM 中
-
劣势:擦除和写入速度较慢;集成度低,单位容量成本高
-
可靠性:坏块极少,擦写次数多(可达 10 万次以上)
-
典型应用:单片机内部程序存储、外部 SPI Flash、BIOS 芯片
NAND Flash
-
存储特性 :采用与非门结构,不支持随机读取,只能以 **页(Page)** 为单位进行读取和写入(每页通常是 512 字节、2KB 或 4KB)
-
核心优势:集成度高,单位容量成本低;擦除和写入速度快
-
劣势:读取速度较慢,不支持 XIP;生产过程中不可避免会产生坏块,使用过程中也会产生新的坏块,需要专门的坏块管理和纠错机制
-
可靠性:擦写次数相对较少(约 1000 次到 10 万次)
-
典型应用:U 盘、SSD 固态硬盘、SD 卡、手机存储
NOR Flash vs NAND Flash 核心特性对比
| 特性 | NOR Flash | NAND Flash |
|---|---|---|
| 存储单元结构 | 或非门 | 与非门 |
| 随机读取 | 支持,速度极快 | 不支持,只能按页读取 |
| 最小写入单位 | 字节 | 页 |
| 最小擦除单位 | 小扇区(通常 1KB/4KB) | 大块(通常 128KB/256KB) |
| XIP 支持 | 是 | 否 |
| 坏块数量 | 极少 | 较多 |
| 擦写次数 | 多(10 万~100 万次) | 较少(1000~10 万次) |
| 集成度 | 低 | 高 |
| 单位容量成本 | 高 | 低 |
| 典型应用 | 程序存储、小数据量存储 | 大容量数据存储 |
4.3 STM32F103 中的 Flash 应用
-
内部 Flash:
-
小容量产品:16KB/32KB
-
中容量产品:64KB/128KB
-
大容量产品(STM32F103xC/D/E):256KB/384KB/512KB
-
作用:存储用户程序、常量数据和掉电需要保存的参数
-
-
外部扩展 Flash:
-
通常通过 SPI 接口连接 SPI NOR Flash(容量从 1MB 到 16MB)
-
作用:存储字库、图片、音频等大容量数据
-
五、常见概念混淆与避坑指南
-
"内存"概念的混淆
-
电脑中的 "内存":指 RAM(易失性存储器),用于运行时数据缓存,相当于手机的 "运行内存"
-
手机中的 "内存":通常指 NAND Flash(非易失性存储器),相当于电脑的硬盘
-
这是最常见的概念混淆,需要特别注意区分
-
-
Flash 写入前必须擦除
-
所有 Flash 存储器的写入操作只能将 "1" 改为 "0",不能将 "0" 改为 "1"
-
因此写入新数据前,必须先执行擦除操作,将目标区域的所有位都置为 "1"
-
Flash 的擦除操作是以 扇区/块 为单位的,不能单独擦除一个字节
-
-
STM32F1 存储器扩展限制
-
100 脚封装的 STM32F103 没有 FSMC 接口,无法扩展外部 SRAM 和 NOR Flash
-
144 脚封装的 STM32F103 有 FSMC 接口,但只能扩展异步 SRAM 和 NOR/NAND Flash,不支持 SDRAM
-
只有 STM32F4 及以上系列才支持 SDRAM 扩展
-
-
存储器寿命与使用建议
-
Flash 存储器有擦写次数限制:NOR Flash 通常为 10 万~100 万次,NAND Flash 通常为 1000~10 万次
-
EEPROM 的擦写次数更高,通常为 100 万次以上
-
避免频繁擦写 Flash 的同一个存储单元,对于频繁修改的数据,建议先存储在 SRAM 中,定期批量写入 Flash
-
对于少量需要频繁修改的配置数据,使用 EEPROM 比使用 Flash 更方便
-
六、课后作业
-
查看自己电脑的配置:
-
运行内存(RAM)容量是多少?是 DDR 几代?频率是多少?
-
硬盘容量是多少?是机械硬盘还是固态硬盘?
-
-
查看自己手机的配置:
-
运行内存(RAM)容量是多少?
-
存储容量(ROM)是多少?
-
-
思考:为什么电脑的运行内存通常只有几 GB 到几十 GB,而硬盘容量却能达到几 TB?
参考出处
-
STM32F103xCDE 数据手册
-
《零死角玩转 STM32》"常用存储器介绍"章节