NAND技术(一):一颗 NAND 明明只有十几根线,为何封装却有 152 个球?
2026-07-15 15:16:20

很多工程师第一次看 NAND Flash datasheet,都会有一个很朴素的疑问:

一颗 NAND Flash,不就是给 SSD Controller 存数据的吗? 那它和控制器之间,不就是几根数据线、几根控制线吗? 为什么接口信号看起来不到 20 根,封装却动不动就是 BGA-132、BGA-152、BGA-154,甚至更多 ball?

这个问题非常好。

因为它背后刚好把 NAND Flash 最核心的几件事串起来了:

NAND 总线到底是什么? ONFI 规范到底规定了什么? SSD Controller 是怎样对 NAND 发 read、program、erase 指令的? 为什么 NAND 明明是并行总线,速度还能跑到 2.4GT/s、3.6GT/s,甚至 4.8GT/s? 为什么大家经常说 read disturb,但它又不像 read、program、erase 那样是一个正常“指令”?

这篇文章就从一个完全没接触过 NAND 的初级工程师视角,把这些事情讲清楚。

一、先把 ONFI 说人话:它就是 SSD Controller 和 NAND 之间的“普通话”

ONFI,全称 Open NAND Flash Interface。它不是某一家厂商的私有协议,而是一个行业工作组制定的 NAND Flash 接口规范。ONFI 官方介绍里提到,这个工作组由 100 多家公司组成,目标就是把 NAND Flash 的组件级接口、连接器和模块形态尽量标准化。

可以把 ONFI 理解成 SSD Controller 和 NAND Flash 之间说话用的“普通话”。

如果没有这种标准化,SSD Controller 厂商就会很痛苦。今天接 Micron NAND,要一套时序;明天接另外一家 NAND,又要另一套接口;后天容量升级、封装换了,还要重新改板子、改控制器、改 firmware。

ONFI 做的事情,就是尽量把这些基础问题标准化:

接口信号怎么定义; 命令怎么发; 地址怎么送; 数据怎么读写; 时序怎么切换; 速度档位怎么声明; NAND 怎么告诉 Controller 自己支持什么能力; 封装 ball assignment 怎么规划。

所以,ONFI 并不是“SSD 对主机的协议”。SSD 对主机走的是 SATA、PCIe/NVMe 之类的协议。ONFI 是 SSD Controller 内部往下连接 NAND Flash 颗粒的协议。

用一个比喻:

NVMe 是 SSD 对外接待客户的前台语言。 ONFI 是 SSD Controller 在仓库里指挥 NAND Flash 搬货的内部语言。

主机不会直接看到 ONFI,但 SSD Controller 每天都在用 ONFI 和 NAND 说话。

二、NAND Flash 总线:它不是 PCIe 那种高速串行总线,而是一组并行“车道”

PCIe、USB、SATA 这类接口,大家通常会想到高速串行链路:一对差分线一条 lane,数据像高速列车一样一位一位串行跑。

NAND Flash 总线不太一样。传统 raw NAND 到 SSD Controller 之间,更多是并行总线的思路。

最典型的是 x8 NAND,也就是 8 根数据线,叫 DQ[7:0]。这 8 根线很有意思:它们不是只负责传数据,还负责传命令、传地址。NAND Flash 通过高度复用的 8-bit bus,把 command、address、data 都塞到同一组 I/O 线上传输。很多 NAND datasheet 也会强调,这种复用接口可以减少 pin count,并方便未来密度升级时不大改板级 footprint。

最基础的一组 NAND 信号,大概可以这样理解:

DQ[7:0]:8 根双向数据线。命令、地址、读写数据都从这里走。 CE#:Chip Enable,片选信号。Controller 用它告诉某颗 NAND:“现在轮到你听我说话。” CLE:Command Latch Enable,命令锁存使能。它告诉 NAND:“现在 DQ 上放的是命令。” ALE:Address Latch Enable,地址锁存使能。它告诉 NAND:“现在 DQ 上放的是地址。” WE#:Write Enable,写入节拍。异步模式下,Controller 用它把命令、地址或数据写进 NAND。 RE#:Read Enable,读取节拍。异步模式下,Controller 用它把 NAND 里的数据读出来。 WP#:Write Protect,硬件写保护。它相当于一个物理层面的“别乱写”开关。 R/B#:Ready/Busy,状态提示。NAND 忙的时候拉低,准备好以后释放,让 Controller 知道能不能继续操作。

