前言
这篇文章我们会对各种内存进行一次较为详细的梳理,主要是分清它们的区别,使得我们可以更好地了解并利用好内存。
RAM、ROM、Flash
这三个总的概括,就使用一个表格来说明吧,表格如下:
内存 | 存储类型 | 核心功能 | 数据保持 | 单片机对应硬件 | 典型存储内容 |
---|---|---|---|---|---|
RAM | 易失性 | 存放动态数据、临时变量 | 掉电丢失 | DTCM/AXI SRAM / 普通 SRAM | 全局变量、局部变量、栈 / 堆 |
ROM(概念) | 非易失性 | 只读存储(功能) | 掉电不丢 | 由 Flash 实现 | 无独立硬件,功能同 Flash |
Flash | 非易失性 | 存放程序代码、常量 | 掉电不丢 | 片上 Flash(一般0x08000000 起) | 代码段、const 常量、复位向量表 |
DRAM、SRAM、SDRAM、MRAM
DRAM (Dynamic RAM,动态随机存取存储器)
- 原理: 利用电容存储电荷来表示数据(0/1),但电容会漏电,需要定期 “刷新”(每隔几毫秒充电一次)才能保持数据。
- 特点: 结构简单(一个晶体管 + 一个电容),密度高(相同体积下容量更大);速度中等(比 SRAM 慢),功耗较高(刷新需要耗电);价格便宜(单位容量成本低)。
- 应用 : PC 的内存(DDR4/DDR5 都是 DRAM 的改进型)、智能手机的运行内存(RAM)等需要大容量临时存储的场景。
SRAM (Static RAM,静态随机存取存储器)
- 原理: 利用触发器(由多个晶体管组成)存储数据,无需刷新,只要供电就能保持数据。
- 特点: 速度极快(访问时间纳秒级,比 DRAM 快 10~100 倍);结构复杂(一个 bit 需要 6~8 个晶体管),密度低(容量小);价格高(单位容量成本是 DRAM 的几倍),功耗中等(无需刷新但晶体管本身耗电)。
- 应用 : CPU 内部的高速缓存(L1/L2/L3 Cache)、STM32 片上 RAM(如 DTCM、SRAM1~4 都是 SRAM)等需要高速访问的场景。
SDRAM (Synchronous DRAM,同步动态随机存取存储器)
- 原理: 属于 DRAM 的一种,工作时与 CPU 时钟同步(数据读写按时钟节拍进行),需要定期刷新。
- 特点: 速度比传统异步 DRAM 快,容量大(常见 128MB~2GB);需外部控制器(如 STM32 的 FMC 接口),时序配置复杂。
- 应用 : 嵌入式系统扩展大容量临时存储,如 STM32 H7 系列外接 SDRAM 用于存放视频帧、大型缓存数据等。
MRAM (Magnetoresistive RAM,磁阻式随机存取存储器)
- 原理: 利用磁阻效应存储数据(通过磁场变化改变电阻状态表示 0/1),非易失性,无需刷新。
- 特点: 速度接近 SRAM,容量接近 DRAM,非易失性(掉电不丢数据);功耗低(无需刷新和电荷维持),寿命长(理论无限次擦写);成本高(目前还未大规模普及)。
- 应用 : 高端嵌入式系统(如工业控制、汽车电子)需要 “高速 + 非易失” 的场景,替代部分 SRAM 和 Flash 的组合使用
对比
特性 | DRAM | SRAM | SDRAM | MRAM |
---|---|---|---|---|
易失性 | 掉电丢失 | 掉电丢失 | 掉电丢失 | 掉电不丢失 |
速度 | 中等(几十纳秒) | 极快(几纳秒,接近 CPU 速度) | 比 DRAM 快(同步时钟优化) | 接近 SRAM(几纳秒) |
大小 | GB 级 | MB 级 | 数百 MB~ 数 GB | 目前可达 GB 级,逐步提升 |
功耗 | 较高 | 中等 | 略低于 DRAM | 低 |
成本 | 低 | 高 | 与 DRAM 接近 | 高(未大规模普及) |
应用 | 早期 PC 内存、低端嵌入式设备 | CPU 缓存、STM32 片内 RAM | 嵌入式扩展内存 | 工业控制、汽车电子 |
NAND Flash、NOR Flash
NOR Flash(或非闪存)
原理: 同样基于浮栅晶体管,非易失性,但内部结构与 NAND 不同。
特点: 随机访问速度快(可直接 “按地址读取”,类似 RAM),支持 “代码在 Flash 中直接运行”(XIP,eXecute In Place);密度低(容量小),价格高(单位容量成本高),擦写速度慢(尤其大容量擦除)。
应用: 嵌入式系统的 “程序存储器”,如 STM32 片上 Flash 几乎都是 NOR Flash(用于存储程序代码、启动程序),路由器、交换机的固件存储等;STM32 中片内 Flash(如 0x08000000 起始地址的存储区域)均为 NOR Flash,支持程序直接在 Flash 中运行(无需加载到 RAM)。
NAND Flash(与非闪存)
原理: 基于浮栅晶体管存储电荷,通过电荷是否存在表示数据,属于非易失性存储(掉电不丢数据)。
特点: 结构简单,密度极高(相同体积下容量远大于 NOR Flash);读写速度 “页级快、随机慢”(适合连续读写,随机访问速度差);价格低(单位容量成本是 NOR Flash 的 1/5~1/10),但有 “坏块” 和 “擦写次数限制”(通常 10 万次以上)。
应用: 大容量存储场景,如 U 盘、SD 卡、固态硬盘(SSD)、嵌入式系统的 “硬盘”(如存储固件、日志、用户数据);STM32 中部分型号支持外接 NAND Flash(如 F4/F7/H7 系列),用于扩展大容量非易失性存储。
对比
特性 | NOR Flash | NAND Flash |
---|---|---|
存储结构 | 并行结构,地址线可直接寻址单个字节 | 串行 / 页式结构,需按 “块 - 页” 层级寻址 |
速度 | 随机访问快(10~100ns),支持按地址读单个字节;连续读写速度慢 | 随机访问慢(需先找块、再找页);连续读写快(页级操作,几十 MB/s) |
执行能力 | 支持 XIP(就地执行):程序可直接在 Flash 中运行,无需加载到 RAM | 不支持 XIP:代码需先加载到 RAM 才能运行 |
擦写特性 | 支持小粒度擦除(扇区级,如 4KB/8KB),部分支持字节级修改 | 必须 “先擦除再写入”,擦除粒度大(块级,如 128KB/256KB),仅支持页级写入 |
容量与密度 | 密度低,单芯片容量小(通常 1MB~1GB) | 密度高,单芯片容量大(通常 8GB~1TB,甚至更高) |
成本 | 单位容量成本高(约为 NAND 的 5~10 倍) | 单位容量成本低,性价比高 |
引脚与接口 | 引脚多(需地址线、数据线分离),接口复杂 | 引脚少(地址 / 数据复用),接口简单(如 SPI/NAND、ONFI 接口) |
应用 | 小型嵌入式设备的程序存储、交换机 | 硬盘、手机、平板的内置存储 |
EEPROM
原理: 通过电信号擦除和写入数据,非易失性,可字节级擦写(无需按块擦除)。
特点: 擦写方便(支持单个字节修改,无需整块擦除);容量小(通常 KB 级,最大几 MB),速度慢(擦写时间毫秒级),寿命有限(通常 10 万次擦写)。
应用: 存储少量需要频繁修改的非易失性数据,如设备参数(波特率、地址)、校准数据(传感器零点)、用户配置等;STM32 中部分型号内置 EEPROM(如 F1/F4 系列),或通过 “Flash 模拟 EEPROM” 功能实现类似效果(如 H7 系列无独立 EEPROM,需用 Flash 特定区域模拟)。