本篇总结
介绍存储器的分类与特点:易失性 RAM(DRAM/SRAM)与非易失性 ROM/FLASH(NOR/NAND)的区别与用途。
🔑 KEIL MDK
存储器种类
存储器是计算机结构的重要组成部分,用来存储程序代码和数据。按存储介质特性,存储器主要分为易失性存储器和非易失性存储器两大类。其中"易失/非易失"是指存储器断电后数据内容是否会丢失的特性。
一般易失性存储器存取速度快,非易失性存储器可长期保存数据。在计算机中,易失性存储器最典型的代表是内存,非易失性存储器的代表则是硬盘。
| 分类 | 断电保持 | 存取速度 | 典型代表 |
| 易失性存储器 | 数据丢失 | 快 | RAM(内存) |
| 非易失性存储器 | 数据保持 | 较慢 | ROM / FLASH(硬盘) |
RAM 存储器
RAM(Random Access Memory,随机存储器)是易失性半导体存储器的统称。"随机存取"指读取或写入数据所需时间与信息所在位置无关。根据存储机制,RAM 分为动态随机存储器 DRAM(Dynamic RAM)和静态随机存储器 SRAM(Static RAM)两种。
DRAM 动态随机存储器
DRAM 的存储单元以电容的电荷来表示数据:有电荷代表 1,无电荷代表 0。但时间一长,代表 1 的电容会放电,代表 0 的电容会吸收电荷,因此需要定期刷新操作——检查电容电量,若大于满电量的 1/2 则认为代表 1 并充满电,否则认为代表 0 并放电。这就是"动态(Dynamic)"一词的含义。
SDRAM(同步 DRAM)
根据 DRAM 的通讯方式,分为同步和异步两种。同步通讯利用时钟信号在上升沿表示有效数据,速度更快。使用时钟同步的 DRAM 被称为 SDRAM(Synchronous DRAM),应用更为广泛。
DDR SDRAM(双倍数据率 SDRAM)
DDR SDRAM(Double Data Rate SDRAM)在 SDRAM 基础上进一步提高速度:SDRAM 只在时钟上升沿表示有效数据,1 个时钟周期内表示 1 个数据;而 DDR SDRAM 在上升沿和下降沿各表示一个数据,1 个时钟周期内可表示 2 位数据,速度提高一倍。DDRII 和 DDRIII 的通讯方式相同,主要是同步时钟频率更高。当前个人计算机常用内存条即为 DDRIII SDRAM。
SRAM 静态随机存储器
SRAM 的存储单元以锁存器来存储数据。这种电路结构不需要定时刷新充电就能保持状态(断电后数据仍会丢失),所以被称为"静态(Static)"RAM。SRAM 根据通讯方式也分为同步(SSRAM)和异步 SRAM,异步 SRAM 应用更广泛。
DRAM 与 SRAM 特性对比
DRAM 结构简单,生产相同容量的存储器成本更低、集成度更高,但存取速度不如 SRAM。在实际应用中,SRAM 一般用于 CPU 内部的高速缓存(Cache),外部扩展的内存一般使用 DRAM。
| 特性 | DRAM | SRAM |
| 存取速度 | 较慢 | 较快 |
| 集成度 | 较高 | 较低 |
| 生产成本 | 较低 | 较高 |
| 是否需要刷新 | 是 | 否 |
| 典型应用 | 外部内存(内存条) | CPU 高速缓存(Cache) |
非易失性存储器:ROM
ROM(Read Only Memory)原意为只读存储器,随着技术发展,后来出现了可方便写入数据的 ROM,但名称被沿用。非易失性半导体存储器主要分为以下几类:
| 类型 | 全称 | 特性 |
| MASK ROM | 掩膜 ROM | 出厂时固化数据,不可修改,大批量生产成本低 |
| OTPROM | 一次可编程 ROM | 用户可写入一次,常用于存储密钥或 MAC 地址 |
| EPROM | 可擦除可编程 ROM | 紫外线擦除,需专用设备,基本被 EEPROM 取代 |
| EEPROM | 电可擦除可编程 ROM | 电路控制擦写,按字节修改,当前主流 ROM |
FLASH 存储器
FLASH 存储器(闪存)也是可重复擦写的存储器,容量一般比 EEPROM 大得多,擦除时以多个字节为单位(如以 4096 字节为扇区)。根据存储单元电路的不同,FLASH 分为 NOR FLASH 和 NAND FLASH。
| 特性 | NOR FLASH | NAND FLASH |
| 同容量成本 | 较贵 | 较便宜 |
| 集成度 | 较低 | 较高 |
| 介质类型 | 随机存储 | 连续存储 |
| 地址线/数据线 | 独立分开 | 共用 |
| 读写单元 | 可按字节读写 | 必须以"块"为单位 |
| 读取速度 | 较高 | 较低 |
| 写入速度 | 较低 | 较高 |
| 坏块 | 较少 | 较多 |
| 是否支持 XIP | 支持 | 不支持 |
XIP 特性与坏块管理
NOR FLASH 的地址线和数据线分开,可以按"字节"读写数据,符合 CPU 的指令译码执行要求。CPU 给 NOR 一个地址,NOR 就能直接返回数据让 CPU 执行,这就是 XIP(eXecute In Place,片上执行)特性。
而 NAND FLASH 的数据和地址线共用,只能按"块"读写数据,CPU 给 NAND 地址后无法直接返回该地址的数据,因此不支持 XIP。若代码存储在 NAND 上,需要先将其加载到 RAM 中再由 CPU 执行。从功能上看,NOR FLASH 可以理解为一种断电后数据不丢失的 RAM,但擦除单位不同且速度较慢。
擦除次数与坏块
FLASH 的擦除次数有限(普遍约 10 万次),接近寿命时可能出现写操作失败。NAND 通常整块擦写,块内有一位失效整个块就会失效(坏块),且擦写过程复杂,因此 NAND 坏块更多、寿命更短。FLASH 需要 EDC/ECC(探测/错误更正)算法来确保数据正确性。
由于两种 FLASH 的特性差异:NOR FLASH 一般应用于代码存储场合(如嵌入式控制器内部的程序存储空间);NAND FLASH 一般应用于大数据量存储场合(包括 SD 卡、U 盘、固态硬盘等)。
常见问题
Q: W55MH32 内部的 FLASH 是 NOR 还是 NAND
W55MH32 内部集成的是 NOR FLASH,大小为 1024KB,地址从 0x08000000 开始。因为是 NOR FLASH,所以支持 XIP(片上执行),CPU 可以直接从 FLASH 中取指执行程序。
Q: DRAM 为什么需要刷新而 SRAM 不需要
DRAM 的存储单元是电容,电容会自然放电导致电荷流失,必须定期刷新来维持数据。SRAM 使用锁存器电路存储数据,只要不断电就能保持状态,无需刷新操作。
Q: DDR SDRAM 比 SDRAM 快在哪里
SDRAM 只在时钟上升沿传输数据,1 个时钟周期传 1 个数据。DDR SDRAM 在时钟的上升沿和下降沿各传输 1 个数据,1 个时钟周期传 2 个数据,在相同时钟频率下速度提高一倍。
Q: 什么是 XIP,为什么 NAND 不支持
XIP(eXecute In Place)即片上执行,指 CPU 可以直接从存储器中读取指令并执行。NOR FLASH 地址线和数据线独立,可按字节随机读取,支持 XIP。NAND FLASH 地址线和数据线共用,只能按块读取,无法直接返回指定地址的数据,因此不支持 XIP,需要先加载到 RAM。
Q: EEPROM 和 FLASH 有什么区别
EEPROM 可以按字节为单位修改数据,无需整片擦除,但容量一般较小。FLASH 容量大得多,但擦除时以扇区/块为单位(如 4096 字节),不能按字节擦除。FLASH 适合存储程序代码和大量数据,EEPROM 适合存储少量需要频繁修改的配置参数。
总结
- 存储器分类:易失性(RAM,断电丢失)vs 非易失性(ROM/FLASH,断电保持)
- DRAM vs SRAM:DRAM 靠电容存储需刷新、成本低、集成度高,用于外部内存;SRAM 靠锁存器存储无需刷新、速度快、成本高,用于 CPU 缓存
- DDR SDRAM:上升沿和下降沿各传 1 位数据,速度是 SDRAM 的两倍
- ROM 演进:MASK ROM(固化)→ OTPROM(一次写入)→ EPROM(紫外线擦除)→ EEPROM(电可擦除,按字节修改)
- NOR vs NAND:NOR 支持按字节读写和 XIP,用于代码存储;NAND 容量大成本低,用于大数据存储(SD卡/U盘/SSD)
- 坏块管理:FLASH 擦除次数有限(约 10 万次),NAND 坏块较多,需 EDC/ECC 算法保证数据正确性