这样算下来,最基本的 x8 NAND 也就十几根关键功能信号。

所以你会看到一个很反直觉的现象:

NAND Flash 的“逻辑接口”很少,但封装 ball 很多。

后面我们再解释为什么。

三、2.4GT/s、3.6GT/s、4.8GT/s:NAND 并行总线为什么也能跑这么快?

很多人一看到“并行总线”,脑子里会自动联想到老式、低速、不够先进。

但 NAND Flash 这个并行总线并没有停在几十 MB/s 的年代。

公开资料里可以看到,ONFI 接口速度一路从早期几百 MT/s,提升到 ONFI 5.0 的 2.4GT/s、ONFI 5.1 的 3.6GT/s,再到 ONFI 6.0 相关 IP 支持的 4.8GT/s。M31 官方 ONFI I/O 产品线列出了 ONFI 5.0 2.4GT/s、ONFI 5.1 3.6GT/s、ONFI 6.0 4.8GT/s 的支持能力;Cadence 的 ONFI VIP 页面也列出 NV-DDR3 最高 3600MT/s、NV-LPDDR4 最高 4800MT/s。

这里需要注意一个细节:

GT/s 和 MT/s 在很多 NAND 接口语境里经常被混用。严格说,MT/s 更强调每秒多少次 transfer,GT/s 也就是 giga-transfers per second。对于工程沟通来说,2.4GT/s 可以理解成每根数据 pin 每秒约 24 亿次传输。

如果是 x8 bus,理论上每次 transfer 搬 8 bit,也就是 1 byte。 所以一个 2.4GT/s 的 x8 NAND 接口,理论峰值大约是 2.4GB/s 级别。 3.6GT/s 就是 3.6GB/s 级别。 4.8GT/s 就是 4.8GB/s 级别。

当然,这只是接口传输的理论峰值。真实 SSD 性能还要看 NAND 内部读写延迟、page size、plane 数量、die interleaving、controller channel 数量、ECC、FTL、SLC cache、温度和 workload。

也就是说,NAND 接口速度就像仓库门口的马路宽度。马路变宽,货车能跑得更快;但仓库里面装货、找货、打包、排队,也会影响最终效率。

截至 2026 年 7 月,从公开资料看,ONFI 路线近期最值得关注的最高速度是 4.8GT/s。ONFI 官方 specs 页面已经出现 2026 年 1 月发布 ONFI 6.0 的说明,并提到它把重点扩展到 NV-LPDDR4;第三方 IP 厂商公开页面也已经把 ONFI 6.0 4.8GT/s 列入产品支持范围。

所以,如果今天和客户讨论未来一年内 NAND 接口测试能力,比较稳妥的说法是:

2.4GT/s 是当前高端 NAND/控制器里很常见、很现实的速度节点。 3.6GT/s 已经进入 ONFI 5.1 及相关高端 NAND/Controller 设计视野。 4.8GT/s 是 ONFI 6.0 / NV-LPDDR4 方向上需要提前关注的下一档高速接口能力。 再往上是否进入量产生态,要看 NAND 原厂、controller 厂商、测试设备和实际产品节奏,不能只看单点展示。

四、BGA-132、BGA-152、BGA-154:为什么十几根信号线最后变成一百多个球?

这可能是最适合讲给初级工程师听的地方。

你可以把 NAND package 想象成一栋高层仓库大楼。

真正对外收发货的门,可能只有十几个:数据门、命令门、地址门、状态门。 但一栋大楼除了门,还要有电梯、消防、电力、地线、支撑柱、备用通道、维修通道,甚至有些区域是为了兼容未来扩建预留的。

NAND BGA 封装也是这样。

