并行 NAND Flash(Parallel NAND / PPI NAND)电路设计指南
ONFI 异步 SDR / NV-DDR / NV-DDR2 / NV-DDR3 · Toggle DDR 1.0 / 2.0 · 8-bit 与 16-bit 总线 · 硬件 ECC 与 FTL · 双电源与上电时序 · 高速 PCB Layout | 编制日期 2026-09-21 | 版本号 Rev 1.0
本文所说的 「PPI NAND」指的是并行接口的 NAND Flash(Parallel NAND),即数据总线为 8 位或 16 位并行、通过复用总线分时传输命令 / 地址 / 数据的 Raw NAND,与串行接口的 SPI NAND 相对。业界更常见的写法是 Parallel NAND、并口 NAND、PPI(Parallel Peripheral Interface)NAND,三者指同一种器件,本文统一称为并行 NAND。其命令与时序由 ONFI(Open NAND Flash Interface,由 Micron / Intel / Hynix / SanDisk 等推动)或 Toggle DDR(由 Samsung / Toshiba 推动)两大规范定义。
本指南面向把裸 NAND 颗粒(Raw NAND Die)直接挂到主控 NAND 控制器上的硬件设计,覆盖器件选型、原理图、电源、协议模式、PCB 布线、初始化流程与量产排查。不同厂商、不同工艺(SLC / MLC / TLC)、不同封装的器件在电压组合、最高时序模式、页 / 块大小、ECC 要求、tR / tPROG / tBERS 上差异很大。本文给出符合 ONFI / Toggle 通用规范的工程基线,落地前必须以实际器件 datasheet 与主控参考设计为准做二次核对。
并行 NAND 是裸颗粒:主控必须自带 NAND 控制器 + 硬件 ECC(BCH 或 LDPC)+ 成熟的 FTL。若你的主控没有硬件 ECC,或者 FTL 需要自己从零写,不要选并行 NAND,请改用 eMMC / SD NAND / SPI NAND(内部已集成控制器与 FTL)。详见第 3 章。
核心结论速览
- 总线并行:I/O0~I/O7(8-bit)或 I/O0~I/O15(16-bit)复用命令 / 地址 / 数据,配合 CLE、ALE、CE#、RE#、WE#、WP#、R/B# 七根控制线,典型器件共 15~20 个有效信号 + 电源地。
- R/B# 是开漏输出,必须外部上拉到 VCCQ(常用 4.7 kΩ~10 kΩ,以器件 datasheet / ONFI 规范为准)。这是并行 NAND 与串口器件最容易被忽略的差异。
- 双电源硬约束:VCCQ 不得高于 VCC;上电 VCC 先于或同时于 VCCQ,断电 VCCQ 先于或同时于 VCC。
- 速率跨度极大:异步模式 0~5 最高约 50 MT/s;NV-DDR 200 MT/s;NV-DDR2 400 MT/s;NV-DDR3 800~1066 MT/s;Toggle DDR 1.0 约 133 MT/s,Toggle 2.0 最高 400 MT/s。8-bit × 200 MT/s 理论峰值 = 200 MB/s。
- 速度越快,Layout 越苛刻:异步可放宽到 ±2.5 mm 等长、走线 < 10 cm;NV-DDR2 / DDR3 需 ±0.25~0.6 mm 等长、走线 < 5 cm、50 Ω 单端 / 100 Ω 差分、完整地平面。
- 掉电会毁数据:编程 / 擦除过程中掉电会损坏块,必须做电压监测、落盘保护与关键数据双备份。
本系列其他指南
| 文档 | 器件类型 | 关注重点 |
|---|---|---|
| SPI NOR 电路设计指南 | 串行 NOR Flash | Quad/QPI 提速、dummy cycles、XIP、DPD 低功耗 |
| SPI NAND 电路设计指南 | 串行 NAND Flash | 页/块管理、片内 ECC、坏块表、主机 FTL |
| 并行NAND (PPI NAND) 电路设计指南 本文 | 8/16 位并行 NAND | 宽总线时序、ECC 引擎、40+ 引脚 Layout |
| eMMC 电路设计指南 | eMMC 5.0/5.1 | HS200/HS400、1.8 V VCCQ、DS 选通与等长 |
| SD NAND 电路设计指南 | 贴片式 SD NAND | SPI/SDIO 双模式、无休眠指令、VCC 负载开关断电 |
| NAND MCP 电路设计指南 | 多芯片合封存储 | 多 die 与多 CE、双电源轨、HDI 扇出 |
| 并行NOR (PPI NOR) 电路设计指南 | 并行 NOR Flash | 异步读时序、XIP、等待周期、总线扩展 |
| PSRAM 电路设计指南 | 伪静态 RAM | OPI/HyperBus、刷新与延迟周期、XIP 与帧缓存 |
| DDR2 电路设计指南 | DDR2 SDRAM | SSTL_18、T 分支拓扑、VTT 端接、ODT |
| DDR3 电路设计指南 | DDR3 / DDR3L | Fly-by 拓扑、write leveling、动态 ODT |
| DDR4 电路设计指南 | DDR4 SDRAM | POD12、bank group、DBI、2D 训练 |
| DDR5 电路设计指南 | DDR5 SDRAM | 双子通道、On-DIMM PMIC、DFE、同帧 ECC |
| EEPROM 电路设计指南 | EEPROM | I²C/SPI 接口、上拉电阻与总线电容、页写与写保护 |
1 · 器件基础
1.1 器件定位与选型对比
并行 NAND 是最原始、成本最低、单位容量价格最优的非易失存储形态:主控直接面对 NAND 阵列,坏块管理、ECC 校正、磨损均衡、垃圾回收全部由主控侧的软硬件承担。它换取的是极低的 BOM 成本与大容量,代价是极高的开发门槛与主控依赖。
与 SPI NAND / eMMC 不同,并行 NAND 与主控之间是裸阵列接口:主控侧要补齐三层能力 —— 控制器(产生 CLE / ALE / RE# / WE# 时序)、硬件 ECC(纠错)、FTL(把"坏块、擦写寿命、映射"这些物理细节包装成逻辑块设备)。缺任何一层都无法量产。
并行 NAND vs SPI NAND vs SPI NOR vs eMMC vs SD NAND
| 对比项 | 并行 NAND(本文) | SPI NAND | SPI NOR | eMMC | SD NAND |
|---|---|---|---|---|---|
| 典型容量 | 1 Gb ~ 1 Tb(128 MB ~ 128 GB) | 512 Mb ~ 8 Gb | 512 Kb ~ 2 Gb | 4 GB ~ 256 GB | 128 MB ~ 64 GB |
| 接口 / 总线 | 8 / 16 位并行 + 7 根控制线 | SPI 1/2/4 线串行 | SPI 1/2/4/8 线串行 | eMMC 1/4/8-bit | SDIO 1/4-bit 或 SPI |
| 信号数(含电源) | 约 20~40 个 | 约 8 个 | 约 8 个 | 约 12 个(BGA-153) | 约 8 个 |
| 典型吞吐 | 异步 20~40 MB/s;NV-DDR2 200~400 MB/s | 20~50 MB/s(4 线 @ 104 MHz) | 50~100 MB/s(8 线 XiP) | 200~400 MB/s(HS400) | 12~25 MB/s |
| 主控要求 | 专用 NAND 控制器 + 硬件 ECC + FTL | SPI 外设 + 硬件 ECC(部分需) | 任意 SPI 外设 | eMMC 控制器 | SDIO 或 SPI 外设 |
| ECC | 主控必须做 | 部分器件内置,仍需外部 ECC | 不需要 | 器件内置 | 器件内置 |
| 坏块管理 | 主控 FTL 必须做 | 主控 FTL 必须做 | 不需要 | 器件内置 | 器件内置 |
| 开发难度 | 很高 | 中 | 低 | 低 | 低 |
| 单位容量成本 | 最低 | 低 | 高 | 中 | 中 |
| 掉电安全 | 差,需系统设计 | 差,需系统设计 | 好(页编程快) | 较好 | 较好 |
| 典型应用 | 大批量、成本敏感、主控成熟的产品 | 小容量、IO 受限的 MCU | 代码存储、XiP、参数区 | 手机、平板、盒子 | 穿戴、IoT、工控 |
1.2 常见封装与引脚定义
并行 NAND 的封装演进与容量强相关:TSOP-48 是老一代 8-bit 器件的主力(SLC / 早期 MLC),BGA 则是现代大容量器件的主流,因为引脚更多(16-bit 总线、多 CE#/R-B#、多组电源地)。
| 封装 | 尺寸(mm) | 引脚 / 球距 | 总线宽度 | 典型容量与说明 |
|---|---|---|---|---|
| BGA-24 | 6 × 8 | 24 球 | 8-bit | 1 Gb~4 Gb 小容量 SLC;XTX PN27G01A/02A/04ABGITG(2.7~3.6 V)即为此封装,体积接近 SPI NAND,适合空间受限的替代设计 |
| TSOP-48 | 12 × 20 | 48 脚,0.5 mm 间距 | 8-bit | SLC 与早期 MLC,1 Gb~8 Gb;引脚可见、易焊接、易飞线调试,但体积大、寄生参数大,不适合 DDR 高速模式;XTX XT27G01A/02A/04ATSIGA(2.7~3.6 V,MP)与 XT27G04GTSIGA 采用此封装 |
| BGA-63 | 9 × 11(约) | 63 球,0.8 mm 间距 | 8-bit | 8 Gb~32 Gb;常用于 eMMC 替代前的 Raw NAND 方案,需 X 光检查 |
| BGA-100 | 12 × 18(约) | 100 球,0.8 mm 间距 | 8 / 16-bit | 16 Gb~64 Gb;多组 VCCQ / VSSQ,支持 NV-DDR2 |
| BGA-132 / BGA-152 | 12 × 18 ~ 14 × 18 | 132 / 152 球,0.8 mm(部分 0.65 mm) | 8 / 16-bit | 64 Gb~1 Tb;多 CE# / 多 R/B#(多 target)、差分 DQS、多组电源,支持 NV-DDR3 / Toggle 2.0 |
| LGA / TSOP-Other | 视型号 | — | 8-bit | 少量厂商提供 LGA 封装,pin order 与 TSOP 不兼容,需逐型号核对 |
并行 NAND 没有"通用封装"。即使是同为 TSOP-48 的两个型号,其 NC 脚位置、R/B# 数量、VCCQ 引脚数也可能不同;BGA 封装的 pin map 更是逐型号唯一。原理图建库时必须逐一对照该型号的 datasheet 引脚图(Pin Assignment),切勿直接套用其他型号或其他厂商的封装。这是并行 NAND 项目最容易翻车的地方之一。
1.3 信号定义表
并行 NAND 的信号可以分成四组:复用数据总线、命令 / 地址锁存、片选与读写控制、状态与时钟,外加两组电源。
| 信号 | 方向 | 有效电平 | 说明与设计要点 |
|---|---|---|---|
| I/O0~I/O7 (16-bit:I/O0~I/O15) | 双向 | — | 命令 / 地址 / 数据三重复用总线。由 CLE / ALE 决定当前总线上的内容:CLE=1 时为命令,ALE=1 时为地址,两者皆 0 时为数据。16-bit 器件用 I/O0~I/O15,吞吐翻倍但引脚也翻倍 |
| CLE | 输入 | 高有效 | Command Latch Enable。CLE 为高时,WE# 上升沿把总线上的字节锁存为命令 |
| ALE | 输入 | 高有效 | Address Latch Enable。ALE 为高时,WE# 上升沿把总线上的字节锁存为地址(列地址 + 行地址,多周期) |
| CE# | 输入 | 低有效 | Chip Enable。片选。低电平选中该 target;器件内部操作(读 / 编程 / 擦除)一旦启动,即使 CE# 变高也不会中止。建议外部上拉,防止上电 / 复位期间浮空误选中 |
| RE# | 输入 | 低有效 | Read Enable。读使能。异步模式下每个 RE# 下降沿(或上升沿,看器件)输出一个字节;DDR 模式下 RE# / RE_c 构成差分读时钟。建议上拉使其默认无效(高),高速时需串联端接 |
| WE# | 输入 | 低有效 | Write Enable。写使能。WE# 上升沿锁存命令 / 地址 / 数据。建议上拉使其默认无效(高) |
| WP# | 输入 | 低有效 | Write Protect。硬件写保护。拉低时禁止编程 / 擦除(不阻止读)。不用时应上拉(即不保护);若需要硬件保护,接主控 GPIO 或拨码开关 |
| R/B# | 输出(开漏) | 低 = 忙 | Ready / Busy。开漏输出,必须外部上拉到 VCCQ(常用 4.7 kΩ~10 kΩ,以器件 datasheet / ONFI 规范为准)。低电平表示器件正在编程 / 擦除 / 读阵列;上拉后高电平表示就绪。多 CE# 器件有多个 R/B#(R/B1#、R/B2#…) |
| DQS / DQS# | 双向 | — | Data Strobe。源同步数据选通,仅 DDR 模式使用。ONFI NV-DDR2/3 使用 DQS / DQS# 差分对;Toggle DDR 使用 DQS / DQS# 差分对。异步模式下该引脚通常为 NC 或需按 datasheet 处理 |
| RE_c(RE 互补) | 输入 | — | ONFI NV-DDR2 / DDR3 中 RE# 的差分互补端,与 RE# 构成差分读时钟对 |
| VCC | 电源 | — | NAND 核心(阵列)电源。常见 3.3 V 或 1.8 V(依器件)。VCCQ 不得高于 VCC |
| VCCQ | 电源 | — | I/O 接口电源,决定 IO 电平。现代器件多为 1.8 V,早期器件有 3.3 V。上拉电阻(尤其 R/B#)上拉到 VCCQ。上电不得早于 VCC,掉电不得晚于 VCC |
| VSS | 地 | — | 核心地。BGA 封装有多个 VSS 球,需全部良好接地 |
| VSSQ | 地 | — | I/O 地(信号回流地)。多球设计,需全部良好接地并紧邻信号回流路径 |
| NC / DNU | — | — | 未连接或禁止连接脚。按 datasheet 处理,不要随意接地或上拉;部分大容量 BGA 的 NC 脚在后续版本可能变为有效信号 |
R/B# 是开漏(Open-Drain)输出,器件内部只能把它拉低、不能主动驱动为高。必须外部上拉到 VCCQ,否则主控永远读到"忙",初始化第一步(等待 R/B# 变高)就卡死。常用 4.7 kΩ~10 kΩ;上拉到 VCCQ 而非 VCC;多 target 器件每个 R/B# 都要独立上拉。高速或大容性负载时可适当减小阻值,但以器件 datasheet / ONFI 规范为准。
1.4 关键电气参数
| 参数 | 符号 | 最小值 | 典型值 | 最大值 | 备注 |
|---|---|---|---|---|---|
| 核心电源电压 | VCC | 2.7 V / 1.7 V | 3.3 V 或 1.8 V | 3.6 V / 1.95 V | 依器件,见 datasheet |
| IO 电源电压 | VCCQ | 1.7 V / 2.7 V | 1.8 V(现代) | 1.95 V / 3.6 V | VCCQ ≤ VCC |
| 电源纹波 | Vripple | — | — | 100 mVp-p | 建议 ≤ 50 mV |
| 读工作电流 | ICC-R | — | 20 ~ 40 mA | 50 mA | 连续页读 |
| 编程 / 擦除电流 | ICC-P/E | — | 30 ~ 60 mA | 80 mA | 电荷泵工作期间 |
| 待机电流 | ICC-SB | — | 10 ~ 100 µA | 200 µA | CE# 无效、无操作 |
| 断电后电流 | Ioff | — | < 1 µA | — | 需负载开关切断 VCC / VCCQ |
| 输入高电平 | VIH | 0.7×VCCQ | — | VCCQ+0.3 | — |
| 输入低电平 | VIL | −0.3 | — | 0.3×VCCQ | — |
| 页读时间 | tR | — | 25 ~ 70 µs | 100 µs | 阵列读到数据寄存器 |
| 页编程时间 | tPROG | — | 200 µs ~ 1.5 ms | 按器件 | SLC 快、TLC 慢 |
| 块擦除时间 | tBERS | — | 2 ~ 10 ms | 按器件 | — |
| 上电到首条命令 | tPU | 1 ms | 5 ms | — | 建议留 5~10 ms |
| Reset 后就绪时间 | tRST | — | — | 5 / 10 / 50 ms | 编程 / 擦除 / 读中复位分别取不同上限 |
注:以上为通用参考量级,实际以器件 datasheet 为准。VIH / VIL 取值随 VCCQ 电平按比例换算。
2 · 协议与工作模式
并行 NAND 有两大协议阵营:ONFI(异步 SDR + 源同步 NV-DDR 系列)与 Toggle DDR(源同步 DDR)。二者命令集大部分兼容,但时序与训练流程不同,主控必须明确支持对应协议。
2.1 ONFI 异步 SDR(模式 0~5)
异步模式是上电后的默认模式,也是最兼容、最宽松的模式:没有时钟,所有操作由 CE# / CLE / ALE / WE# / RE# 的电平与边沿组合驱动,数据速率由 RE# 的翻转速率决定。ONFI 定义了 模式 0 ~ 模式 5 六个异步档位。
| 异步模式 | tRC / tWC(最小) | 等效速率(约) | 8-bit 理论吞吐 | 说明 |
|---|---|---|---|---|
| Mode 0 | 100 ns | 10 MT/s | 10 MB/s | 最慢,兼容性最好,上电默认 |
| Mode 1 | 50 ns | 20 MT/s | 20 MB/s | — |
| Mode 2 | 35 ns | ≈ 28.6 MT/s | ≈ 28.6 MB/s | — |
| Mode 3 | 30 ns | ≈ 33 MT/s | ≈ 33 MB/s | 常用推荐档 |
| Mode 4 | 25 ns | 40 MT/s | 40 MB/s | TSOP-48 的实际上限附近 |
| Mode 5 | ≈ 20 ~ 25 ns | ≈ 50 MT/s | ≈ 50 MB/s | 异步最高档,tRC ≈ 25 ns(部分器件定义到 20 ns),对 Layout 要求明显提高 |
异步模式没有时钟,主控通过 RE# 的翻转来"拉"数据,因此不存在时钟抖动与源同步训练问题,Layout 容错度高。代价是:RE# 每一次翻转都要经过完整的 tRC 周期、受 tREA(RE# 到数据有效)限制,速率被锁在 50 MT/s 量级。若产品对吞吐要求不高(< 40 MB/s),异步模式是最省心、最可靠的选择。
2.2 ONFI 源同步 DDR:NV-DDR / NV-DDR2 / NV-DDR3
从 NV-DDR(ONFI 2.x)开始,接口改为源同步 DDR:数据由 DQS(数据选通) 伴随传输,在 DQS 的上下沿都采样,因此单位引脚带宽翻倍。读写方向不同,时钟来源也不同。
| 模式 | 规范版本 | 最高数据速率 | 8-bit 理论吞吐 | RE# / DQS 形式 | 关键设计要求 |
|---|---|---|---|---|---|
| NV-DDR | ONFI 2.x | 200 MT/s | 200 MB/s | RE# 单端时钟;DQS 单端选通 | 需要 DQS 与数据线等长;RE# 串联端接 |
| NV-DDR2 | ONFI 3.x | 400 MT/s | 400 MB/s | RE# / RE_c 差分;DQS / DQS# 差分 | 100 Ω 差分阻抗;差分对等长;走线 < 5 cm;需 DQS 训练 |
| NV-DDR3 | ONFI 4.x | 800 ~ 1066 MT/s | 800 ~ 1066 MB/s | RE# / RE_c 差分;DQS / DQS# 差分 | 仅 BGA 封装可行;需 ODT / 驱动强度调节;Layout 极严苛 |
上表是理论峰值(总线带宽),实际有效吞吐还要扣除:tR(页读阵列等待,25~100 µs)、命令 / 地址周期开销、spare 区读取、ECC 校验与纠正时间、FTL 映射查表与垃圾回收。工程上通常按理论值的 50%~70% 估算有效吞吐。
2.3 Toggle DDR 1.0 / 2.0
Toggle DDR 由 Samsung 与 Toshiba(现 Kioxia)推动,同样采用源同步 DDR 与 DQS 选通,但没有独立的 RE# / WE#:它使用 DQS / DQS# 差分对作为双向选通,配合 W/R#(读写方向指示) 与 CLK 信号。命令与地址仍在 I/O 总线上以 DDR 方式传输。
- Toggle DDR 1.0:约 133 MT/s,8-bit 约 133 MB/s 理论峰值。
- Toggle DDR 2.0:最高 400 MT/s,8-bit 约 400 MB/s 理论峰值。
- 与 ONFI 的关系:基本命令集(Reset 0xFF、Read ID 0x90、Page Read 0x00+0x30、Program 0x80+0x10、Block Erase 0x60+0xD0、Read Status 0x70)与 ONFI 兼容;但 Read Parameter Page (0xEC) 是 ONFI 特有,Toggle 器件通过 Read ID 与厂商自定义方式识别;时序模式切换、DQS 训练流程不同。主控必须明确声明支持 Toggle。
2.4 速率档位与等效吞吐计算
吞吐计算的基本公式很简单:
理论峰值吞吐 (MB/s) = 总线位宽 (bit) ÷ 8 × 数据速率 (MT/s)
示例:
8-bit × 200 MT/s (NV-DDR) = 1 byte × 200 = 200 MB/s
8-bit × 400 MT/s (NV-DDR2) = 1 byte × 400 = 400 MB/s
8-bit × 800 MT/s (NV-DDR3) = 1 byte × 800 = 800 MB/s
16-bit × 400 MT/s (NV-DDR2) = 2 byte × 400 = 800 MB/s
8-bit × 50 MT/s (异步 Mode 5) = 50 MB/s
换算成有效吞吐(工程估算,按 60% 效率):
NV-DDR2 400 MT/s → 有效约 200~280 MB/s(还要扣 tR 与 ECC 时间)
| 模式 | 数据速率 | 8-bit 峰值 | 16-bit 峰值 | 典型 Layout 难度 |
|---|---|---|---|---|
| 异步 Mode 0~3 | 10 ~ 33 MT/s | 10 ~ 33 MB/s | 20 ~ 66 MB/s | 低 |
| 异步 Mode 4~5 | 40 ~ 50 MT/s | 40 ~ 50 MB/s | 80 ~ 100 MB/s | 中 |
| Toggle DDR 1.0 | 133 MT/s | 133 MB/s | 266 MB/s | 中高 |
| NV-DDR | 200 MT/s | 200 MB/s | 400 MB/s | 中高 |
| Toggle DDR 2.0 / NV-DDR2 | 400 MT/s | 400 MB/s | 800 MB/s | 高 |
| NV-DDR3 | 800 ~ 1066 MT/s | 800 ~ 1066 MB/s | 1.6 ~ 2.1 GB/s | 极高 |
2.5 8-bit 与 16-bit 总线
- 8-bit(I/O0~I/O7):最常见。命令与地址按字节发送,容量越大地址周期越多(常见 4~6 个周期)。
- 16-bit(I/O0~I/O15):数据周期按字(2 字节)传输,数据吞吐理论翻倍;但命令与地址仍只用 I/O0~I/O7(高 8 位在命令 / 地址周期被忽略)。
- 代价:多 8 根数据线 + 更多的 VSSQ / VCCQ 引脚,只能用 BGA 封装;Layout 等长难度与串扰风险显著上升。
- 选型建议:只有在主控明确支持 16-bit 且吞吐需求确实紧张时才用 16-bit;否则优先 8-bit + 更高速率模式(引脚更少、等长更容易、可靠性更高)。
2.6 异步读时序(Page Read 全流程)
理解一次完整页读的时序,是排查"读 ID 失败""R/B# 一直忙""数据全 FF"等问题的基础。
一次页读的完整过程是:① CLE 拉高,WE# 上升沿锁存命令 0x00;② ALE 拉高,连续 5 个(列 2 + 行 3,大容量器件更多)WE# 周期锁存地址;③ CLE 拉高,锁存确认命令 0x30;④ 器件进入阵列读,R/B# 拉低并维持 tR(25~100 µs,TLC 更长);⑤ R/B# 变高后,主控用 RE# 翻转把数据从数据寄存器逐字节"拉"出来。
关键点:R/B# 只在第 ④ 步忙,之后的数据输出阶段 R/B# 是高的;数据输出阶段再用 R/B# 判断忙是没有意义的。
3 · 主控要求
3.1 NAND 控制器
并行 NAND 不能被"普通 GPIO 或普通 SPI"驱动,主控必须内置专用 NAND 控制器(NANDC / FMC / EMI / GPMI 等,各家叫法不同)。它至少需要提供:
- 时序产生:硬件产生 CLE / ALE / CE# / RE# / WE# 的时序,可编程设置 tRC、tRP、tREA、tWP、tCS、tCH 等建立 / 保持 / 脉宽参数。
- 总线复用:自动完成"命令周期 → 地址周期 → 数据周期"的分时复用,支持可配置的地址周期数(4~6 周期)。
- 模式支持:明确支持异步 SDR,以及所需的 NV-DDR / NV-DDR2 / NV-DDR3 或 Toggle DDR 1.0 / 2.0;DDR 模式还需要支持 DQS 训练(read/write leveling、DQS delay 校准)。
- R/B# 采样:能正确采样开漏 R/B# 并支持超时判断。
- DMA:页级数据搬运走 DMA,避免 CPU 参与每个字节。
- 多 CE#:支持 1~4(或更多)片选,以挂载多 target。
3.2 硬件 ECC(BCH / LDPC)
NAND 阵列天然存在位翻转(读干扰、编程干扰、电荷泄漏、P/E 循环磨损)。所有并行 NAND 都要求主控在数据写入时计算校验码、读出时纠错。这项工作量极大,必须由硬件 ECC 引擎完成。
| 颗粒类型 | 典型纠错需求 | 推荐算法 | 说明 |
|---|---|---|---|
| SLC | 1 ~ 8 bit / 512 B(常见 1~4 bit) | BCH 足够 | 纠错需求最低,早期主控的 1-bit / 4-bit BCH 即可;寿命末期余量仍充足 |
| MLC | 8 ~ 24 bit / 1 KB(部分折算为 4~12 bit / 512 B) | BCH(高端需 LDPC) | 工艺越先进需求越高;1x nm MLC 已接近 BCH 极限 |
| TLC | 约 40 ~ 80 bit / 1 KB 量级 | LDPC(必需) | 需要硬判决 + 软判决重读(Read Retry)、多档读参考电压;软件开销巨大 |
| QLC(极少用于并行接口) | 更高 | LDPC | 并行接口已基本退出该领域 |
没有硬件 ECC 引擎的主控,不要选并行 NAND。唯一的例外是"小容量 SLC + 软件 ECC + 极低访问频率"的实验性场景,但 CPU 占用率极高、性能极差、可靠性无法保证,量产项目不应采用。
另外注意:即使主控有硬件 ECC,也要核对 单页 ECC 保护粒度(常见 512 B 或 1 KB 一个校验段)与 每页可容纳的校验段数 是否能覆盖所选器件的页大小(2 KB / 4 KB / 8 KB / 16 KB)。
准确的 ECC 需求写在器件 datasheet 里,也可以通过 Read Parameter Page (0xEC) 从 ONFI 参数页的"Number of bits of ECC correction"与"ECC codeword size"字段读出。设计与 BSP 配置时以这两个字段为准,不要凭经验拍脑袋。
3.3 FTL(Flash Translation Layer)
FTL 是把"会坏块、有擦写寿命、必须先擦后写"的物理 NAND,包装成主控可以随意读写的逻辑块设备的软件层。工作量巨大,是并行 NAND 方案最主要的隐性成本。
| 模块 | 必须做的事 | 不做会怎样 |
|---|---|---|
| 坏块管理(BBM) | 扫描并标记出厂坏块(厂商在 spare 区写非 FF 标记),运行中检测并替换使用中坏块;维护坏块表并持久化 | 数据写入坏块直接丢失;坏块表丢失导致整盘不可用 |
| 逻辑→物理映射 | 维护 LBA → PBA 映射表,支持页级或块级映射;映射表本身要冗余存储与掉电恢复 | 无法寻址;掉电后映射表损坏即整盘失效 |
| 磨损均衡(Wear Leveling) | 动态 + 静态磨损均衡,把擦写次数摊平到所有块 | 热点块(如 FAT 表、日志文件所在块)提前写穿,整盘早夭 |
| 垃圾回收(GC) | 回收含失效页的块:搬移有效页 → 擦除 → 归还空闲池;需预留 OP(Over-Provisioning) | 无空闲块可写,写性能断崖式下跌甚至写失败 |
| 读干扰 / 数据保持处理 | 读计数达到阈值后搬移数据;必要时定期刷新 | 长期只读的分区出现不可纠错误 |
| 掉电恢复 | 关键元数据双备份 + 版本号 + 原子提交;上电扫描重建 | 掉电后映射表损坏,整盘变砖 |
如果主控厂商没有提供经过量产验证的 FTL(或其生态里没有可靠的开源 / 商业 FTL),强烈建议改用 eMMC / SD NAND / SPI NAND —— 它们内部已集成控制器与 FTL,主控侧只需要标准的块设备驱动。自己从零写一套可靠的 FTL,工作量与风险远超节省下来的 BOM 成本。
3.4 常见主控与 GPIO 模拟警告
| 主控 / 平台 | NAND 接口 | ECC 能力 | 备注 |
|---|---|---|---|
| NXP i.MX 系列(6/7/8/9 等) | GPMI / SEMC NAND 控制器,8-bit,支持异步与部分 ONFI DDR | BCH(最高 40 bit 级,依型号) | 生态成熟,Linux BSP 支持完善,工业领域常见 |
| TI AM335x / AM62x 等 | GPMC / EMIF,8/16-bit,异步 + ONFI | BCH(最高 16 bit 级) | GPMC 时序可编程性强,注意引脚复用与等长 |
| Rockchip(RK 系列) | 专用 NANDC,8-bit,异步 + NV-DDR / Toggle | LDPC(新型号) | 消费类方案成熟,参考设计约束多 |
| 全志(Allwinner) | 专用 NANDC,8-bit,异步 + NV-DDR / Toggle | BCH / LDPC(依型号) | 成本敏感方案常见 |
| STM32(带 FMC NAND 控制器的型号,如 F4/F7/H7 部分型号) | FMC NAND bank,8/16-bit,仅异步 | 仅 1-bit 汉明码 ECC(部分型号无硬件 ECC) | 只能配小容量 SLC;且 FTL 需自行实现 |
| Microchip SAM9x / SAMA5 | SMC / NFC,8-bit,异步 + ONFI | BCH / PMECC(最高 24~32 bit 级) | 工控长供货场景常见 |
| Xilinx Zynq / Zynq UltraScale+ | PS 侧 NAND 控制器(部分型号)/ PL 侧软核 IP | 依 IP | DDR 模式通常需自建 PL 逻辑与训练 |
用普通 GPIO 软件模拟 CLE / ALE / CE# / RE# / WE# 时序,每一次总线翻转都要数条指令,实际速率通常 < 1 MB/s,且 CPU 被完全占用、时序抖动大、无法保证 tRC / tREA 等参数。它只适合小容量、极少访问的场景(例如上电读一次配置参数),量产项目不推荐。若确实需要,也请用 SLC 器件 + 异步 Mode 0 + 硬件 ECC 已不可用时的软件 ECC,并充分评估最坏情况下的访问耗时。
4 · 电源设计
4.1 VCC 与 VCCQ 双电源
并行 NAND 有两组独立电源,这是它与多数单电源存储器件的重要差异:
| 电源 | 作用 | 常见电平 | 设计要点 |
|---|---|---|---|
| VCC | 核心 / 阵列电源(电荷泵、阵列操作) | 3.3 V 或 1.8 V(依器件) | 承担编程 / 擦除的峰值电流;纹波要求高 |
| VCCQ | I/O 接口电源,决定 IO 电平标准 | 1.8 V(现代器件),早期有 3.3 V | 所有信号(含 R/B# 上拉)以 VCCQ 为参考;必须与主控 IO 电平匹配 |
约束一:VCCQ 不得高于 VCC。即 VCCQ ≤ VCC 必须全程成立,包括上电爬升过程、稳态运行、掉电下降过程。若 VCC = 1.8 V,VCCQ 只能是 1.8 V;若 VCC = 3.3 V,VCCQ 可为 3.3 V 或 1.8 V。
约束二:上电时 VCC 先于或同时于 VCCQ 上电;断电时 VCCQ 先于或同时于 VCC 掉电。违反会导致 IO 口通过 ESD 二极管向核心电源倒灌,轻则 latch-up,重则永久损坏器件。
- 方案 A(最简单,推荐):VCC 与 VCCQ 由同一路电源取电(例如都用 1.8 V),物理上不存在顺序问题。现代 1.8 V 器件大量采用此方案。
- 方案 B:VCC 与 VCCQ 各自独立 LDO / DCDC,用 使能脚(EN)级联:VCC 的 PGOOD 去驱动 VCCQ 的 EN,保证 VCC 先起;断电时用 VCCQ 的使能先撤。
- 方案 C:两路之间加肖特基二极管钳位(VCCQ → VCC 方向),保证 VCCQ 不超过 VCC + Vf。作为兜底保护,不能替代时序设计。
- 方案 D:用带时序控制的电源管理 IC(PMIC),在固件里配置上电 / 下电顺序。
4.2 上电 / 断电时序
1. VCC 上电 → VCCQ 上电(保证 VCCQ ≤ VCC,VCC 不晚于 VCCQ)
2. 等待电源稳定:≥ 1 ms,建议 5 ms(含 LDO / DCDC 软启动与复位释放)
3. 控制信号保持无效态:CE# = RE# = WE# = 高,CLE = ALE = 低,WP# = 高
4. 发 Reset 命令:CLE = 1,总线写 0xFF,WE# 上升沿锁存
5. 等 R/B# 变高(tRST,最大 5 / 10 / 50 ms,取决于复位前器件状态)
6. Read ID 0x90:读厂商 ID / 器件 ID,确认器件存在
7. Read Parameter Page 0xEC:校验 "ONFI" 签名,读取页/块/spare 大小、
ECC 要求、支持的时序模式表
8. Set Features 0xEF(Feature 地址 0x01 = Timing Mode):切换到目标时序模式
9. DDR 模式:切换后需做 Synchronous Reset,并执行 DQS 训练 / read leveling
系统掉电时,应先让 NAND 完成或中止当前操作、把 IO 置为高阻、撤掉 VCCQ,再撤 VCC。若用负载开关整路切断,应确保两路开关的时序满足"VCCQ 先断";更简单的做法是两路共用同一开关且 VCCQ 由 VCC 二次降压得到,天然满足顺序。
4.3 去耦设计
| 电源 | 推荐配置 | 布局要求 | 禁止 |
|---|---|---|---|
| VCC(核心) | 10 µF(bulk)+ 0.1 µF × 2 | 0.1 µF 尽量靠近 VCC 引脚(BGA 时放背面 via 旁);bulk 可在 2~3 cm 内 | 禁止在 VCC / VCCQ 上串磁珠。磁珠的直流阻抗会造成压降、阻抗峰值会放大瞬态纹波,对电荷泵工作的大电流阶跃极为不利 |
| VCCQ(IO) | 每个 VCCQ 引脚 0.1 µF(紧靠引脚)+ 4.7~10 µF bulk | 高速模式下每个 VCCQ 球都要有独立 0.1 µF;地过孔紧邻电容地焊盘 |
- 优先使用 X5R / X7R 材质的多层陶瓷电容(MLCC),封装 0402 / 0201(BGA 背面)。注意 MLCC 直流偏压效应:1.8 V 下 0402 10 µF 的实际容值可能只剩标称的 30%~50%,选型时留足裕量。
- 每个去耦电容的地端过孔要紧邻其地焊盘(< 0.5 mm),直接打到完整地平面,不要共用长过孔。
- VCC 与 VCCQ 的地回流都应落在完整的地平面上;VSS 与 VSSQ 的所有球 / 脚都必须良好接地,不能只接一部分。
4.4 电流与功耗预算
| 工作状态 | 电流 | 说明与预算建议 |
|---|---|---|
| 连续读 | 20 ~ 40 mA | 按 40 mA 预算 LDO / DCDC 的持续输出能力 |
| 编程 / 擦除 | 30 ~ 60 mA | 电荷泵工作,伴随高频瞬态;按 80 mA 预留瞬态裕量 |
| 待机(CE# 无效) | 10 ~ 100 µA | 多数器件无深度睡眠命令,靠 CE# 无效进入待机 |
| 断电(负载开关关断) | < 1 µA | 必须用负载开关切断 VCC / VCCQ 才能达到;仅靠器件自身待机电流达不到 µA 级 |
电池供电产品的低功耗策略:空闲时保持 CE# 无效进入待机;长时间不用则先用 GPIO 把 IO 置高阻、再用负载开关切断 VCCQ 与 VCC(顺序仍要遵守 VCCQ 先断),唤醒时重新走一遍完整上电初始化流程。