一、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 知识体系总览

下面这张图,是我画的本章节知识结构。你可以把它当作一张地图,后面每讲一个知识点,都能在这里找到位置。

NAND闪存知识体系 存储介质 接口协议 存储结构 浮栅晶体管 SLC/MLC/TLC/QLC 异步/同步/DDR ONFI vs Toggle 页/块/平面 Die/多平面 关键特性:非易失性 | 写前擦除 | 有限寿命 | 读干扰 | 数据保持 SSD固态硬盘 嵌入式存储(eMMC/UFS) 存储卡(SD/CF) 核心矛盾:容量 ↑ → 寿命 ↓ → 纠错需求 ↑ → 接口速率 ↑ (这就是整个NAND技术演进的底层驱动力)

1.6 写在开头的话

好了,第一章的内容就到这里。

你可能注意到了,我没有一上来就讲协议细节。因为我觉得,理解NAND闪存,首先要理解它为什么长成这样。存储介质的物理特性,决定了接口协议的设计方向,也决定了整个存储系统的架构。

后面我们会一步步深入,从ONFI协议的命令集,到Toggle的时序参数,再到NV-LPDDR4的物理层设计。每一步,我都会结合自己踩过的坑和积累的经验来讲。

嗯,咱们下一章见。


专注资料整理