第四章:存储器子系统¶
——“从晶体管到文件系统”的完整拆解
本章沿用“类型→物理原理→关键参数→典型器件→选型陷阱→实战代码/波形”的六步框架,把每一种存储器都讲成“能落地”的工程笔记。可直接当“芯片级存储手册速查表”。
──────────────────
1 RAM 家族总览¶
1.1 SRAM(Static RAM)¶
• 原理:6 个晶体管组成双稳态触发器,掉电即失。
• 速度:STM32H7 的 AXI-SRAM 64-bit 总线,480 MHz,带宽≈ 3.84 GB/s。
• 功耗:待机电流 1–2 µA/Mbit(TSMC 28 nm),活跃功耗随频率线性增长。
• 用途:
– MCU 内部 192 KB SRAM1/2/3(DTCM/ITCM)
– L2/L3 Cache(Cortex-A53 512 KB L2)
• 选型陷阱:
– 高速 SRAM 引脚多、封装大(BGA 36-ball),PCB 布线长度差 < 2 mm。
– 温度漂移:-40 ℃ 时访问时间 +15 %。
1.2 DRAM(Dynamic RAM)¶
• 原理:1T1C 电容存储,需刷新(64 ms 周期)。
• 分类:
– SDRAM(同步)→ DDR → DDR2 → DDR3 → DDR4 → LPDDR4/5
• 关键参数:
– 容量:单片 128 Mb–16 Gb
– 频率:DDR4-3200 实际 1600 MHz×2(双边沿)
– 时序:tRCD 15 ns / tCL 14 ns,影响随机读写延迟
• 用途:i.MX8M Mini 外接 2 GB LPDDR4 作为 Linux 主存
• 坑:
– 上电初始化需 PHY + 300 µs 延迟 + 多寄存器 MRS;
– 走线阻抗 40 Ω±10 %,差分对长度差 < 5 mil。
1.3 PSRAM(Pseudo-SRAM)¶
• 接口:SPI/QSPI 8-bit 复用地址/数据,命令 0x02 写、0x03 读
• 容量:8 M–64 M × 8-bit(AP Memory APS6404L)
• 速度:SPI 模式 133 MHz,等效 133 MB/s(单线)
• 用途:ESP32-S3 外挂 8 MB PSRAM 做“堆+栈”扩展
• 优势:无需 DDR PHY,走线少;劣势:延迟 100 ns > SRAM 10 ns
──────────────────
2 ROM 家族总览¶
2.1 传统掩膜 ROM¶
• 原理:光刻决定 0/1,量产成本低至 0.01 $/Mbit,但无法修改。
• 用途:老式游戏机卡带、汽车 ECU 固化的启动 BootROM(安全性高)。
2.2 Flash 两大阵营¶
2.2.1 NOR Flash ——“可直接执行”¶
• 单元:1 bit/cell(SLC),读取随机寻址,支持 XIP
• 容量:512 Kb–2 Gb(Winbond W25Q256JV 32 MB)
• 速度:SPI 模式下 133 MHz,QSPI 4-line 532 Mb/s
• 用途:
– MCU 外挂启动存储(STM32H7 配置 QSPI 映射 0x9000 0000)
– FPGA 配置 Flash(Xilinx Spartan-7 用 128 Mb NOR)
• 坑:
– Sector 擦除 4 KB 需 45 ms,整片擦除 256 KB 需 3 s;
– 写前必须擦除,否则位只可从 1→0。
2.2.2 NAND Flash ——“高密度仓库”¶
• 单元:SLC/MLC/TLC/QLC,2–4 bit/cell,容量 1 Gb–512 Gb
• 结构:Page(2 KB–16 KB)→ Block(128–256 Pages)
• 特性:
– 读写单位 Page,擦除单位 Block
– 需 ECC(典型 1 bit/512 B SLC,8 bit/512 B TLC)
• 封装:
– Raw NAND(TSOP-48/BGA-63)
– 管理型:eMMC(8-bit HS400 400 MB/s)、SD Card(SPI 或 4-bit SDIO)
• 坑:
– 坏块标记出厂即存在,FTL 需重映射;
– 读取干扰:同一 Block 读 1 万次后相邻位翻转概率 10⁻⁵。
2.3 小容量非易失存储¶
| 类型 | 擦写单位 | 寿命 | 速度 | 典型器件 | 用途 |
|---|---|---|---|---|---|
| EEPROM | Byte | 1 M 次 | 5 ms/page | 24C02 2 Kb | 掉电保持配置、校准系数 |
| FRAM | Byte | 10¹² 次 | 50 ns | MB85RC256V 256 Kb | 掉电数据缓存、黑匣子 |
──────────────────
3 选型速查表(可直接贴进原理图页脚)¶
| 存储器 | 容量范围 | 带宽 | 掉电保持 | 每 MB 价格 | 典型用途 | 注意点 |
|---|---|---|---|---|---|---|
| 内部 SRAM | 4 K–1 MB | 2–4 GB/s | 否 | 0 $ | 堆栈/Cache | 无 |
| 外部 SRAM | 1–8 MB | 200 MB/s | 否 | 0.2 $ | 图形显存 | BGA 布线 |
| LPDDR4 | 512 MB–8 GB | 25 GB/s | 否 | 0.04 $ | Linux 主存 | 上电时序 |
| QSPI NOR | 512 Kb–128 Mb | 133 MB/s | 是 | 0.05 $ | Boot + App | 擦除等待 |
| Raw NAND | 1 Gb–8 Gb | 40 MB/s | 是 | 0.01 $ | 数据分区 | 坏块表 |
| eMMC | 4 GB–128 GB | 400 MB/s | 是 | 0.02 $ | 系统盘 | 掉电保护 |
| EEPROM | 1 Kb–512 Kb | 5 kB/s | 是 | 0.5 $ | 参数表 | 写前擦除无 |
──────────────────
4 实战:一种常见“三层存储”架构¶
• BootROM(芯片内部)→ 验证签名 → SPI NOR(8 MB)XIP 启动
• Linux 根文件系统 → eMMC(8 GB)
• 运行期临时日志 → PSRAM(8 MB)环形缓冲,掉电前 50 ms 刷入 eMMC
──────────────────
5 硬件工程师一页 Checklist¶
[ ] 启动介质:NOR 支持 XIP?地址线能否直连?
[ ] RAM:DDR 时钟 ≤ 控制器最大频率 × 0.9(留裕量)
[ ] 掉电保持:关键参数存 EEPROM/FRAM 而非 NAND
[ ] 擦写寿命:日志放在 NAND 时需磨损均衡算法 + 预留 20 % 空间
[ ] 封装:BGA 球距 0.65 mm 以下需激光钻孔板,成本 +30 %
这张表解决90 % 的存储器选型问题。
SRAM 与 DRAM 的核心区别¶
可归结为“存储单元结构、速度、功耗、容量成本、刷新需求”五大要素,一句话记忆:
SRAM 是“触发器仓库”,DRAM 是“电容仓库”。
| 维度 | SRAM (Static RAM) | DRAM (Dynamic RAM) |
|---|---|---|
| 存储单元 | 6 个晶体管触发器(双稳态) | 1 个晶体管 + 1 个电容 |
| 速度 | 快(纳秒级,CPU Cache/TCM) | 慢一个量级(十纳秒级,主存) |
| 功耗 | 静态功耗低,但面积大使总功耗不一定更低 | 需周期性刷新(64 ms),动态功耗高 |
| 容量/成本 | 低容量、高成本(>10× DRAM $/bit) | 高容量、低成本 |
| 刷新 | 无需刷新 | 必须刷新,否则电容漏电 → 数据丢失 |
| 用途 | MCU 内部 RAM、L2/L3 Cache | 外部大容量主存(DDR4/LPDDR4) |
速记口诀:¶
SRAM:快、贵、无刷新;DRAM:慢、廉、需刷新。
DRAM为什么需刷新¶
因为 DRAM 的存储单元是一只微型电容(1T1C)。
电容会漏电——即使断电与否,电荷也会在几十毫秒内逐渐流失。
如果电荷量掉到判别阈值以下,原来的 “0/1” 就会翻转成错误数据。
因此控制器必须在标准 64 ms 刷新周期内,把所有行(Row)依次读-放大-写回,给电容重新充满电荷,才能保持信息不丢失。这就是“定期刷新”的根本原因。
DRAM的刷新频率能调整吗?¶
可以调,但不是“任意改”,而是有条件、分场景地调,且必须保证数据不丢。
1 温度是主要调节变量¶
• JEDEC 规定:0-85 ℃ 时 tREFI = 7.8 µs(≈ 64 ms 全片刷新一次);
85-95 ℃ 时 tREFI 减半(≈ 32 ms),温度再高再减半 。
• DDR4/LPDDR4 支持 TCSR(Temperature-Compensated Self-Refresh):
通过读取 MR4 的温度标志位,控制器自动把刷新间隔拉长或缩短 。
2 系统级动态调频¶
• 专利/芯片实现:在 SR(Self-Refresh)模式下先停时钟,再切频率,然后恢复刷新 ;
切频期间 DRAM 用内部时钟维持刷新,避免数据丢失。
• 统计带宽利用率后,BIOS/固件可下发“目标刷新间隔”命令,实现“低频-低功耗”或“高频-高性能” 。
3 软件/BIOS 可调接口¶
• 服务器 BIOS 通常提供 Auto / 1x / 2x / 4x tREFI 选项,Auto 档会根据温度传感器自动切换 。
• 嵌入式场景(LPDDR)可通过 PASR(Partial Array Self-Refresh) 只刷新部分 bank,等效降低刷新频率 。
结论¶
刷新频率不能随意设定,但可在“温度、功耗、性能”三者权衡下由控制器或BIOS按规范动态调整,并借助 SR/TCSR/PASR 等机制确保数据完整性。