ONFI 规范里有 BGA-132、BGA-152、BGA-154、BGA-146 等 package ball assignment;公开的 ONFI 5.2 资料目录中也能看到 BGA-152/BGA-132,以及 BGA-154/BGA-146 的 ball assignment 章节。

这些 ball 不可能全部都是 DQ、CLE、ALE 这种“功能信号”。多出来的 ball 主要承担几类任务。

第一类,是电源和地。

NAND 不是一颗只靠几根信号线就能工作的器件。它内部有存储阵列、page buffer、sense amplifier、电荷泵、I/O buffer、状态机。读、写、擦除时的电流需求也不同。尤其到了高速接口,VCC、VCCQ、VSS、VSSQ 这些电源和地必须分布得足够密,才能降低电源噪声和回流路径问题。

简单说,DQ 是“数据车道”,但 VCC/VSS 是“道路下面的地基”。 没有足够的地基,车道越快越容易抖。

第二类,是多 die、多 LUN、多 target 相关信号。

一个 NAND package 里面不一定只有一个 NAND die。很多高容量 NAND package 里面会叠很多 die。SSD Controller 看到的可能是多个 target、多个 LUN。为了让 Controller 能独立选择、独立查询状态,封装里可能会出现多组 CE#、R/B#,甚至多组 bus 或者共享 bus 下的多个片选组合。

也就是说,一个 package 不是一个小房间,而可能是一栋楼里塞了好几个仓库。

第三类,是高速接口增强信号。

在 SDR 慢速年代,WE#、RE#、DQ 这些信号还能比较轻松地工作。到了 NV-DDR、NV-DDR2、NV-DDR3,接口开始引入 DQS、CLK、W/R#、ODT、ZQ calibration、差分 DQS/RE 等机制。Embedded 的 NAND interface 介绍里也提到,在高速同步接口里,I/O bus 变成 DQ bus,新增 DQS,WE# 变成 CLK,RE# 变成 W/R#,数据在 DQS 的双边沿传输。

到了 ONFI 5.2,还进一步引入了 Separate Command Address,也就是把 command/address 和 data bus 分开,让 Controller 可以在前一次读写的数据传输还没完全结束时,提前发下一笔 command/address,从而提升总线利用率。Cadence 对 ONFI 5.2 的介绍中提到,ONFI 5.2 增加了 CA[1:0]、CACE#、CACLK 等额外信号。

第四类,是 NC、DNU、Reserved、机械支撑和封装兼容。

不是每一个 ball 都一定在某个具体产品里有功能。有些是 NC,有些是 DNU,有些是为了兼容不同容量、不同 die stack、不同代际封装,有些是为了改善机械强度和焊接可靠性。

这就像同一栋楼的设计图要兼容 64 层、96 层、176 层、232 层、276 层不同版本,不可能每次都把地基和出入口全部推倒重来。

这也是 BGA-132、BGA-152、BGA-154 这些标准封装的意义: 让 SSD Controller 板级设计尽量稳定,未来换更大容量、更高速度、更高堆叠的 NAND 时,不至于每次都从 PCB layout 开始重做。

Ironwood 这类测试 socket 厂商的 ONFI 目录里,也能看到标准 ONFI NAND 对应 132-ball、152-ball、154-ball 等不同尺寸与 pitch 的 socket/press/stencil 方案,说明这些封装不仅是芯片厂内部定义,也是测试、验证、量产夹具生态都要支持的对象。

五、SSD Controller 访问 NAND,到底在发哪些指令?

如果把 NAND Flash 看成一个超大仓库,SSD Controller 就是仓库管理员。

Controller 每天干的事,无非是:

查仓库身份; 看仓库忙不忙; 从仓库取货; 往仓库放货; 把旧货架清空; 把一个货架里的东西搬到另一个货架; 遇到读不清楚的数据,再换个角度读一遍。

这就是 NAND command set 的基本逻辑。

1. Reset:先让 NAND 回到一个明确状态

Reset 通常是系统上电后的第一类动作。它的作用很朴素:不管 NAND 刚才处在什么状态,先让它回到一个已知状态。

很多 NAND datasheet 会说明,RESET 命令用于把 memory device 放到 known condition,也可以 abort 当前正在进行的 command sequence。

