一、NAND闪存概述:从存储介质到接口协议的演进之路
1.1 存储介质的本质:浮栅晶体管
说起NAND闪存,咱们得从最底层的存储单元聊起。
它的核心,其实就是一个浮栅晶体管。你想想看,普通的MOS管只有一层栅极,而NAND的晶体管多了一层——浮栅。这层浮栅被绝缘层包裹着,像个孤岛。电子一旦注入进去,就被困住了,断电也不会跑掉。
我个人习惯把浮栅比作一个水桶。充电就是往桶里倒水,放电就是把水倒掉。桶里有没有水,就代表了“0”和“1”。
关键点:浮栅晶体管通过控制栅极电压来改变阈值电压,从而实现数据存储。阈值电压的高低,决定了存储的数据是0还是1。
1.2 从SLC到QLC:容量与寿命的博弈
早期的NAND闪存,一个存储单元只存1个bit,这叫SLC(单层单元)。
后来大家觉得容量不够用,就开始琢磨:能不能在一个单元里存2个bit?于是MLC(多层单元)诞生了。再后来,TLC(3层单元)存3个bit,QLC(4层单元)存4个bit。
听起来很美好对吧?但代价是什么呢?
我举个例子你就明白了。SLC只需要区分两种状态:有电和没电。MLC需要区分4种电压状态,TLC需要8种,QLC需要16种。状态越多,电压窗口就越窄,干扰就越敏感。
| 类型 | 每单元bit数 | 电压状态数 | 典型擦写次数 |
|---|---|---|---|
| SLC | 1 | 2 | 10万次 |
| MLC | 2 | 4 | 1万次 |
| TLC | 3 | 8 | 3000次 |
| QLC | 4 | 16 | 1000次 |
嗯,这里要注意。QLC虽然容量大,但寿命确实是个硬伤。我在项目中遇到过客户非要上QLC的场景,结果用了不到一年就开始报坏块。后来我们不得不加了一层更激进的磨损均衡算法,才勉强撑住。
1.3 接口协议的演进:从异步到高速串行
说完了介质,咱们聊聊接口。
早期的NAND闪存用的是异步接口。说白了就是:你给个CE(片选)信号,再给个RE(读使能)或WE(写使能),数据就在IO引脚上慢慢传。频率不高,几十兆赫兹的样子。
后来速度需求上来了,出现了同步接口。数据在时钟的上升沿和下降沿都传输,也就是DDR模式。频率一下子翻倍了。
再往后,ONFI和Toggle标准开始打架。ONFI是英特尔和镁光推的,Toggle是三星和东芝推的。两家标准虽然细节不同,但核心思路一致:用DDR方式提高带宽。
我的经验:ONFI和Toggle的电气参数有差异,混用时一定要看数据手册的时序要求。我曾经因为没注意输入电容的差异,导致信号眼图闭合,折腾了两天才找到原因。
到了今天,NAND接口已经演进到NV-LPDDR4甚至更高。说白了,就是把DRAM的高速串行技术拿过来用。速率从几十MT/s飙到了1600MT/s甚至更高。
1.4 核心逻辑:页、块、平面的层级关系
理解NAND的存储结构,你得记住三个层级:
- 页(Page):读写的最小单位。一般是4KB、8KB或16KB。
- 块(Block):擦除的最小单位。一个块包含多个页,通常是256页或512页。
- 平面(Plane):并行操作的单位。一个Die里可以有多个平面,支持多平面操作。
为什么会这样设计?因为NAND的物理特性决定了:写入前必须先擦除,而擦除只能以块为单位。你想想看,如果我想改一个页里的几个字节,得先把整个块读出来,擦掉,再把修改后的数据写回去。这就是所谓的“读-改-写”操作。
避坑指南:我曾经在固件里犯过一个低级错误——没考虑跨平面的页编程顺序。结果导致两个平面的数据互相干扰,读出来全是错的。后来查了芯片手册才发现,多平面操作有严格的时序要求。
1.5 知识体系总览
下面这张图,是我画的本章节知识结构。你可以把它当作一张地图,后面每讲一个知识点,都能在这里找到位置。
1.6 写在开头的话
好了,第一章的内容就到这里。
你可能注意到了,我没有一上来就讲协议细节。因为我觉得,理解NAND闪存,首先要理解它为什么长成这样。存储介质的物理特性,决定了接口协议的设计方向,也决定了整个存储系统的架构。
后面我们会一步步深入,从ONFI协议的命令集,到Toggle的时序参数,再到NV-LPDDR4的物理层设计。每一步,我都会结合自己踩过的坑和积累的经验来讲。
嗯,咱们下一章见。