只读分享解决方案文档原理方案设计📅 2026-10-14🔖 Rev 1.0⏳ 还有3日到期
🔧解决方案&应用市场分析 -> 原理方案设计 -> 串行总线系列产品方案 -> SPI_NAND_Flash_电路设计指南

SPI_NAND_Flash_电路设计指南

同系列 · 原理方案设计
扫码打开本页
微信扫码

SPI NAND Flash 电路设计指南

编制日期 2026-10-14 | 版本号 Rev 1.0

页 / 块存储结构 · 内置 ECC 与坏块管理 · Standard / Dual / Quad / DTR · 掉电安全 · PCB Layout 与量产

0.1 适用范围

本指南面向使用 SPI NAND Flash(串行 NAND,1-bit / 2-bit / 4-bit SPI 接口,SLC 工艺为主)作为代码或数据存储的硬件与固件设计,覆盖器件选型、原理图设计、电源与低功耗、PCB Layout、可靠性与量产测试。

典型应用:IoT 终端、智能家电、可穿戴、工业 HMI、路由器与网关、摄像头模组、MCU 外部数据存储 / 日志 / OTA 备份区。

最重要的一句话

SPI NAND 不是 SPI NOR。它不能随机读、不能 XIP、写前必须先整块擦除、出厂就带坏块、每次读写都必须检查 ECC 状态。把 SPI NOR 的驱动直接套到 SPI NAND 上,一定会出错。硬件上两者引脚兼容,但软件栈完全不同。

0.2 同系列文档

文档器件类型关注重点
SPI NOR 电路设计指南串行 NOR FlashQuad/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.1HS200/HS400、1.8 V VCCQ、DS 选通与等长
SD NAND 电路设计指南贴片式 SD NANDSPI/SDIO 双模式、无休眠指令、VCC 负载开关断电
NAND MCP 电路设计指南多芯片合封存储多 die 与多 CE、双电源轨、HDI 扇出
并行NOR (PPI NOR) 电路设计指南并行 NOR Flash异步读时序、XIP、等待周期、总线扩展
PSRAM 电路设计指南伪静态 RAMOPI/HyperBus、刷新与延迟周期、XIP 与帧缓存
DDR2 电路设计指南DDR2 SDRAMSSTL_18、T 分支拓扑、VTT 端接、ODT
DDR3 电路设计指南DDR3 / DDR3LFly-by 拓扑、write leveling、动态 ODT
DDR4 电路设计指南DDR4 SDRAMPOD12、bank group、DBI、2D 训练
DDR5 电路设计指南DDR5 SDRAM双子通道、On-DIMM PMIC、DFE、同帧 ECC
EEPROM 电路设计指南EEPROMI²C/SPI 接口、上拉电阻与总线电容、页写与写保护

1 · 器件基础

选型先定接口与容量,再定封装与温度等级。SPI NAND 的核心价值是:用 8 个引脚换来 NOR 给不了的大容量与低成本。

1.1 器件定位与选型对比

对比项SPI NANDSPI NOR并行 NANDeMMCSD NAND
典型容量128 MB ~ 4 GB512 KB ~ 256 MB1 ~ 8 GB4 ~ 128 GB128 MB ~ 8 GB
接口SPI / QSPI(×1 / ×2 / ×4)SPI / QSPI / QPI8-bit 并行 ONFIeMMC 8-bit / HS400SPI 或 SDIO
引脚数8(BGA 16 / 24)8(BGA 24)48 / 63153 / 1698(LGA-8)
随机读不支持 需整页 Loadns 级任意地址不支持 整页读支持(控制器)支持(控制器)
XIP不可可以不可不可(需搬 RAM)不可
读吞吐13 ~ 133 MB/s(接口)50 ~ 400 MB/s40 ~ 200 MB/s100 ~ 400 MB/s10 ~ 50 MB/s
写速度(有效)0.5 ~ 3 MB/s0.1 ~ 1 MB/s5 ~ 40 MB/s10 ~ 150 MB/s2 ~ 15 MB/s
编程单位页 2048 B页 256 B(字节可编程)页 4 ~ 16 KB512 B 块512 B 块
擦除单位块 128 KB扇区 4 KB / 块 32 ~ 64 KB块 128 ~ 512 KB内部管理内部管理
坏块管理主控负责无坏块主控负责内置内置
ECC多数内置,需查状态位不需要主控实现内置内置
主控负担中(FTL / BBT / 磨损均衡)低高低低
成本(同容量)最低高低中中
选型一句话