对初学者来说,可以把 Reset 理解成:

“所有人先停一下,回到起点,我们重新开始。”

2. Read ID / Read Parameter Page:先问清楚“你是谁、你会什么”

SSD Controller 不会一上来就乱读乱写。它先要问 NAND:

你是哪家厂商? 你是什么容量? 你支持几个 LUN? page size 多大? block size 多大? 支持哪些 timing mode? 需要多少 ECC 能力? 支持 read cache、program cache、multi-plane 吗?

这类信息通常通过 Read ID、Read Parameter Page 等命令拿到。ONFI parameter page 里会记录 timing mode support、program cache support、read cache support、multi-plane attributes、ECC correctability 等能力字段。公开资料中也能看到 parameter page 对 SDR、NV-DDR、NV-DDR2、NV-DDR3、NV-LPDDR4 timing mode support bit 的定义。

这一步很像仓库管理员先看仓库档案:

这个仓库有几层? 有几个门? 能不能多门同时装卸? 货架编号怎么排? 叉车最大速度是多少?

3. Read:把 NAND 里的 page 读出来

Read 是最容易理解的命令。

但 NAND 的 read 不是像 SRAM/DRAM 那样给一个地址马上吐一个字节。NAND 通常按 page 读。

典型流程是:

Controller 发 Read command; 送 column address 和 row/page address; NAND 内部把选中 page 从 cell array 读到 page buffer; 等待 tR; Controller 再从 page buffer 通过 DQ 总线把数据搬出来。

很多 NAND datasheet 里会用 00h + address + 30h 这样的序列表示 READ PAGE 操作。

所以 NAND read 更像是:

先让仓库工人把整箱货从深处货架搬到出货口, 然后 Controller 再从出货口一箱一箱拿走。

这里的“从深处货架搬到出货口”,就是 NAND 内部 array read 到 page buffer 的过程。 这里的“从出货口拿走”,就是 ONFI 总线上的数据传输。

4. Program:NAND 里的“写入”,不是随便覆盖

NAND 里常说的 Program,基本可以理解为写入操作。

但它和普通内存写入不一样。NAND 不能像硬盘或者 SRAM 那样随便原地覆盖。它通常要求先擦除 block,再往已经擦干净的 page 里 program。

典型 Page Program 过程类似:

Controller 先发 Program command; 送地址; 通过 DQ 总线把要写的数据送进 NAND 的 data/cache register; 再发 Program Confirm; NAND 内部开始真正把电荷写进 cell; Controller 通过 R/B# 或 Read Status 等方式等待完成。

很多 datasheet 中的 PROGRAM PAGE 操作会用 80h + address + data + 10h + status 这样的序列表示。

可以把 Program 理解成:

Controller 先把快递包裹放到仓库门口的暂存区, 然后 NAND 自己把这些包裹搬进具体货架, 搬完以后再告诉 Controller 成功还是失败。

5. Erase:擦除不是按 page,而是按 block

NAND 最反直觉的地方之一是:

读写通常按 page,擦除通常按 block。

一个 block 里面有很多 page。 你不能只擦某一个小 page,然后保留同一个 block 里其他 page 完全不动。

典型 Block Erase 会发 erase setup、block address、erase confirm,然后等待 NAND 内部完成。很多 NAND 资料里会出现 60h + block address + D0h 这样的 block erase 序列。

这就像仓库里的货架:

你可以按箱子取货, 也可以按箱子上架, 但你要重新整理货架时,往往要把一整排货架清空。

这也是 SSD 为什么需要 FTL、垃圾回收、磨损均衡的根本原因之一。

主机说“我要改一个 4KB 文件”, SSD 内部可能要搬动很多 page,最后擦掉一个 block。 这就是 NAND 世界和文件系统世界之间的巨大差异。

6. Read Status:问 NAND “你忙完了吗?”

NAND 很多操作不是瞬间完成的。Program 要时间,Erase 更要时间。Controller 不可能一直傻等,它会用 R/B# 或 Read Status 命令查询状态。

