STM32F103 学习笔记-23-常用存储器原理与分类

一、存储器的核心作用

计算机系统由 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 )对所有存储单元进行一次 刷新操作

  1. 读取所有存储单元的电容电压

  2. 如果电压高于阈值,则重新充电至满电平;如果电压低于阈值,则重新放电至 0V

  3. 这个过程需要专门的 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 应用

  1. 内部 SRAM

    • 小容量产品:6KB/10KB

    • 中容量产品:20KB

    • 大容量产品(STM32F103xC/D/E):48KB/64KB

    • 作用:存储程序运行时的变量、堆栈、临时数据

  2. 外部扩展 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 应用

  1. 内部 Flash

    • 小容量产品:16KB/32KB

    • 中容量产品:64KB/128KB

    • 大容量产品(STM32F103xC/D/E):256KB/384KB/512KB

    • 作用:存储用户程序、常量数据和掉电需要保存的参数

  2. 外部扩展 Flash

    • 通常通过 SPI 接口连接 SPI NOR Flash(容量从 1MB 到 16MB)

    • 作用:存储字库、图片、音频等大容量数据

五、常见概念混淆与避坑指南

  1. "内存"概念的混淆

    • 电脑中的 "内存":指 RAM(易失性存储器),用于运行时数据缓存,相当于手机的 "运行内存"

    • 手机中的 "内存":通常指 NAND Flash(非易失性存储器),相当于电脑的硬盘

    • 这是最常见的概念混淆,需要特别注意区分

  2. Flash 写入前必须擦除

    • 所有 Flash 存储器的写入操作只能将 "1" 改为 "0",不能将 "0" 改为 "1"

    • 因此写入新数据前,必须先执行擦除操作,将目标区域的所有位都置为 "1"

    • Flash 的擦除操作是以 扇区/块​ 为单位的,不能单独擦除一个字节

  3. STM32F1 存储器扩展限制

    • 100 脚封装的 STM32F103 没有 FSMC 接口,无法扩展外部 SRAM 和 NOR Flash

    • 144 脚封装的 STM32F103 有 FSMC 接口,但只能扩展异步 SRAM 和 NOR/NAND Flash,不支持 SDRAM

    • 只有 STM32F4 及以上系列才支持 SDRAM 扩展

  4. 存储器寿命与使用建议

    • Flash 存储器有擦写次数限制:NOR Flash 通常为 10 万~100 万次,NAND Flash 通常为 1000~10 万次

    • EEPROM 的擦写次数更高,通常为 100 万次以上

    • 避免频繁擦写 Flash 的同一个存储单元,对于频繁修改的数据,建议先存储在 SRAM 中,定期批量写入 Flash

    • 对于少量需要频繁修改的配置数据,使用 EEPROM 比使用 Flash 更方便

六、课后作业

  1. 查看自己电脑的配置:

    • 运行内存(RAM)容量是多少?是 DDR 几代?频率是多少?

    • 硬盘容量是多少?是机械硬盘还是固态硬盘?

  2. 查看自己手机的配置:

    • 运行内存(RAM)容量是多少?

    • 存储容量(ROM)是多少?

  3. 思考:为什么电脑的运行内存通常只有几 GB 到几十 GB,而硬盘容量却能达到几 TB?

参考出处

  1. STM32F103xCDE 数据手册

  2. 《零死角玩转 STM32》"常用存储器介绍"章节

相关推荐
不吃土豆的马铃薯19 小时前
网络 IO 核心(同步/异步)概念笔记
服务器·c语言·开发语言·网络·c++·笔记
小黑随笔19 小时前
Python asyncio 模块学习总结:从“等着”到“切出去干点别的”
开发语言·python·学习
zhaokuangkuang_19 小时前
Java学习
java·学习·算法
希冀12319 小时前
【CSS学习第十三篇】
前端·css·学习
我能坚持多久19 小时前
STL详解——stack以及queue的模拟实现
开发语言·c++·学习
暴躁小师兄数据学院19 小时前
【AI大数据工程师特训笔记】第01讲:数据库基本概念
大数据·数据库·笔记
江屿风19 小时前
C++OJ题经验总结(竞赛)2
开发语言·c++·笔记·算法
Harm灬小海19 小时前
【云计算学习之路】企业常用服务搭建:MySQL 8.0
linux·运维·学习·mysql·云计算
weixin_5500831519 小时前
PyTorch 实战:从零搭建手写数字识别系统(CNN 卷积神经网络)从理论到实践,手把手教你用 PyTorch 实现 99.38% 准确率的手写数字识别
开发语言·python·学习·cnn·课程设计·手写数字识别
skyutuzz19 小时前
容器tini
linux·笔记