NAND闪存工作原理——SSD数据是如何存储的?
摘要:SSD 没有机械零件,却能高速读写数据,秘密就在于 NAND 闪存芯片。本文从浮栅晶体管出发,拆解 NAND 闪存如何用电荷存储 0 和 1,以及 Program、Read、Erase 三大操作的底层原理。
一、从硬盘到闪存:存储介质的革命
在机械硬盘(HDD)中,数据存储在高速旋转的磁盘上,通过磁头改变磁性颗粒的极性来表示 0 和 1。这种结构天生受限于物理转速(5400/7200 RPM),随机读写延迟在毫秒级。
SSD 彻底抛弃了机械结构,数据存储在半导体芯片中——这就是NAND 闪存。它带来三个根本性变化:
| 特性 | HDD | NAND SSD |
|---|---|---|
| 存储介质 | 磁性盘片 | 浮栅/电荷捕获晶体管 |
| 读写延迟 | ~5-10 ms | ~25-100 μs |
| 抗震性 | 差(有机械运动) | 极好(纯固态) |
| 数据保持 | 磁性可长期保持 | 需定期刷新(电荷会泄漏) |
💡关键洞察:NAND 闪存的"非易失性"(断电不丢数据)是所有 SSD 应用的基石。
二、NAND 闪存的最小单元:浮栅晶体管(Floating Gate Transistor)
2.1 结构解析
NAND 闪存的基本存储单元是一个特殊的 MOS 晶体管,称为浮栅晶体管(Floating Gate Transistor, FG)。它的结构比普通的逻辑晶体管多了一层"浮栅":
┌─────────────────────────┐ │ Control Gate │ ← 控制栅(施加电压的端子) ├──── IP Interpoly ────────┤ ← 绝缘层(ONO:氧化-氮化硅-氧化) │ Floating Gate (FG) │ ← 浮栅(被绝缘体包围,存储电荷) ├──── Tunnel Oxide ────────┤ ← 隧穿氧化层(~8-10nm 极薄绝缘层) │ Silicon Substrate │ ← 硅基底(沟道区) └─────────────────────────┘核心要点:浮栅被绝缘材料完全包围,电子一旦注入就很难逃逸——这就是 NAND 能断电保持数据的物理原理。
2.2 数据如何存储:电荷 = 信息
存储数据的过程就是向浮栅注入或移除电子的过程:
# 简化的状态表示defread_cell(floating_gate):"""读取一个闪存单元的状态"""iffloating_gate.has_electrons():# 浮栅中有电子 → 阈值电压升高 → 判定为逻辑 0(编程态)return0# Programmed stateelse:# 浮栅中无电子 → 阈值电压正常 → 判定为逻辑 1(擦除态)return1# Erased state# 注意:NAND 的逻辑是"反相"的!# 有电子 = 0(编程后),无电子 = 1(擦除后)⚠️反直觉设计:NAND 闪存出厂默认状态是全 1(擦除态),写入数据是把 1 变成 0。这就是为什么 SSD 的 TRIM 和垃圾回收机制如此重要——后面几期会详细讲解。
三、三大核心操作:Program、Read、Erase
3.1 Program(编程/写入)—— 把电子"灌"进浮栅
编程使用F-N 隧穿效应(Fowler-Nordheim Tunneling):
- 在控制栅(Control Gate)施加高正电压(~15-20V)
- 硅基底接地(0V)
- 强电场使电子获得足够能量,"隧穿"过极薄的隧穿氧化层
- 电子被捕获在浮栅中
编程过程示意: Control Gate: +20V ████████████████ ↓↓↓ F-N隧穿 ↓↓↓ Floating Gate: 捕获电子 e⁻e⁻e⁻ ↑↑↑ 隧穿氧化层 ↑↑↑ Substrate: 0V (接地)编程是逐页(Page)进行的,一个 Page 通常为 4KB-16KB。
3.2 Read(读取)—— 检测浮栅有没有电子
读取操作不会改变浮栅中的电荷状态(非破坏性读取):
- 在控制栅施加一个参考电压(Vref)
- 检测晶体管是否导通:
- 导通→ 阈值电压低 → 浮栅无电子 → 数据为1
- 截止→ 阈值电压高 → 浮栅有电子 → 数据为0
# 读取操作的简化逻辑defread_nand_cell(cell,vref=3.0):""" vref: 参考电压(Read Verify Voltage) 如果 cell 的 Vth > vref → 晶体管不导通 → 输出 0 如果 cell 的 Vth < vref → 晶体管导通 → 输出 1 """vth=cell.threshold_voltage# 当前单元的阈值电压ifvth>vref:return0# 编程态(电子在浮栅中)else:return1# 擦除态(浮栅为空)3.3 Erase(擦除)—— 把电子"拉"出浮栅
擦除使用带间隧穿(Band-to-Band Tunneling),方向与编程相反:
- 在硅基底施加高正电压(~20V)
- 控制栅接地或负电压
- 电子被"拉"出浮栅,回到基底
擦除是按块(Block)进行的,一个 Block 包含数百到数千个 Page:
| 操作 | 粒度 | 速度 | 对寿命的影响 |
|---|---|---|---|
| Program | Page(4-16KB) | ~数百 μs | 每次写入消耗寿命 |
| Read | Page(4-16KB) | ~数十 μs | 几乎无损耗 |
| Erase | Block(2-8MB) | ~数 ms | 每次擦除消耗寿命 |
🔑最重要的规则:NAND 闪存不能覆盖写入。要修改数据,必须先擦除整个 Block,再重新编程。这就是 SSD 控制器必须实现垃圾回收(GC)和磨损均衡(WL)的根本原因。
四、NAND 闪存的物理限制与磨损机制
4.1 为什么 NAND 有寿命限制?
每次 Program/Erase 循环(P/E Cycle),高电压都会对隧穿氧化层造成微小的损伤:
新单元: SiO₂ 完美绝缘 → 电子自由隧穿 ✅ 1000次后: SiO₂ 出现缺陷态 → 隧穿效率下降 ⚠️ 10000次后: SiO₂ 严重退化 → 电子泄漏/保持不住 ❌这就是P/E 寿命(Endurance)的物理根源。不同类型的 NAND 有不同的 P/E 寿命(Day 3 详讲)。
4.2 数据保持问题(Data Retention)
浮栅中的电子会随时间自然泄漏(尤其是高温环境下):
编程后: 浮栅电子量 ████████████ → Vth = 4.5V(稳定为0) 1年后: 浮栅电子量 ████████░░░░ → Vth = 3.2V(仍可读取) 3年后: 浮栅电子量 █████░░░░░░░ → Vth = 2.0V(读取可能出错!)这就是为什么:
- SSD 需要定期通电(让控制器做 Read Scrubbing,发现并修正弱数据)
- 长期断电存放的 SSD 可能出现数据丢失
- 企业级 SSD 会监控温度-时间关系来主动刷新数据
五、NAND 的组织结构:Channel、Die、Plane、Block、Page
NAND 闪存不是简单的线性数组,它有严格的层级结构:
SSD 整体 └── Channel(通道)× 4~8 ← 并行总线,每个通道独立传输 └── Die(裸片)× 1~8 ← 每个通道上挂载多个 Die └── Plane(平面)× 1~4 ← 每个 Die 内的独立区域 └── Block(块)× 256~2048 ← 最小擦除单位 └── Page(页)× 128~512 ← 最小读写单位 └── Cell(单元) ← 最小存储单位(1个晶体管)为什么要这么多层级?答案是并行度:
# 单通道 vs 多通道的吞吐量对比defcalc_throughput(channels,dies_per_ch,plane_size_kb):"""计算 SSD 的最大并行吞吐量"""# 同一时刻,每个通道的每个 Die 可以独立操作total_parallel=channels*dies_per_ch throughput=total_parallel*plane_size_kb# KB per operationreturnthroughput# 例:8通道 × 4Die × 8MB Planeprint(calc_throughput(8,4,8192))# = 262,144 KB ≈ 256 MB/次操作💡这就是为什么通道数(Channel Count)是衡量 SSD 性能的关键指标——通道越多,并行度越高,吞吐越大。
六、NAND 闪存的接口协议:Toggle DDR 与 ONFI
NAND 芯片与 SSD 控制器之间的通信遵循两种主要协议:
| 协议 | 全称 | 主导厂商 | 特点 |
|---|---|---|---|
| Toggle DDR | Toggle Mode DDR | 三星、SK海力士 | 源同步时钟,高速率 |
| ONFI | Open NAND Flash Interface | 美光、西部数据 | 开放标准,兼容性广 |
两种协议的最新版本都达到了2400 MT/s以上的传输速率,但它们是互不兼容的。
七、3D NAND:从平面到立体的飞跃
传统 2D NAND 的瓶颈在于光刻精度——单元越小,干扰越大。行业在 2015 年转向3D NAND,通过堆叠层数来增加容量:
2D NAND(俯视): 3D NAND(侧视): ┌──┬──┬──┬──┐ ┌──┐ ← Layer 128 │C1│C2│C3│C4│ ├──┤ ← Layer 127 ├──┼──┼──┼──┤ ├──┤ ← Layer 126 │C5│C6│C7│C8│ │..│ └──┴──┴──┴──┘ └──┘ ← Layer 1 所有单元在同一平面 单元垂直堆叠| 代际 | 层数 | 代表产品 | 单Die容量 |
|---|---|---|---|
| 早期3D | 32L | 三星V-NAND 1代 | 256Gb |
| 中期 | 64-96L | 美光96L TLC | 512Gb-1Tb |
| 当代 | 128-236L | 长江存储X3-9070 | 512Gb-1Tb |
| 前沿 | 300L+ | 三星V9/美光G9 | 1Tb+ |
🔑3D NAND 的核心优势:不靠缩小单元尺寸,而是靠增加层数来提升密度,同时单元间的干扰大幅降低,寿命和性能反而更好。
当日知识点小结
| 知识点 | 要点 |
|---|---|
| 存储单元 | 浮栅晶体管,通过捕获/释放电子表示 0/1 |
| 反相逻辑 | 无电子=1(擦除态),有电子=0(编程态) |
| 编程 | F-N 隧穿注入电子,按 Page 粒度 |
| 擦除 | 反向隧穿移除电子,按 Block 粒度 |
| 不可覆盖写 | 必须先擦后写 → 引出 GC 和 WL 机制 |
| 磨损机制 | 隧穿氧化层退化 → P/E 寿命限制 |
| 数据保持 | 电荷会泄漏 → 需定期 Read Scrubbing |
| 层级结构 | Channel > Die > Plane > Block > Page > Cell |
| 3D NAND | 堆叠层数替代缩小尺寸,密度↑干扰↓ |
思考题
为什么 NAND 闪存"不能覆盖写入"这个特性,给 SSD 控制器设计带来了巨大的复杂性?提示:想想如果操作系统要修改一个 4KB 文件,SSD 内部需要做什么。
一块 SSD 在温暖潮湿的环境中长期不通电,和放在干燥阴凉处不通电,哪个更容易丢数据?为什么?提示:从电荷泄漏的物理机制思考。
3D NAND 从 64 层升级到 236 层,单层单元尺寸反而变大了,但 SSD 容量却在增长。请解释这背后的原理。