Read Status 常见命令码是 70h,Read Status Enhanced 常见为 78h。公开 datasheet 资料中也能看到通过 Read Status register 检查 cache program、program、erase 等操作完成状态。

这就像仓库管理员不停问:

“刚才那批货搬完了吗?” “刚才那个货架清空了吗?” “有没有失败?” “下一批能不能进来?”

7. Read Cache / Program Cache:流水线操作,让仓库别闲着

如果每次都等一个 page 完全读完、传完,再开始下一个 page,效率会比较低。

Read Cache / Program Cache 的思路就是流水线化。

读的时候,NAND 可以一边把上一个 page 的数据通过总线传出去,一边准备下一个 page。 写的时候,也可以一边内部 program 当前数据,一边接收下一笔数据。

这有点像餐厅后厨:

一个厨师在炒上一道菜, 前台已经把下一张菜单递进来了, 配菜人员也开始准备下一盘材料。

这样总吞吐会更好。

公开 datasheet 资料中能看到 Read Page Cache Sequential、Read Page Cache Random、Cache Program 等操作;也有资料明确提到 cache register 机制可以让连续读取形成流水线。

8. Multi-plane:一个 die 里面多个区域并行干活

现代 NAND 里面常有多个 plane。Multi-plane 操作就是让多个 plane 同时读、写、擦。

这就像一个仓库里有多个装卸区。 以前只有一个门装货,现在两个门、四个门一起装。

Multi-plane Program、Multi-plane Erase 可以提升吞吐,但也有地址对齐、plane 选择、block 限制等要求。公开资料中也能看到 multiplane cache program 可通过并行 program 两个 page 来提升 program throughput。

对 SSD Controller 来说,multi-plane 是提升性能的重要手段,但 firmware 要小心安排数据布局,否则指令发出去也不一定能并起来。

9. Copyback / Internal Data Move:让 NAND 内部自己搬家

有些情况下,SSD 需要把 NAND 里某个 page 的数据搬到另一个 page。

如果每次都把数据从 NAND 读到 Controller,再从 Controller 写回 NAND,总线会很忙。

Copyback 或 Internal Data Move 的思路是: 数据在 NAND 内部从一个位置搬到另一个位置,减少外部总线传输。

这就像同一个仓库内部从 A 货架搬到 B 货架,不一定非要先搬到仓库大门口,再重新入库。

不过这类操作通常要配合 ECC、数据校验和厂商限制,不是 Controller 可以随便乱用。

10. Get Feature / Set Feature:调参数、换档位、开功能

NAND 支持很多可配置特性,比如 timing mode、ODT、driver strength、接口模式、Vref、warmup cycles 等。

Get Feature 是读配置。 Set Feature 是写配置。

比如从低速模式切到高速模式,Controller 往往要先在安全的低速模式下配置好 feature,再进入更高 timing mode。ONFI 5.2 资料中也提到,data interface / timing mode transitions 可通过 Set Features 的 Timing Mode feature 来完成;在 NV-DDR3/NV-LPDDR4 下切换 timing mode 时,还需要注意 CE#、idle bus state、DQS 等状态要求。

这就像开车:

车刚启动时不会直接挂最高档。 先低速起步,确认发动机、轮胎、路况没问题,再逐步升档。

六、Read Disturb 是指令吗?不是,它是 NAND 的“读多了也会扰动邻居”

很多人第一次听 read disturb,会自然以为它是一个 NAND command:

Read 是读, Program 是写, Erase 是擦, 那 Read Disturb 是不是一种特殊读指令?

答案是:不是。

Read disturb 不是一个正常访问指令,而是一种可靠性现象。

NAND 读一个 page 时,并不是只对这一个 page 施加电压。为了读出目标 wordline,NAND 内部还需要让同一个 block 里的其它未选中 wordline 处于 pass-through 状态。读的次数多了,这些被“路过”的 cell 也可能被轻微扰动,阈值电压发生偏移,最终导致 bit error 增加。

学术研究里对 read disturb 的描述很直接:对某一行 cell 的读取,会影响同一 block 内其它未读行 cell 的阈值电压;read disturb error 会随着 read operation count、磨损程度和 pass-through voltage 等因素变化。

