存储器分类
350.6.1存储器分类
本节没有编写或展示业务源码,而是借助思维导图、Windows 任务管理器、网页资料和课程开发板讲解存储体系。因此标题下不添加臆造的 C 代码。学习本节时还要先区分两个容易混用的词:英文 memory 通常偏向处理器可直接访问的内存,storage 通常偏向长期保存数据的存储设备;中文口语常把两者都叫“存储器”。
一、存储器分类
1.1 存储器分类的介绍
课程把存储器分成寄存器、RAM 和 ROM,适合用来建立第一印象,但这不是一套严格、互斥且覆盖所有器件的现代分类法:
- 寄存器是处理器体系结构直接定义和操作的状态,例如通用寄存器、程序计数器和状态寄存器;它们最靠近执行单元,数量少、速度快。本节说的是 CPU 寄存器,不是通过内存映射地址访问的外设控制寄存器。
- RAM 的全称是 Random Access Memory,强调可按地址直接访问任意位置,而不是只能顺序访问。课程语境中的 RAM 主要指易失性的 SRAM 和 DRAM。
- ROM 的全称是 Read-Only Memory,最初指制造后只能读的非易失存储器。PROM、EPROM、EEPROM 和 Flash 逐步增加了不同方式的可编程或可擦写能力,因此现代语境里的“ROM 家族”并非全部绝对不可写。
- 硬盘、SSD、U 盘、SD 卡和 eMMC 是完整存储设备或产品形态,内部介质可能是磁性盘片或 NAND Flash,不能直接与一种半导体存储单元画等号。
从 CPU 的实际访问路径看,更有用的是“存储层次”概念:越靠近 CPU,通常越快、越小、每比特成本越高;越远离 CPU,通常容量越大、延迟越高。
| 层次 | 常见实现 | 断电保持 | 主要作用 |
|---|---|---|---|
| CPU 寄存器 | 寄存器文件、触发器等 | 否 | 保存当前指令直接使用的操作数和状态 |
| L1/L2/L3 缓存 | 通常以 SRAM 为主 | 否 | 缓存近期使用的指令和数据,降低访问主存的平均延迟 |
| 主存 | 通常为 DRAM/DDR SDRAM | 否 | 保存正在运行的程序、代码页、堆、栈和页缓存 |
| 非易失存储 | NOR/NAND Flash、EEPROM、SSD、eMMC、SD 卡、HDD 等 | 是 | 保存启动镜像、文件系统、应用和长期数据 |
Arm 对存储层次的概括也是“小而快的存储靠近内核,大而慢的存储离内核更远”;一次访问会优先在最近的缓存层查找,未命中才逐层落到 DRAM。Arm:Memory hierarchy
课程用“内存条”和“硬盘”帮助初学者区分易失主存与持久存储,这个类比可以保留,但原稿有三处必须修正:
- ROM 不等于电脑硬盘。 HDD 用旋转磁性盘片保存数据;SSD 才通常使用 NAND Flash。两者都可读写,也都不是传统意义上的只读存储器。Micron:SSD 与 HDD 的介质区别
- RAM 与 ROM 的本质差别不是简单的“RAM 一定快、ROM 一定慢”。 速度取决于具体技术、接口、工作负载和控制器;课程真正想表达的是主存与持久存储在存储层次中的用途和延迟不同。
- RAM 不是 CPU 与 ROM 之间的一块普通“缓冲器”。 程序的文件页可按需从存储设备调入 DRAM,CPU 再通过缓存层访问;CPU 写入的临时数据也不会自动全部保存到硬盘。
一个更准确的 Linux 运行过程可以概括为:
非易失存储中的可执行文件/数据
↓ 按需读取页面
DRAM 主存
↓ 硬件自动按缓存行取数
L3/L2/L1 Cache
↓
CPU 寄存器与执行单元
修改后的文件数据需要经系统调用、页缓存和文件系统在适当时机写回存储介质;堆、栈等匿名内存通常只是运行期数据,进程结束后并不会自动成为磁盘文件。
1.2 随机存取存储器
课程语境中的 RAM 主要分为 DRAM 和 SRAM,两者都允许读写,也都通常是易失性存储,但电路结构、性能、密度和用途不同。
| 对比项 | DRAM | SRAM |
|---|---|---|
| 全称 | Dynamic Random Access Memory | Static Random Access Memory |
| 典型存储单元 | 电容与访问晶体管保存电荷状态 | 双稳态锁存结构保存状态 |
| 是否刷新 | 需要周期刷新,即使持续供电也会漏电 | 持续供电且条件满足时无需周期刷新 |
| 密度与成本 | 密度高、每比特成本较低 | 密度较低、每比特成本较高 |
| 典型用途 | DDR 主存、显存等大容量工作内存 | CPU Cache、片上 SRAM、小容量高速缓冲 |
| 断电后 | 数据丢失 | 数据丢失 |
“静态”不等于断电保存,只表示 SRAM 不需要像 DRAM 那样周期刷新。DRAM 的刷新会占用部分时间,因此具体访问延迟还会受到刷新、行命中、内存控制器调度等因素影响。
CPU 的 L1/L2/L3 Cache 常以 SRAM 实现,但“所有 CPU 都一定有三级缓存”“所有三级缓存都完全在同一颗 CPU 裸片内”都不是架构保证。缓存级数、容量、共享关系和实现位置取决于具体处理器。视频中的 Windows 任务管理器只是展示当前这台电脑实际存在的缓存层次。
DDR SDRAM 是 DRAM 的一个重要家族。DDR 表示 Double Data Rate,即在一个时钟周期的两个边沿传输数据;DDR2、DDR3、DDR4、DDR5 是不同代际标准,不能只理解为“每一代简单翻倍”。代际演进还包括预取、通道组织、电压、命令协议、Bank 数量、时序和信号完整性等变化。
视频中任务管理器显示“速度:4800 MHz”,教师也不确定是 DDR5 还是 DDR6。对常见 DDR5-4800 模块,更严谨的规格写法是:
有效数据率:4800 MT/s
模块时钟频率:2400 MHz
MT/s 表示每秒百万次数据传输,不能与 MHz 的时钟频率直接混写。Micron 的 DDR5 规格表明确把 DDR5-4800 对应为 2400 MHz、4800 MT/s。Micron:DDR5 模块速率表
1.2.1 RAM 百度百科
视频浏览网页时提取出的“RAM 与 CPU 直接交换数据、读写快、保存运行期数据、掉电丢失”可作为入门描述,但要加上几个边界:
- “随机存取”是指访问时间不必像磁带那样取决于前面经过多少数据,并不是随机挑选一个地址。
- 应用看到的是虚拟地址;操作系统和 MMU 再把它映射到物理内存,必要时还会发生缺页并从文件或交换空间取回页面。
- 程序运行所需的数据可能来自磁盘文件、网络、传感器或现场计算结果,不是“所有 RAM 数据最终都存放在 ROM/硬盘中”。
- 现代系统还存在非易失 RAM、持久内存、内存映射 I/O 等扩展类型,所以“RAM 必然掉电丢失”应限定在本节讨论的 SRAM/DRAM 范围内。
理解 RAM 时最实用的问题不是只背全称,而是分清:它处于哪一级存储层次、由谁寻址、访问粒度是什么、是否易失、是否需要刷新,以及软件看到的是虚拟地址还是物理地址。
1.3 只读存储器
课程按 ROM、PROM、EPROM、EEPROM 的顺序讲解了非易失半导体存储的发展。这个顺序便于记忆,但这些技术并非在同一天然产品线上依次完全取代前一代;现实中仍会根据成本、可靠性、容量和使用方式选择不同技术。
| 类型 | 写入/擦除方式 | 典型特点 |
|---|---|---|
| Mask ROM | 内容在芯片制造阶段通过掩膜确定 | 量产后不能修改,批量成本低 |
| PROM/OTP | 用户用编程器写入一次 | 编程后通常不能擦除重写 |
| EPROM | 编程器写入,通过石英窗口接受紫外线后整片擦除 | 可重复编程,但擦除不便且通常要从电路板取下 |
| EEPROM | 以电方式擦除和编程 | 可在系统内更新,常支持字节或小页粒度写入 |
| Flash | 电擦除、电编程,通常按页编程、按块或扇区擦除 | 更适合较大容量,主要包括 NOR 与 NAND 两类 |
原稿说“最早期 ROM 只能读,不能写”需要拆成两个阶段理解:Mask ROM 的内容在制造时已经写定;PROM 则允许用户在出厂后编程一次。两者都不应与现代可读写硬盘混为一谈。
课程展示的 AT24C02C 是 I²C 兼容串行 EEPROM。型号中的 02 表示 2 Kbit,其内部组织为 256 × 8 bit,因此容量换算是:
2 Kbit ÷ 8 bit/Byte = 256 Byte
所以 24C02 不是 2 KB,更不是 2 KiB。Microchip 原厂将 AT24C02C 明确标为 “2Kb I²C compatible 2-wire Serial EEPROM”。Microchip:AT24C02C 产品页
常见 24Cxx 容量可按下表建立量级概念,但页大小、地址字节数、工作电压、I²C 速率、写保护、耐久度和具体命名仍要查所用厂商的完整料号手册。
| 常见型号后缀 | 标称容量 | 换算后的字节容量 |
|---|---|---|
| 02 | 2 Kbit | 256 B |
| 04 | 4 Kbit | 512 B |
| 08 | 8 Kbit | 1 KiB |
| 16 | 16 Kbit | 2 KiB |
| 32 | 32 Kbit | 4 KiB |
| 64 | 64 Kbit | 8 KiB |
| 128 | 128 Kbit | 16 KiB |
| 256 | 256 Kbit | 32 KiB |
这类 EEPROM 适合保存设备编号、校准参数、小量配置和掉电保持状态。它并不是大容量文件存储器;写操作还有页边界、内部写周期和有限擦写寿命,不能按 RAM 的方式无限高速改写。
1.3.1 只读存储器百度百科
ROM 名称保留至今,是因为这个家族最初以“读取为主、内容稳定”为核心用途,不代表所有后来归入该家族的技术都永久不可写。EPROM、EEPROM 和 Flash 都能以不同条件重新编程。
也不能因为 HDD、SSD 能掉电保存数据,就把它们统称为 ROM:
- HDD 是磁存储设备,可正常读写;
- SSD 通常是 NAND Flash 加控制器组成的块存储设备,也可正常读写;
- ROM/PROM/EPROM/EEPROM/Flash 是半导体存储技术或器件类别;
- “硬盘”是产品类别,可能特指机械 HDD,也常被口语泛指电脑中的长期存储,因此必须结合上下文。
传统 EEPROM 与 Flash 都属于电可擦除的非易失半导体存储,但擦写粒度通常不同。传统 EEPROM 常可按字节更新;Flash 一般要求按页编程、按块或扇区擦除。不能把“EEPROM 下分 NOR/NAND”机械理解成所有 EEPROM 器件都采用 NOR 或 NAND 接口。Microchip:EEPROM 与 Flash 的擦写粒度
1.3.2 EPROM 百度百科
EPROM 的典型陶瓷封装顶部有石英窗口,紫外线通过窗口照射存储阵列以完成擦除。视频中提到的贴纸不是芯片内部的“防晒标签”,而是覆盖窗口的不透光标签,用于避免阳光或荧光灯长期照射导致意外擦除。ST 的 UV EPROM 手册也明确建议长期暴露时用不透明标签覆盖窗口。ST:M27W256 UV EPROM 数据手册
没有窗口的同类器件常作为 OTP 使用,即只能编程一次。EPROM 今天已不是主流通用存储方案,但“过时”不等于任何旧设备中都不存在;维护遗留设备时仍可能遇到。
EEPROM 的关键区别是电擦除,不需要紫外线。AT24C02C 采用 I²C 两线接口,适合作为小容量掉电存储实验器件;本视频只展示商品页面和概念,没有编写读写程序,因此本节不能凭空补入 EEPROM 业务源码。
1.4 NOR Flash 和 NAND Flash 的不同
应规范写成 NOR Flash 和 NAND Flash。两者名称来自存储阵列连接结构,都属于非易失 Flash,但访问接口、读写粒度、容量、成本和软件管理方式差异明显。
| 对比项 | NOR Flash | NAND Flash |
|---|---|---|
| 读取特征 | 擅长较小粒度、低延迟的随机读取;并行 NOR 可像内存一样按字节/字访问 | 原始 NAND 通常先把一页读入内部缓存,再从缓存输出数据 |
| 编程/擦除 | 按字或页编程,按扇区/块擦除,具体粒度看器件 | 按页编程、按块擦除 |
| XIP | 存储器映射且处理器/控制器支持时可 Execute in Place | 原始 NAND 通常不能直接取指,需把启动镜像装入 RAM 后执行 |
| 容量与成本 | 通常容量较小、每比特成本较高 | 密度高、每比特成本较低,适合大容量数据 |
| 软件管理 | 相对直接,仍需处理擦写和寿命 | 需要 ECC、坏块管理、磨损均衡等;可由主机或封装内控制器承担 |
| 常见用途 | 启动固件、XIP 代码、小容量可靠数据 | eMMC、UFS、SSD、SD/microSD、U 盘及原始 NAND 存储 |
原稿的“NOR 每个比特都可寻址,一次读一个字节”不准确。处理器接口通常按字节或字寻址,不是对单个 bit 任意寻址;串行 NOR 还要通过 SPI/QSPI 命令读取。NOR 适合 XIP 也有前提:器件接口和主控必须共同支持存储器映射或相应连续读取模式。Micron 将 NOR 的典型用途列为启动、应用、操作系统和 XIP 代码存储。Micron:NOR Flash
“NAND 一次只能读一个数据块”也不严谨。原始 NAND 的基本读取/编程单位通常是页,擦除单位才是块;eMMC、SSD、SD 卡等带控制器设备又向主机提供逻辑块地址,隐藏了部分底层页、块、ECC 和坏块细节。
课程开发板尤其需要纠正:视频商品页中的两种核心板不是“8 GB eMMC 对 512 MB NOR”。课程随附《i.MX6ULL 终结者开发板使用手册》第 28 页给出的配置是:
| 核心板版本 | 主存 | 非易失存储 |
|---|---|---|
| 商业级 | 512 MB DDR3 | 8 GB eMMC,KLM8G1GET |
| 工业级 | 256 MB DDR3 | 512 MB 原始 NAND Flash,MT29F4G08ABADAWP-IT |
因此,课程购买的商业级板使用 eMMC;工业级 512 MB 版本使用的是原始 NAND Flash,不是 NOR Flash。这里的“商业级/工业级”描述温度等级和产品等级,不是 NOR/NAND 的分类。
封装外形同样不能用于判断 NOR/NAND:NOR、原始 NAND 和 eMMC 都可能采用不同的引脚封装或 BGA 封装。必须根据芯片丝印查完整料号和数据手册。eMMC 的典型组成是 NAND Flash、控制器和标准化主机接口集成在一个标准 BGA 封装内;控制器负责 ECC、坏块管理、磨损均衡和地址映射等工作。Micron:eMMC 的组成与管理功能
i.MX6ULL 的启动过程也不能简化成“把整个 eMMC 搬到内存”:
复位
→ SoC 内部不可改写的 Boot ROM 开始执行
→ 根据 BOOT_MODE 与 BOOT_CFG/eFuse 选择 eMMC、SD、NAND、QSPI 等启动源
→ Boot ROM 读取并校验启动镜像头和配置数据
→ 把需要执行的初始引导镜像装入片内 RAM 或 DDR
→ 跳转到 U-Boot
→ U-Boot 再把 Linux 内核和设备树装入 DDR
→ Linux 启动并从 eMMC/NAND/网络等位置挂载根文件系统
Boot ROM 固化在 i.MX6ULL 芯片内部,不在 eMMC 中;它只装载启动所需镜像,不会把 8 GB eMMC 的全部内容复制到 DDR。NXP 数据手册列出了 96 KB Boot ROM、128 KB OCRAM,以及 raw/managed NAND、NOR、eMMC 等外部存储接口。NXP:i.MX 6ULL 数据手册
对于支持映射执行的 NOR,早期代码可在合适的硬件配置下直接从 NOR 取指;但实际系统仍常把性能敏感代码或完整操作系统加载到 RAM。能否 XIP 取决于 SoC、总线、控制器、Flash 模式和链接地址,不能只看到“NOR”三个字就断言一定直接运行。
1.4.1 NOR Flash 和 NAND Flash 的区别
“NOR 适合代码、NAND 适合数据”是用途倾向,不是绝对限制。NOR 也能保存数据,NAND 也能保存启动镜像和程序文件;真正差别在于访问与管理方式。
常见 NAND 产品还要分成两层:
- 原始 NAND:主控直接面对页、块、坏块和 ECC,Linux 中常由 MTD、UBI、UBIFS 等子系统管理;
- 托管 NAND:eMMC、UFS、SSD、SD/microSD 和 U 盘把 NAND 与控制器组合起来,通常向主机提供逻辑块设备接口。
这些产品不是 NAND 芯片“变形成的同一种东西”,而是以 NAND 为介质、叠加不同控制器、固件、协议、封装和可靠性策略形成的设备。Micron 的资料明确把 eMMC 描述为“高容量 NAND 加 MMC 控制器的单 BGA 封装”,并把 SSD、SD/microSD 和 USB Flash 列为不同 NAND 解决方案。Micron:Choosing the right NAND
原稿的“硬盘都使用 NAND”必须区分:
- SSD 通常使用 NAND Flash;
- 机械硬盘 HDD 使用旋转磁性盘片,不使用 NAND 作为主要数据介质;
- 口语只说“硬盘”会产生歧义,应明确写 HDD 还是 SSD。
价格也不是永远固定的结论。通常 NOR 每比特成本高于 NAND,但具体器件价格还受到容量、制程、温度等级、寿命、供应周期、封装和采购量影响,选型时应比较实际料号。
1.4.2 SD 卡和 TF 卡的区别
TF 是 TransFlash/T-Flash 的旧名称。该小尺寸卡后来被 SD Association 标准化并改名为 microSD;今天的 TF 卡通常就是市场对 microSD 卡的旧称,不是与 SD 协议完全不同的另一类卡。SD Association:microSD 原名 TransFlash
更准确的关系是:全尺寸 SD 与 microSD 是 SD 标准家族中的两种外形规格。它们在尺寸、引脚数量和是否有机械写保护开关等方面不同,但不能概括成“SD 有安全保护、TF 没有安全保护”。
| 对比项 | 全尺寸 SD | microSD(旧称 TF/TransFlash) |
|---|---|---|
| 外形 | 较大 | 更小,常用于手机和嵌入式设备 |
| 机械写保护开关 | 卡体通常有 | 卡体没有;转接为全尺寸 SD 时可由转接卡提供 |
| 协议家族 | SD | SD |
| 典型介质 | NAND Flash 加控制器 | NAND Flash 加控制器 |
全尺寸 SD 卡侧面的写保护拨片只是向主机表达“请勿写入”的机械状态,是否真正阻止写入还依赖读卡器和主机遵守;它不是数据加密开关。SD 标准确实定义过 CPRM 内容保护等能力,但自 2018 年的规范更新后 CPRM 可以是可选功能,不能据此断言所有 SD 有而所有 microSD 没有。SD Association:SD 与 microSD 外形比较、SD Association:CPRM 说明
eMMC 与 SD/microSD 都常以 NAND 为介质,也都由控制器向主机隐藏部分底层管理,但产品定位不同:SD/microSD 是可插拔存储卡;eMMC 是焊接在 PCB 上的嵌入式器件,通过 MMC/eMMC 接口连接 SoC。eMMC 常见为标准 BGA 封装,但仅凭“底部有焊球、外形方正”仍不能识别器件类型,必须查丝印、原理图和 BOM。
本节应形成的最终认知不是死记外观,而是为任何存储器依次回答:
- 它是易失还是非易失?
- 读、编程和擦除的最小粒度分别是什么?
- 主机看到的是物理地址、页/块,还是控制器提供的逻辑块?
- 是否需要刷新、ECC、坏块管理或磨损均衡?
- 能否 XIP,若能,需要哪些主控和接口条件?
- 它在本系统中保存的是启动程序、运行期数据、文件系统还是少量配置?
按这六个问题分析,就不会再把寄存器、RAM、ROM、Flash、eMMC、SD 卡和硬盘混在同一个抽象层次中。