第2章:NAND Flash基础
各位同学,今天我们来聊聊NAND Flash。说实话,这是整个SSD控制器设计中最绕不开的一环。你想想看,没有Flash,SSD就是个空壳子。我做了十几年存储芯片,每次跟新人聊SSD,我都会说:先把Flash搞明白,后面的路才好走。
2.1 NAND Flash存储原理
NAND Flash本质上是个什么玩意儿?说白了,就是一个能存电子的“小桶”。每个存储单元(Cell)就像一个小水桶,往里面灌电子就是写数据,把电子放出来就是擦除数据。
具体怎么工作的呢?我简单讲一下:
- 浮栅晶体管:这是核心结构。它有两个栅极,一个是控制栅,一个是浮栅。电子被注入浮栅后,即使断电也不会跑掉——这就是非易失性的来源。
- 阈值电压变化:浮栅里电子多了,晶体管的阈值电压就会升高。读数据时,我们施加一个参考电压,看管子通不通,就能判断存的是0还是1。
- 编程(Program):通过Fowler-Nordheim隧穿效应,把电子注入浮栅。我习惯叫它“FN隧穿”,说白了就是高压把电子硬塞进去。
- 擦除(Erase):反向操作,把电子从浮栅里拉出来。注意,擦除是以Block为单位的,不能只擦一个Page。
关键点:NAND Flash的读写单位是Page(页),擦除单位是Block(块)。一个Block通常包含64~256个Page。这个特性直接决定了SSD的GC(垃圾回收)和FTL(闪存转换层)设计。
我的经验:刚入行时,我总搞混Page和Block的关系。有一次调试FTL,因为没搞清楚擦除粒度,导致数据全乱套。嗯,从那以后,我把这个结构图刻在了脑子里。
2.2 SLC/MLC/TLC/QLC区别
这部分是面试高频题。我直接说结论:区别在于每个Cell存几个bit。
| 类型 | 每Cell位数 | 阈值电压状态数 | 典型P/E寿命 | 典型用途 |
|---|---|---|---|---|
| SLC | 1 | 2 | 50k~100k | 企业级、工业级 |
| MLC | 2 | 4 | 3k~10k | 消费级SSD |
| TLC | 3 | 8 | 1k~3k | 主流消费级 |
| QLC | 4 | 16 | 500~1k | 大容量存储 |
为什么会这样?你想想看,一个Cell里存的bit越多,阈值电压的划分就越细。SLC只有两个状态:没电子(1)和有电子(0),简单粗暴。MLC要分4个电压区间,TLC要分8个,QLC要分16个。
电压区间越窄,干扰就越敏感。我在项目中遇到过一个问题:TLC的Read Retry次数比MLC多得多,就是因为电压窗口太小,稍微有点噪声就读不准。
避坑指南:我曾经在选型时只看容量,没考虑P/E寿命。结果产品用了不到一年,坏块率飙升。后来我学乖了:消费级用TLC没问题,但企业级一定要上SLC或MLC,或者用SLC Cache模式。
另外,不同颗粒的读写速度也有差异。SLC最快,QLC最慢。为什么?因为QLC需要更精细的电压控制,编程和读取的步骤更多。我做过测试,同样条件下,SLC的写延迟大约是TLC的1/3。
2.3 NAND Flash接口协议(ONFI/Toggle)
这部分是控制器和Flash颗粒之间的“沟通语言”。目前主流就两个:ONFI和Toggle。说白了,就是两个标准组织在打架。
2.3.1 ONFI协议
ONFI(Open NAND Flash Interface)由Intel、Micron等公司推动。它的特点是:
- 同步/异步模式:异步模式用RE#/WE#信号控制,同步模式用DQS时钟。我个人更推荐同步模式,速度快很多。
- NV-DDR系列:从NV-DDR到NV-DDR3,数据速率从200MT/s飙到1600MT/s。嗯,这里要注意,速率越高,信号完整性越难做。
- 命令集标准化:ONFI定义了统一的命令集,比如Page Read是00h-30h,Block Erase是60h-D0h。这让我写驱动时省了不少事。
2.3.2 Toggle协议
Toggle由Samsung、Toshiba主导。它的核心思想是:
- DQS双沿采样:Toggle 2.0开始,DQS的上升沿和下降沿都采样数据。说白了,就是一根时钟线当两根用。
- 更灵活的时序:Toggle对时序的要求比ONFI宽松一些。我在调试时发现,Toggle颗粒的时序窗口更大,对PCB走线没那么敏感。
- 接口速度:Toggle 4.0已经支持到1200MT/s,跟ONFI的NV-DDR3差不多。
对比总结:ONFI和Toggle在电气特性上不兼容,但逻辑层命令集有相似之处。我建议:选型时看颗粒厂商,Samsung/Toshiba用Toggle,Micron/Intel用ONFI。别混用,否则控制器设计会非常痛苦。
2.4 知识体系结构图
下面这张图是我自己整理的,把本章的核心逻辑串起来了。你仔细看看,应该能一目了然。
个人建议:初学者先别急着啃协议细节。先把SLC/TLC的区别搞清楚,再去看ONFI的时序图。我当年就是反着来的,结果越看越晕。后来老老实实从原理开始,反而事半功倍。
好了,这一章就到这里。记住:NAND Flash是SSD的基石,理解得越深,后面设计控制器时就越从容。
公众号:蓝海资料掘金营,微信deep3321