用人话讲:

你每天只是从某个货架旁边走过去拿东西, 并没有碰旁边的货架。 但如果你一天走几万次,旁边货架上的小盒子也可能被气流、震动、摩擦慢慢影响。 时间久了,原来摆得很整齐的货,可能就偏了一点。

NAND 的 read disturb 就是这种“读多了,邻居也被影响”的现象。

那 Controller 怎么办?

它会做几件事:

记录 block 的 read count; 对热点 block 做 refresh; 把数据搬到新 block; 通过 ECC 修正错误; 必要时使用 read retry / read reference voltage adjustment; 在测试中故意反复读某些 block,观察错误增长情况。

所以,工程师口中的“read disturb 测试”,通常不是发一个叫 Read Disturb 的命令,而是反复执行 Read,制造扰动,再观察数据错误、阈值漂移、ECC margin、read retry 次数等变化。

七、Read Retry 又是什么?它更像“换个角度再读一遍”

Read disturb 不是指令,但 Read Retry 在很多 NAND/SSD 讨论里确实经常出现。

Read Retry 的核心思路是:

第一次用默认 read reference voltage 没读好,ECC 解不出来; 那就调整读阈值,再读一次; 还不行,再换一个阈值读; 直到 ECC 能解出来,或者确认数据已经不可恢复。

研究资料中对 read-retry 的描述是:现代 3D NAND 为保证可靠性,会通过调整 read-reference voltage values 多次读取目标 page;但多次 retry 也会显著增加 SSD read latency。

这个很好理解。

你在昏暗房间里看一张纸,第一次看不清。 你可以换个角度、开亮一点灯、靠近一点,再看一次。 内容没变,变的是你“判断黑白”的参考条件。

NAND read retry 也是类似逻辑:

cell 里的电荷状态没有马上改变, Controller/NAND 改变的是读取判决条件, 希望从噪声、漂移、老化、扰动中把正确数据救回来。

所以在 SSD 调试中,如果看到 read retry 次数增加,往往说明 NAND 已经不再“轻松可读”。它可能和磨损、数据保持时间、温度、read disturb、program interference 等多种因素有关。

八、NV-SDR、NV-DDR、NV-DDR2、NV-DDR3,到底差在哪里?

很多工程师看到这些名字会头大。其实可以用“交通工具升级”来理解。

1. NV-SDR:最基础的单边沿低速模式

NV-SDR 可以理解为最传统、最保守的 NAND 接口方式。

SDR 就是 Single Data Rate,通常在一个有效边沿传一次数据。 它主要靠 WE#、RE# 这样的控制信号节拍来完成命令、地址、数据传输。

优点是简单、兼容性好、上电默认安全。 缺点是速度不高。

这就像仓库刚开门时,所有人先按最慢、最稳、最不会出错的节奏沟通。

2. NV-DDR:开始在两个边沿传数据

DDR 是 Double Data Rate。 它在一个周期的上升沿和下降沿都传数据。

这就像以前传送带每转一圈只放一个箱子,现在一圈可以放两个箱子。

到了 NV-DDR,NAND 接口引入 source synchronous 的味道,DQS 这样的数据 strobe 变得重要。数据不是只靠 Controller 自己猜时间点,而是通过 strobe 帮助对齐采样窗口。

3. NV-DDR2:更高速度,开始认真处理信号完整性

NV-DDR2 继续提高速度,也引入更多信号完整性相关机制。

比如差分 DQS/RE、warm-up cycles、ODT 等,在较高速度下会越来越重要。Micron 的 ONFI 4.0 设计资料提到,从 ONFI 2.3 到 ONFI 3.2,NV-DDR2 引入了 differential signaling for DQS and RE#、warm-up cycles、ODT 等特性。

这时候 NAND 总线就不再是“几根线能连上就行”。 线长、阻抗、回流、电源噪声、封装寄生、probe loading,都会开始影响结果。

4. NV-DDR3:高速 NAND 接口的主力阶段