要跑代码 / 要 XIP → SPI NOR;只要存数据且 > 128 MB、引脚紧张、成本敏感 → SPI NAND;主控没有 NAND 驱动能力或不想做 FTL → SD NAND / eMMC。

1.2 常见封装与引脚定义

封装尺寸典型型号特点
WSON-8(6×5 mm)6.0 × 5.0 × 0.8 mm,pitch 1.27W25N01GV / MT29F1G01 / MX35LF1G主流,底部散热焊盘,手工可焊
WSON-8(8×6 mm)8.0 × 6.0 × 0.8 mm,pitch 1.27W25N02KV / W25N04KV / 部分 Kioxia大容量型号,引脚排布需核对
SOP-8(208 mil)5.3 × 7.9 mm,pitch 1.27GD5F1GQ / MX35LF1G最好焊接与返修,体积大
USON-8 / DFN-84.0 × 3.0 / 3.0 × 2.0 mm部分小容量型号超小体积,焊接难度高
BGA-16 / BGA-24球距 0.8 / 1.0 mmW25N01GV IT / MT29F 系列球位各厂差异大,必须按 datasheet 建库
警告:引脚定义各厂商不完全一致

SPI NAND 的 8 脚排列虽然大多沿用 SPI NOR 的通用排布(1=CS#、2=DO/IO1、3=WP#/IO2、4=GND、5=DI/IO0、6=CLK、7=HOLD#/IO3、8=VCC),但存在真实差异:

  • 第 7 脚功能不同:部分型号是 HOLD#,部分是 RESET#,部分是 HOLD#/RESET# 复用(由配置寄存器选择)。设计成 RESET# 时,复位时序与上拉要求不同。
  • BGA 球位完全不同:同为 BGA-24,Winbond、Micron、Kioxia 的球定义不可互换,不能凭经验建库。
  • WSON 底部焊盘:多数接地或悬空,少数型号底部焊盘有电气连接要求,需查 Land Pattern 章节。
  • IO2 / IO3 内部上拉:部分型号内置弱上拉,外部可不加上拉;部分型号必须外部上拉,否则 Quad 模式不稳定。

结论:原理图与 PCB 建库前,必须逐一核对目标型号的 datasheet 引脚表与封装图,禁止直接复制同系列其他型号或 SPI NOR 的封装。

SPI NAND 八脚封装引脚定义(顶视图) 八脚封装顶视图,左侧 CS#、DO/IO1、WP#/IO2、GND,右侧 VCC、HOLD#/RESET#/IO3、CLK、DI/IO0。 SPI NAND 八脚通用引脚定义(顶视图) SPI NAND WSON-8 / SOP-8 顶视 Pin 1 1 CS# 2 DO / IO1 3 WP# / IO2 4 GND 8 VCC 7 HOLD# / RESET# / IO3 6 CLK (SCK) 5 DI / IO0 警告:各厂商 / 型号的复用功能(HOLD# 或 RESET#)与 BGA 球位不完全一致,须逐一核对。 Quad 模式需占用 IO2 / IO3 作数据线,此时硬件上不能再把它们当作 WP# / HOLD# 使用。
图 1-1 · 八脚封装通用引脚定义。适用范围:WSON-8 6×5 / 8×6、SOP-8、USON-8;BGA 封装请以 datasheet 球位图为准。

引脚功能说明

引脚类型说明硬件设计要点
CS#输入片选,低有效;帧起始 / 结束必须 10 kΩ 上拉到 VCC,避免上电期间误选通
SCK输入串行时钟,最高 104 MHz(DDR 型更高)源端串阻 22 ~ 33 Ω;包地;与 IO0~3 等长
SI (IO0)输入/输出标准模式下主发从收;Quad 下为 DQ0串阻靠近主控
SO (IO1)输出/输入标准模式下从发主收;Quad 下为 DQ1串阻靠近器件(回读方向)
WP# (IO2)输入/输出写保护,低有效;Quad 下为 DQ2建议 4.7 ~ 10 kΩ 上拉或 GPIO 控制;Quad 时接主控
HOLD# / RESET# (IO3)输入/输出保持或复位;Quad 下为 DQ3同 IO2;若为 RESET#,需保证上电期间为高
VCC电源2.7 ~ 3.6 V(3.3 V 型)或 1.7 ~ 1.95 V(1.8 V 型)0.1 µF 紧靠引脚 + 4.7 ~ 10 µF bulk;禁止串磁珠
GND地地回路完整地平面,多打过孔;WSON 底部焊盘按手册处理

1.3 关键电气参数

参数典型值说明
供电电压 VCC3.3 V 型:2.70 ~ 3.60 V
1.8 V 型:1.70 ~ 1.95 V
同一板上不可混接,需确认主控 IO 电平
接口时钟最高 104 MHz(常见)
部分型号 133 MHz;DDR 型更高
见 4.3,实际吞吐受 NAND 编程时间限制
页大小2176 B(2048 + 128 spare)部分 1 Gb 以下型号为 1024 B 主区
块大小64 页 = 128 KB(+ spare 4 / 8 KB)擦除最小单位
页读到 Cache tRD25 ~ 100 µs阵列 → Cache 寄存器
页编程 tPROG200 µs ~ 1.5 ms与 P/E 次数、温度相关
块擦除 tBERS2 ~ 10 ms典型 3 ~ 4 ms
复位恢复 tRST读/编程复位 50 µs,擦除复位 550 µs(部分更长)Reset 0xFF 后必须等待
读电流15 ~ 30 mA连续读
编程 / 擦除电流20 ~ 40 mA电源需按 50 mA 设计余量
待机电流10 ~ 50 µACS# 拉高,无操作
深睡眠电流1 ~ 20 µA(视型号)需 datasheet 确认是否支持 0xB9
ECC 能力1 bit / 512 B(常见)
部分型号 4 ~ 8 bit / 512 B
必须检查 ECC 状态位
擦写耐久性SLC 5 ~ 10 万次需磨损均衡
数据保持10 年(@ < 10% P/E 次数,常温)随擦写次数与温度下降
ESDHBM ±2 kV(部分 ±4 kV);CDM ±500 ~ 1 kV见第 9 章
工作温度工业级 −40 ~ +85 °C;部分 −40 ~ +105 °C高温下数据保持显著下降

1.4 与 SPI NOR 的核心差异

SPI NAND 与 SPI NOR 的 8 脚封装高度兼容,但两者是完全不同的器件。以下差异决定了整个软件栈的形态。

差异点SPI NORSPI NAND影响
读方式发送地址后直接输出数据两段式:先 0x13 整页读入内部 Cache,再用 0x03/0x0B 从 Cache 读NAND 不能随机读任意字节,随机访问开销大
XIP支持,CPU 可直接取指不支持,Cache 只有一页大小,无法映射整个地址空间代码必须搬到 RAM 运行
擦除粒度扇区 4 KB块 128 KB改 1 字节也要搬整块,需要 FTL 或日志结构文件系统
编程粒度可按字节编程(1 → 0)只能按页编程(2048 B)不足一页需填充 0xFF
写前擦除需要,但粒度小需要,且粒度大写入放大明显
坏块无出厂坏块 + 使用中坏块必须建坏块表(BBT)与替换映射
ECC不需要必须有,多数内置每次读都要检查 ECC 状态位
spare 区无每页 64 / 128 B存 ECC 校验码、坏块标记、文件系统元数据
状态轮询0x05 读状态寄存器0x0F + 地址 0xC0(GET FEATURE)NOR 驱动直接复用会一直读到错误状态
写保护状态寄存器 BP 位SET FEATURE 0xA0(BP0~BP3 / TB / WP#)寄存器访问方式不同
OTP安全寄存器OTP 区,由 0xB0 控制用于存放唯一 ID、校准数据
掉电后果丢失当前页数据可能造成坏块,甚至破坏相邻页掉电保护要求更高
最常见的迁移错误
  • 用 0x05 轮询 SPI NAND 的 busy → 读到的是无意义数据,驱动卡死或误判。
  • 把 0x03 当作"从阵列读"使用 → 实际读到的是上一次 Cache 里的内容,不是目标页。
  • 按 4 KB 扇区擦除 → NAND 最小擦除单位是 128 KB 块,命令会失败或擦掉不该擦的数据。
  • 忽略 ECC 状态位 → 读到已被纠正/无法纠正的数据,长时间运行后数据静默损坏。

2 · 存储结构与访问模型

理解"阵列 → Cache → 总线"这条数据通路,是写对 SPI NAND 驱动的前提。

2.1 页 / 块 / plane / die 结构

SPI NAND 存储阵列层次结构 左图展示 Device、Die、Plane、Block 的嵌套层次,右图展示块与页以及数据区与 spare 区的划分。 存储阵列层次:Device / Die / Plane / Block / Page Device / Target Die (LUN) Plane 0 Blk 0 · 64 Pg Blk 1 · 64 Pg Blk 2 · 64 Pg … Blk 1023 · 64 Pg Plane 1 Blk 0 · 64 Pg Blk 1 · 64 Pg Blk 2 · 64 Pg … Blk 1023 · 64 Pg OTP 区:独立于主阵列,一次性可编程 块 / 页 / spare 结构 Block = 64 × Page Page 0 · 2048 B + 128 B Page 1 · 2048 B + 128 B … Page 63 · 2048 B + 128 B 页结构(Page) Data 2048 B Spare 用户数据 64 B spare:坏块标记 + ECC 校验 + 元数据 擦除以块为单位,写前必擦;不可字节编程 不能 XIP:必须先整页载入 Cache
图 2-1 · 存储阵列层次(左)与块 / 页 / spare 结构(右)。块数、plane 数、die 数随容量变化,以 datasheet 为准。

层次概念

  • Page(页):编程与读出的最小单位,2048 B 数据区 + 128 B spare 区(合计 2176 B)。
  • Block(块):擦除的最小单位,64 页 = 128 KB 数据区 + 4 KB spare。擦除时间 2 ~ 10 ms。
  • Plane:若干块组成一个 plane,不同 plane 可并行操作(部分型号支持 multi-plane program / erase)。
  • Die / LUN:一个独立的操作单元,有自己的状态寄存器;多 die 器件通过片内地址区分。
  • Target / Device:一个 CS# 下的完整器件,可能包含 1 ~ 4 个 die。
  • OTP 区:独立于主阵列的一次性可编程区域,常用于存放设备序列号、校准参数、密钥。通过 SET FEATURE 0xB0 进入与加锁,加锁后不可逆。

2.2 spare 区布局

spare 区(部分文档称 OOB / redundant area)由三部分占用,布局由厂商与软件栈共同决定:

偏移(典型)内容说明
Byte 0坏块标记出厂坏块由厂商在非 0xFF 处标记(多为 0x00);软件标记时同样写非 0xFF
中间若干字节ECC 校验码内置 ECC 型号由器件自动写入与校验,软件不可覆盖
其余文件系统元数据littlefs/FAT 的 tag、CRC、版本号、块序列号
注意

使用内置 ECC 时,spare 区中 ECC 占用的字节对软件是只读/自动维护的。Program Load 阶段如果往这些字节写入数据,可能被器件覆盖或导致 ECC 校验失败。spare 可用字节数请以 datasheet 的 "Spare Area Mapping" 为准。

2.3 Cache 读模型:为什么不能 XIP

SPI NAND 内部只有一个 Cache 寄存器(页缓冲),大小等于页大小(2048 B)。读操作必须分两步:

  1. Page Read to Cache(0x13):器件把目标页从 NAND 阵列整体搬进 Cache,耗时 tRD = 25 ~ 100 µs。期间 OIP = 1。
  2. Read from Cache(0x03 / 0x0B / 0x3B / 0x6B):从 Cache 中按列地址读出,可以任意长度、任意起始偏移、可分多次读。
SPI NAND 页读两段式 Cache 读模型 数据从 NAND 阵列经 Page Read 命令进入 Cache 寄存器,再由读 Cache 命令按列地址输出到主控。 页读两段式:Page Read to Cache → Read from Cache NAND 存储阵列 Block / Page Page Read 0x13 · tRD 25~100 µs Cache 寄存器 2048 B(主区 · 页合计 2176 B) Read from Cache 0x03 / 0x0B / 0x3B / 0x6B 阶段 1:阵列 → Cache 阶段 2:Cache → MCU(可按字节读) 0x13 + 地址 tRD 25~100 µs(阵列→Cache) 0x0B + A + dummy 数据输出 2048 B(×1/×2/×4) 两段之间 CS# 必须保持有效;部分型号要求第 1 段结束后拉高 CS#
图 2-2 · 页读两段式流程。每次换页都必须重新执行 0x13,这是 SPI NAND 随机读性能远低于 NOR 的根本原因。
为什么不能 XIP

XIP 要求 CPU 在任意时刻、任意地址都能在几十纳秒内取到指令。SPI NAND 的 Cache 只有 一页,切换地址(跨页)就要重新执行 0x13 并等待 25 ~ 100 µs —— 相当于每次跨页取指停顿上百微秒,完全不可接受。因此:

  • 代码存储请用 SPI NOR;
  • SPI NAND 只用于数据、日志、文件系统、OTA 镜像;
  • 若必须从 NAND 启动,需 BootROM 把镜像整体搬到 RAM 再跳转。
连续读(Continuous Read)

部分型号支持 Read from Cache 的连续读模式:读满一页后器件自动启动下一页的 Page Read 并继续输出,无需主控重发 0x13。此特性大幅改善顺序读吞吐,但各厂实现与使能方式不同,且跨块边界时行为需确认,使用前务必查 datasheet。

3 · ECC 与坏块管理

这是 SPI NAND 与 NOR 在软件层面最大的工作量所在。硬件工程师虽不写 FTL,但必须理解其需求,才能在原理图与电源设计上留足余量。

3.1 内置 ECC 与外置 ECC

方案实现优点缺点适用
内置 ECC(主流)器件内部硬件校验,spare 区自动写校验码主控零负担,兼容性好纠正能力固定(多为 1 bit / 512 B),状态位位置各厂不同MCU 资源有限的绝大多数设计
外置 / 软件 ECC主控计算 Hamming / BCH,写进 spare纠正能力可选(4 ~ 24 bit)占用 Flash 带宽与 CPU,spare 布局需自行管理无内置 ECC 的老型号、高可靠性需求
器件 ECC + 软件 CRC器件管位翻转,软件管逻辑错误/掉电半写覆盖掉电、半页写等器件 ECC 管不到的场景少量开销推荐
ECC 使能与状态检查
  • 多数内置 ECC 型号出厂即启用;部分型号需要软件通过 SET FEATURE 0xB0 置位 ECC_EN 后才生效。上电初始化时显式配置一次最稳妥。
  • 典型纠正能力 1 bit / 512 B;部分新型号支持 4 ~ 8 bit / 512 B。
  • 每次读操作之后必须检查 ECC 状态位。若出现"已纠正"提示,说明该块正在退化,应记录并在空闲时把数据搬走到好块;若出现不可纠正错误,该页数据已丢失,须立即标记坏块并从备份恢复。
  • 不要因为"ECC 帮我纠了"就忽略状态位 —— 等到不可纠正时数据已经没了。

3.2 坏块标记与坏块表(BBT)

SPI NAND 出厂时即存在坏块(厂商允许一定比例),使用过程中还会产生新坏块。坏块不可修复,只能标记并替换。

  • 标记位置:厂商在每个坏块的第 1 页和第 2 页的 spare 区首字节写入非 0xFF 值(多为 0x00)。双页冗余是为了防止第一页本身损坏。
  • 识别方法:读该字节,非 0xFF 即为坏块。注意必须在 ECC 禁用或忽略 ECC 状态的前提下读原始值,否则可能被 ECC 纠正逻辑干扰。
  • 建表时机:上电时扫描全盘建立 BBT。1 Gb 器件有 1024 个块,扫描耗时约 1024 × (tRD + 读 spare) ≈ 数十毫秒到数百毫秒。对启动时间敏感的系统,可把 BBT 固化到指定块,上电直接读取,只在校验失败时才全盘重扫。
  • 运行期新增:出现 P_FAIL、E_FAIL 或 ECC 不可纠正错误时,立即把该块标记(写 spare 首字节非 0xFF,需要时先擦除)并加入 BBT,然后从备用块池取一块做替换映射。
SPI NAND 坏块管理流程 上电后复位、读 ID、逐块读 spare 首字节判断是否坏块,好块进入空闲池,坏块记入坏块表。 坏块管理:上电扫描与运行期替换 ① 上电复位(0xFF) 等待 tRST 后再发命令 ② 读 JEDEC ID(0x9F) 核对厂商 ID 与容量 ③ 遍历全部块 读第 1 页 spare 首字节 ④ spare 首字节是否为 0xFF? 否 坏块 → 记入 BBT 不参与分配与映射 是 ⑤ 好块 → 纳入空闲块池 运行中:P_FAIL / E_FAIL / ECC 不可纠 → 立即标记坏块并从备用块池替换
图 3-1 · 坏块扫描与替换流程。全盘扫描较慢时可把 BBT 固化到固定块,上电校验后直接加载。

3.3 磨损均衡与垃圾回收

  • 磨损均衡(Wear Leveling):把擦写次数摊到所有块上,避免日志区等热点块提前失效。SLC 典型 5 ~ 10 万次 P/E,若无均衡,反复写同一块可在数天内写穿。
  • 垃圾回收(GC):日志型文件系统写满后,需要把某块中的有效页搬到新块,再擦除旧块。GC 期间写入延迟会突然增大,实时性要求高的系统要预留时间预算。
  • 预留空间(Over-Provisioning):建议保留 5% ~ 10% 的块作为备用池,用于替换坏块与 GC 周转。容量规划时不能按满容量设计。
  • 文件系统选型:优先 littlefs(掉电安全、内置磨损均衡、专为 NOR/NAND 设计),其次是 FATFS + 自有 FTL,或 SPIFFS。裸擦写管理容易在掉电时损坏元数据。

4 · 接口与工作模式

SPI NAND 沿用标准 SPI 帧格式,但命令集与 NOR 不同。Quad 模式是性能关键,也是最容易踩坑的地方。

4.1 Standard / Dual / Quad / DTR

模式数据线命令/地址时钟沿说明
Standard SPIIO0(出)/ IO1(入)单线单沿(SDR)默认上电状态,兼容性最好
Dual SPIIO0 + IO1单线单沿读吞吐 ×2,用 0x3B
Quad SPIIO0 ~ IO3单线(命令/地址)单沿读吞吐 ×4,用 0x6B;需占用 IO2/IO3
QPI(部分型号)IO0 ~ IO3四线单沿命令也走 4 线,进一步省周期,型号支持差异大
DTR / DDRIO0 ~ IO3单线双沿相同时钟频率下再翻倍,时序裕量小,Layout 要求高

4.2 读 Cache 命令帧结构

Read from Cache 各模式帧结构对比 五种读 Cache 命令的命令段、列地址段、空周期段与数据段占用的时钟周期与总线宽度对比。 Read from Cache 各模式帧结构(含列地址与空周期) 0x03 Read Cache CMD 16 bit 列地址 无 DATA ×1 无空周期,速率最低 0x0B Fast Read CMD 16 bit 列地址 dummy DATA ×1 8 个空周期 0x3B Dual Out CMD 16 bit 列地址 dummy DATA ×2 8 空周期,数据 2 线 0x6B Quad Out CMD 16 bit 列地址 dummy DATA ×4 8 空周期,数据 4 线 0x6B Quad DTR CMD 16 bit 列地址 dummy DATA ×4(DDR) 时钟双边沿采样 命令 CMD 列地址(选页内偏移) 空周期 Dummy 数据 DATA
图 4-1 · Read from Cache 帧结构。列地址为 16 bit(0 ~ 2111,含 spare 区);空周期数各型号不同,以 datasheet 为准。

4.3 速率档位与等效吞吐

SPI NAND 接口理论吞吐与实际有效写吞吐对比 柱状图对比 Standard、Dual、Quad、Quad DTR 四种模式的接口理论吞吐,以及受页编程时间限制的实际持续写吞吐。 接口理论吞吐与实际有效写吞吐对比 Standard ×1 · 104 MHz 13.0 MB/s Dual ×2 · 104 MHz 26.0 MB/s Quad ×4 · 104 MHz 52.0 MB/s Quad DTR · 133 MHz 133 MB/s 理论 实际持续写吞吐 ≈2 MB/s(受页编程时间限制) 0 50 MB/s 100 MB/s
图 4-2 · 接口速率与实际吞吐。读吞吐取决于接口宽度,写吞吐被页编程时间(200 µs ~ 1.5 ms)锁死,提高时钟几乎没有帮助。

吞吐计算示例

读 2048 B 一页的总耗时(Quad ×4,104 MHz,忽略开销):

  阶段 1  Page Read to Cache        tRD              =  60 µs   (典型)
  阶段 2  0x6B 帧:
          命令 8 clk               8 / 104 MHz       =   0.08 µs
          列地址 16 clk                               =   0.15 µs
          空周期 8 clk                                =   0.08 µs
          数据 2048 B = 4096 clk(×4 线,每 clk 4 bit)=  39.4 µs
        小计                                          ≈  39.7 µs

  单页合计 ≈ 99.7 µs  →  2048 B / 99.7 µs ≈ 20.5 MB/s
  (连续读模式可省去重复 tRD,接近接口理论值 52 MB/s)

写一页的总耗时(页编程 tPROG = 1 ms):

  Program Load 0x32(Quad)         2048 B             ≈  39.4 µs
  Program Execute 0x10              tPROG              = 1000 µs
  轮询状态                                             ≈   5 µs
  合计 ≈ 1044 µs  →  2048 B / 1044 µs ≈ 1.96 MB/s

结论:把时钟从 104 MHz 提到 133 MHz,写吞吐只从 1.96 提到 1.99 MB/s。想提高写性能,只能靠 multi-plane / cache program,或换更高档器件。
      想提高写性能,只能靠 multi-plane / cache program,或换器件。

4.4 模式切换流程

SPI NAND 上电后默认处于 Standard SPI。切换到 Quad 需要两个条件同时满足:

  1. 软件置位 QE(Quad Enable):通过 SET FEATURE(0x1F)写入配置寄存器(通常地址 0xB0)的 QE 位。部分型号出厂已置位,但建议初始化时显式写一次,并回读确认。
  2. 硬件把 IO2 / IO3 接到主控:若 IO2 / IO3 被接到固定电平或用作 WP# / HOLD#,Quad 模式下数据会出错。
// 上电初始化参考流程(伪代码,寄存器地址以 datasheet 为准)
spi_nand_reset();                    // 0xFF,等待 tRST(读/编程复位 50 µs,擦除复位 550 µs)
delay_ms(10);

jedec_id = cmd_read_id(0x9F);        // 核对厂商 / 容量,型号不符直接报错
if (!id_match(jedec_id)) return ERR_DEVICE;

set_feature(0xB0, QE | ECC_EN);      // 使能 Quad 与 ECC
if ((get_feature(0xB0) & QE) != QE) return ERR_QE_FAIL;

set_feature(0xA0, BP_ALL_CLEAR);     // 解除块保护,否则编程会被拒绝
scan_bad_blocks();                   // 建立 BBT(见第 3 章)

// 轮询 busy 必须用 0x0F + 0xC0,不能用 NOR 的 0x05
uint8_t st = get_feature(0xC0);
while (st & OIP) { st = get_feature(0xC0); }
if (st & (P_FAIL | E_FAIL)) { mark_bad_block(); }
状态轮询:不能用 0x05

SPI NAND 没有 NOR 那种 0x05 读状态寄存器的机制。必须用 GET FEATURE(0x0F)+ 地址 0xC0 读取状态。常见位定义:

位名称含义
bit 0OIPOperation In Progress,1 = 器件忙
bit 1WELWrite Enable Latch,1 = 写使能已置位(10h / D8h 前必须置位)
bit 2E_FAIL擦除失败,1 = 本次 Block Erase 失败
bit 3P_FAIL编程失败,1 = 本次 Program Execute 失败
bit 4 ~ 7ECCS(ECC 状态)ECCS[1:0](bit4~5):00 = 无错误;01 = 已纠正;11 = 达 8 bit 上限已纠正;10 = 不可纠正。ECCS[3:2](bit6~7)给出已纠正的 bit 数

注意:WEL 位的位置、ECC 状态位的具体编码与所在地址各厂商不同(部分型号 ECC 状态在 0xC0 的 bit 4~5,部分另有专用地址)。以上为常见定义,必须以目标型号 datasheet 的 Status Register 表为准。

相关报告 · 交叉引用 1 器件全部展开收起 ▾
点开类目即可展开:具体文档 / 章节(点章直接跳转到该章)
SPI NAND
软件设计规范
Linux 驱动开发
样机问题排查
量产问题排查4
全志平台 SPI NAND NOR
章节(点章跳转,共 11 章)
海思平台 SPI NAND 量产常见失败
章节(点章跳转,共 11 章)
烧录成功但不开机 SPI NAND
章节(点章跳转,共 12 章)
瑞芯微平台 SPI NAND eMMC
章节(点章跳转,共 11 章)
系统设计指南3