存储⑤——深入浅出SSD-SSD存储介质:闪存
闪存物理结构
SLC、MLC、TLC和QLC
SLC(Single Level Cell):一个存储单元存 1bit数据
MLC(Multiple Level Cell):一个存储单元存 2bit数据
TLC(Triple Level Cell):一个存储单元存 3bit数据
QLC(Quad-Level Cell):一个存储单元存 4bit数据
规律:n bit的单元共有2的n次方个状态,单元存储 bit 数越多,单位容量成本越低,但寿命、性能会随之下降
闪存芯片组织方式
NAND 闪存由大到小层级:
颗粒封装→Die 裸片→Plane 平面→Block 擦除块→Page 页→Cell 存储单元。
Cell(存储单元):基础存储单元,分 SLC/MLC/TLC/QLC,单单元存 1~4bit;
Page(页):读写最小单位;
Block(擦除块):擦除最小单位;
Plane(平面/Bank)/Die(裸片/晶粒):支持并行操作,提升读写性能。
关键操作边界
①读、写(Program):最小单位 Page
②擦除(Erase):最小单位 Block
③硬件并行单元:Plane、Die、独立 Package 颗粒
④容量密度 / 寿命区分:最底层 Cell 类型(SLC→QLC 容量升高、擦写寿命递减)
闪存实战
闪存命令集
闪存寻址
两种闪存寻址体系:五层硬件层级寻址(控制器全局寻址)和ONFI行列地址寻址(颗粒内部总线寻址)
五层硬件层级寻址
①定义:SSD 控制器管理多颗闪存颗粒时,从整机阵列到存储页的完整分层定位链路,覆盖外部多颗粒硬件阵列 + 颗粒内部全部层级。
②寻址分段(从高位到低位,逐级筛选)
颗粒号:多颗粒阵列,通过片选信号选定目标封装芯片;
Die (LUN) 号:选中芯片内独立裸片,Die 可并行读写;
Plane 号:Die 内平面,地址占用 Block 地址最低 bit,支持多平面并发操作;
Block 地址:擦除最小单元,磨损均衡、垃圾回收操作单位;
Page 地址:读写最小单元,定位块内目标数据页。
③核心用途:控制器侧硬件调度、并发管理、FTL 逻辑地址转完整物理地址,覆盖多颗粒整机架构。
ONFI(Open NAND Flash Interface/开放 NAND 闪存接口) 行列地址寻址
①定义:控制器下发给单颗闪存颗粒的命令地址规范,仅描述单颗芯片内部的地址,不含外部颗粒片选,分为行、列两段地址。
②两段地址拆分
(1)行地址 Row Address
用于定位到完整一页,等价于五层寻址中「Die+Plane+Block+Page」部分,
ONFI 标准位域结构:
LUN(Die)地址 → Block地址(低位嵌入Plane编号) → Page地址
(2)列地址 Column Address
Page 内部字节偏移,锁定一页内具体读写的数据位置。
③核心用途:闪存芯片底层通信,发送读写 / 擦除命令时传递页地址与页内偏移。
读、写、擦除时序
读时序(命令:00h → 30h)
传输阶段
①先发读命令00h;
②依次传输 5 个地址周期:2 个列地址 (C1/C2)+3 个行地址 (R1/R2/R3);
③发送结束命令30h。
状态与数据输出
①发完30h后,状态寄存器SR[6]置 Busy,闪存将 Page 数据载入页缓存;
②等待tWB、tR等就绪延时,SR[6]变回 Ready;
③通过 DQx 总线输出页数据 DOUT。
特点:地址包含列偏移,支持读取页内任意位置数据。
写(编程)时序(命令:80h → 10h)
传输阶段
①先发写起始命令80h;
②传输地址:2 列地址 + 3 行地址,完整写入时列地址通常为 0;
③等待tADL延时后,向闪存页寄存器传输待写入数据 DIN;
④数据全部下发后,发送编程确认命令10h。
状态与介质编程
①收到10h后SR[6]置 Busy,闪存执行介质编程tPROG;
②编程完成后SR[6]切为 Ready,写操作结束。
关键约束:不从头整页写入易引发数据错误。
块擦除时序(命令:60h → D0h)
传输阶段
①先发擦除起始命令60h;
②仅传输 3 个行地址 R1/R2/R3(无列地址,擦除最小单位为 Block,无需页内偏移);
发送擦除确认命令D0h。
状态与擦除动作
①收到D0h后SR[6]置 Busy,执行块擦除tBERS;
②擦除完成后SR[6]恢复 Ready。
特点:只需要 Block 行地址,单次擦除整 Block 内所有 Page。
闪存特性
闪存寿命
以 P/E 擦写循环衡量,SLC>MLC>TLC>QLC,单元存储比特越多寿命越短;靠磨损均衡、冗余 OP 空间、降低写放大来延长整体寿命。
MLC 使用特性
一个存储单元存 2bit,一根字线分高低两页,需按顺序编程;
电荷区间窄,读写干扰更强、擦写寿命弱于 SLC,但存储密度更高、成本更低,需要更强 ECC 纠错。
读干扰
原理:对同一 Block 内任意 Page 执行读取操作时,读取电压会轻微改变同字线相邻存储单元的电荷,多次高频读取后,相邻 Cell 电荷偏移,出现比特错误。
关键规则
①干扰范围:仅影响同一 Block内未擦除的其他 Page,跨 Block 无影响;
②触发条件:上万次重复读同一 Block 后故障概率显著上升;
③应对方案:
1.后台刷新:高频读取的 Block 定期重新编程,恢复偏移电荷;
2.均衡读访问逻辑,避免长期集中读取同一个 Block;
3.ECC 实时修正读干扰产生的少量错误比特。
数据保存期
定义:指闪存断电后,电荷稳定留存、数据可正确读出的最长时间,核心影响因素:
颗粒类型:SLC > MLC > TLC > QLC,比特越多,电荷区分窗口越小,保存时间越短;
老化程度:Block 擦写次数越接近寿命上限,电荷泄漏速度越快;
温度环境:高温大幅加速电荷流失,低温有利于长期保存。
闪存数据完整性
闪存随使用、存储时长增加易出现比特翻转,制程越小故障越突出
读错误来源
闪存数据发生错误,主要有以下几个原因:
①擦写老化:P/E 次数增多,氧化层老化,电荷不稳,原始误码率上升。
②电荷流失:断电后电子缓慢泄漏,阈值电压左移,电平判读出错。
③读干扰:频繁读同块,加压造成相邻单元轻微充电,阈值电压右移。
④单元耦合:相邻 Cell 电容互相干扰,周边状态改变会偏移自身阈值电压。
⑤原生写错误:MLC 两段编程依赖低位页数据,底层出错会直接写入错误电平。
SSD 依靠 5 类技术保障数据可靠:
①ECC 纠错:校验并修正页内少量比特错误;
②RAID 数据恢复:多颗粒冗余,单颗颗粒损坏可恢复数据(固态硬盘的RAID一般采用RAID 5。);
(RAID 5:由至少 3 块硬盘组成,数据与校验信息分散存储在所有磁盘上,无单独校验盘。任意一块盘损坏时,可通过其余盘的数据 +校验位计算还原丢失数据)
③重读 Read Retry:调整读取电压重试,修复阈值偏移引发的读错;
④扫描重写 Read Scrub:后台巡检冷数据,提前刷新衰减页面;
⑤数据随机化:打散规律电平分布,降低单元间耦合干扰。