ONFI 4.0 引入 NV-DDR3,并把 NAND 接口速度推到更高档位。公开设计资料中提到,ONFI 4.0 的 NV-DDR3 在 timing mode 9 和 10 下分别达到 667MT/s 和 800MT/s;后续 ONFI 5.x 继续把 NV-DDR3 推到 2.4GT/s、3.6GT/s 级别。

到了 NV-DDR3,工程师关心的不只是协议能不能发通,而是:

DQ/DQS 眼图够不够; setup/hold margin 够不够; ODT 配置对不对; ZQ calibration 是否正常; VrefQ 是否合适; 读写训练有没有做; 封装和 PCB 的反射是否可控; probe 接上去会不会把信号测坏。

这也是为什么 NAND 测试设备要支持高带宽、高精度、高重复性的原因。

5. NV-LPDDR4:ONFI 6.0 往 4.8GT/s 推进的重要方向

虽然你这次问题列的是 NV-SDR、NV-DDR、NV-DDR2、NV-DDR3,但如果讨论“未来一年最高速度”,必须提到 NV-LPDDR4。

Cadence 的 ONFI VIP 页面公开列出 NV-LPDDR4 支持 4800MT/s;M31 官方 ONFI I/O 页面也列出 ONFI 6.0 4.8GT/s。

这说明 NAND 接口速度往 4.8GT/s 走时,已经不只是传统 NV-DDR3 的延续,而是进一步借鉴 LPDDR 类接口思路来提升性能和功耗效率。

换句话说:

早期 NAND 接口像乡村公路。 NV-DDR 像双向车道。 NV-DDR2/NV-DDR3 像高速公路。 NV-LPDDR4 则开始像带收费站调度、限速策略、车道管理和高等级路基的高速路网。

九、Timing Mode 0 到 Mode 19:它们不是协议,而是“速度档位”

Timing Mode 是很多人最容易误解的概念。

Mode 0、Mode 1、Mode 2……Mode 19,不是 20 种完全不同的协议。 它们更像同一个协议下的不同速度档位。

就像汽车:

1 档能走,速度慢但稳。 2 档、3 档逐渐提速。 高速档速度快,但对发动机、轮胎、路况要求更高。

NAND timing mode 也是这个逻辑。

Mode 数字越大,通常代表速度越高、时序越紧、信号完整性要求越高。 但不是每种 interface 都支持所有 mode。

例如,公开 ONFI 4.0 设计资料中的数据率表显示:

SDR 只到 Mode 5,约 10 到 50MT/s; NV-DDR 到 Mode 5,约 40 到 200MT/s; NV-DDR2/NV-DDR3 继续扩展到更高 mode; ONFI 4.0 NV-DDR3 引入 Mode 9/10,对应 667MT/s 和 800MT/s。

后续 ONFI 5.x 继续扩展更高 timing mode。ONFI 5.2 资料中可以看到 NV-DDR3 timing mode support 扩展到 Mode 18、Mode 19、Mode 20、Mode 21、Mode 22 等字段;资料中也出现 3600MT/s 相关描述。

对初级工程师来说,最重要的不是死记每个 mode 对应多少 MT/s,而是记住三句话:

第一,Mode 0 通常是最保守、最安全的低速档。 第二,Mode 数字越大,接口速度越高,但信号、电源、封装、PCB、训练要求也越高。 第三,Controller 不是想开哪档就开哪档,而是要先读 NAND parameter page,确认 NAND 支持哪些 timing mode,再通过 Set Feature 等方式切换。

所以在实际调试中,不要一上来就问“为什么不能直接跑最高速”。 更好的问题是:

这颗 NAND parameter page 里声明支持哪些 mode? Controller 目前配置到了哪个 mode? VCCQ 是多少? DQS/RE 是单端还是差分? ODT/ZQ/VrefQ/training 做了没有? PCB 和 socket 在这个速率下有没有 margin? 测试设备能不能真实捕获高速 DQ/DQS 关系?

这才是工程现场真正会遇到的问题。

十、把整件事串起来:SSD Controller 其实每天都在调度一个“多层仓库群”

到这里,我们可以把 NAND Flash 的工作过程用一个画面串起来。

SSD Controller 像一个总调度员。 ONFI 总线像仓库门口的装卸通道。 DQ[7:0] 是主要货运车道。 CLE/ALE 像告诉仓库“现在说的是命令还是地址”的旗语。 WE#/RE#/DQS/CLK 像传送带节拍。 CE# 像点名某个仓库。 R/B# 像仓库门口的红绿灯。 VCC/VCCQ/VSS/VSSQ 像整栋楼的电力和地基。 BGA-132/152/154 那些 ball,是电源、地、多 die、多 LUN、高速信号、机械支撑和封装兼容共同堆出来的结果。 Read、Program、Erase,是最基础的取货、入库、清空货架。 Read Cache、Program Cache,是流水线。 Multi-plane,是多个装卸区并行。 Read Retry,是看不清时换个阈值再读。 Read Disturb,则是读多了以后,把同一 block 里的邻居也慢慢扰动了。

这样一看,NAND Flash 就不再是一颗“黑盒存储芯片”。

它更像一个非常复杂、非常高密度、非常讲究调度纪律的微型仓库系统。

而 ONFI 规范,就是这套仓库系统对外说话、走线、换档、读写、报状态的共同规则。

十一、为什么这类知识对 NAND 测试和 SSD Controller 验证非常重要?

对普通用户来说,SSD 只是一个盘。 插上电脑,能识别,能测速,能拷贝文件,就算正常。

但对做 SSD Controller、NAND 验证、NAND 特性测试、固件调试、企业级 SSD 可靠性分析的工程师来说,事情远没有这么简单。

他们真正关心的是:

某颗 NAND 在 2.4GT/s 下 margin 够不够? 升级到 3.6GT/s 后,DQ/DQS 是否还稳定? 未来 4.8GT/s 的 ONFI 6.0 / NV-LPDDR4 接口,测试设备和 controller PHY 是否准备好了? BGA-152 封装和 BGA-154 封装的 socket、信号、供电、散热是否一致可靠? program/erase/read 的真实 timing 是否符合 datasheet? read disturb 在高温、老化、多次读取后会恶化到什么程度? read retry 次数增加以后,SSD 延迟是否失控? multi-plane、cache read、cache program 是否真的提高吞吐,还是在某些边界条件下引入新问题?

这些问题,不是看一眼 datasheet 就能解决的。

它们需要真实的 NAND 测试平台、稳定的高速接口能力、可重复的指令序列、可控的电源和温度环境,以及能够看到底层行为的测试工具。

因为 NAND Flash 的难点从来不只是“能不能存数据”。

真正难的是:

在越来越高的接口速度下, 在越来越小的 cell margin 下, 在越来越复杂的多 die、多 plane、多 LUN 封装里, 让 SSD Controller 稳定、快速、可靠地把数据写进去、读出来、长期保存住。

这就是 ONFI 背后的真正价值。

它把 SSD Controller 和 NAND Flash 之间那套看不见的底层对话,变成了一个可以定义、可以测试、可以验证、可以持续演进的工业标准。

所以,下次再看到一颗 BGA-152 NAND,不要只觉得它是一颗黑色小芯片。

它其实是一栋高度压缩的微型数据仓库。 十几根关键信号线,是它对外沟通的门。 一百多个 ball,是它站稳、供电、散热、多 die 扩展和高速可靠工作的地基。 ONFI,就是这栋仓库和 SSD Controller 之间每天都在使用的工程语言。

更多PCIe5&6.0, CXL, NVMe SSD, SAS/SATA, NVMe over Fabric (NVMoF), NAND,新型存储技术NVM(RRAM/ReRAM, FRAM/FeRAM, MRAM, PCM, 3D-NOR, SRAM/DRAM等) DDR5/LPDDR5以及UFS测试方面的问题想咨询,可以查看Saniffer公司2026.2.24最新更新的测试工具白皮书15.1版本,我们已经整理收录在Saniffer公众号的【白皮书】菜单中。

欢迎关注Saniffer公众号,点击底部菜单栏即可免费获取。如有任何技术问题,也可直接在公众号内留言交流。