SPI NAND Flash 电路设计指南
编制日期 2026-09-21 | 版本号 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 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 · 器件基础
选型先定接口与容量,再定封装与温度等级。SPI NAND 的核心价值是:用 8 个引脚换来 NOR 给不了的大容量与低成本。
1.1 器件定位与选型对比
| 对比项 | SPI NAND | SPI NOR | 并行 NAND | eMMC | SD NAND |
|---|---|---|---|---|---|
| 典型容量 | 128 MB ~ 4 GB | 512 KB ~ 256 MB | 1 ~ 8 GB | 4 ~ 128 GB | 128 MB ~ 8 GB |
| 接口 | SPI / QSPI(×1 / ×2 / ×4) | SPI / QSPI / QPI | 8-bit 并行 ONFI | eMMC 8-bit / HS400 | SPI 或 SDIO |
| 引脚数 | 8(BGA 16 / 24) | 8(BGA 24) | 48 / 63 | 153 / 169 | 8(LGA-8) |
| 随机读 | 不支持 需整页 Load | ns 级任意地址 | 不支持 整页读 | 支持(控制器) | 支持(控制器) |
| XIP | 不可 | 可以 | 不可 | 不可(需搬 RAM) | 不可 |
| 读吞吐 | 13 ~ 133 MB/s(接口) | 50 ~ 400 MB/s | 40 ~ 200 MB/s | 100 ~ 400 MB/s | 10 ~ 50 MB/s |
| 写速度(有效) | 0.5 ~ 3 MB/s | 0.1 ~ 1 MB/s | 5 ~ 40 MB/s | 10 ~ 150 MB/s | 2 ~ 15 MB/s |
| 编程单位 | 页 2048 B | 页 256 B(字节可编程) | 页 4 ~ 16 KB | 512 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.27 | W25N01GV / MT29F1G01 / MX35LF1G | 主流,底部散热焊盘,手工可焊 |
| WSON-8(8×6 mm) | 8.0 × 6.0 × 0.8 mm,pitch 1.27 | W25N02KV / W25N04KV / 部分 Kioxia | 大容量型号,引脚排布需核对 |
| SOP-8(208 mil) | 5.3 × 7.9 mm,pitch 1.27 | GD5F1GQ / MX35LF1G | 最好焊接与返修,体积大 |
| USON-8 / DFN-8 | 4.0 × 3.0 / 3.0 × 2.0 mm | 部分小容量型号 | 超小体积,焊接难度高 |
| BGA-16 / BGA-24 | 球距 0.8 / 1.0 mm | W25N01GV 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 的封装。
引脚功能说明
| 引脚 | 类型 | 说明 | 硬件设计要点 |
|---|---|---|---|
| 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 关键电气参数
| 参数 | 典型值 | 说明 |
|---|---|---|
| 供电电压 VCC | 3.3 V 型:2.70 ~ 3.60 V 1.8 V 型:1.70 ~ 1.95 V | 同一板上不可混接,需确认主控 IO 电平 |
| 接口时钟 | 最高 104 MHz(常见) 部分型号 133 MHz;DDR 型更高 | 见 4.3,实际吞吐受 NAND 编程时间限制 |
| 页大小 | 2048 B(+ spare 64 / 128 B) | 部分 1 Gb 以下型号为 1024 B |
| 块大小 | 64 页 = 128 KB(+ spare 4 / 8 KB) | 擦除最小单位 |
| 页读到 Cache tRD | 25 ~ 100 µs | 阵列 → Cache 寄存器 |
| 页编程 tPROG | 200 µs ~ 1.5 ms | 与 P/E 次数、温度相关 |
| 块擦除 tBERS | 2 ~ 10 ms | 典型 3 ~ 4 ms |
| 复位恢复 tRST | 最大 5 ~ 10 ms(部分更长) | Reset 0xFF 后必须等待 |
| 读电流 | 15 ~ 30 mA | 连续读 |
| 编程 / 擦除电流 | 20 ~ 40 mA | 电源需按 50 mA 设计余量 |
| 待机电流 | 10 ~ 50 µA | CS# 拉高,无操作 |
| 深睡眠电流 | 1 ~ 20 µA(视型号) | 需 datasheet 确认是否支持 0xB9 |
| ECC 能力 | 1 bit / 512 B(常见) 部分型号 4 ~ 8 bit / 512 B | 必须检查 ECC 状态位 |
| 擦写耐久性 | SLC 5 ~ 10 万次 | 需磨损均衡 |
| 数据保持 | 10 年(@ < 10% P/E 次数,常温) | 随擦写次数与温度下降 |
| ESD | HBM ±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 NOR | SPI 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 结构
层次概念
- Page(页):编程与读出的最小单位,2048 B 数据区 + 64 B(部分型号 128 B)spare 区。
- 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)。读操作必须分两步:
- Page Read to Cache(0x13):器件把目标页从 NAND 阵列整体搬进 Cache,耗时 tRD = 25 ~ 100 µs。期间 OIP = 1。
- Read from Cache(0x03 / 0x0B / 0x3B / 0x6B):从 Cache 中按列地址读出,可以任意长度、任意起始偏移、可分多次读。
XIP 要求 CPU 在任意时刻、任意地址都能在几十纳秒内取到指令。SPI NAND 的 Cache 只有 一页,切换地址(跨页)就要重新执行 0x13 并等待 25 ~ 100 µs —— 相当于每次跨页取指停顿上百微秒,完全不可接受。因此:
- 代码存储请用 SPI NOR;
- SPI NAND 只用于数据、日志、文件系统、OTA 镜像;
- 若必须从 NAND 启动,需 BootROM 把镜像整体搬到 RAM 再跳转。
部分型号支持 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 型号出厂即启用;部分型号需要软件通过 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,然后从备用块池取一块做替换映射。
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 SPI | IO0(出)/ IO1(入) | 单线 | 单沿(SDR) | 默认上电状态,兼容性最好 |
| Dual SPI | IO0 + IO1 | 单线 | 单沿 | 读吞吐 ×2,用 0x3B |
| Quad SPI | IO0 ~ IO3 | 单线(命令/地址) | 单沿 | 读吞吐 ×4,用 0x6B;需占用 IO2/IO3 |
| QPI(部分型号) | IO0 ~ IO3 | 四线 | 单沿 | 命令也走 4 线,进一步省周期,型号支持差异大 |
| DTR / DDR | IO0 ~ IO3 | 单线 | 双沿 | 相同时钟频率下再翻倍,时序裕量小,Layout 要求高 |
4.2 读 Cache 命令帧结构
4.3 速率档位与等效吞吐
吞吐计算示例
读 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,或换器件。
4.4 模式切换流程
SPI NAND 上电后默认处于 Standard SPI。切换到 Quad 需要两个条件同时满足:
- 软件置位 QE(Quad Enable):通过 SET FEATURE(0x1F)写入配置寄存器(通常地址 0xB0)的 QE 位。部分型号出厂已置位,但建议初始化时显式写一次,并回读确认。
- 硬件把 IO2 / IO3 接到主控:若 IO2 / IO3 被接到固定电平或用作 WP# / HOLD#,Quad 模式下数据会出错。
// 上电初始化参考流程(伪代码,寄存器地址以 datasheet 为准)
spi_nand_reset(); // 0xFF,等待 tRST(最大 5~10 ms)
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(); }
SPI NAND 没有 NOR 那种 0x05 读状态寄存器的机制。必须用 GET FEATURE(0x0F)+ 地址 0xC0 读取状态。常见位定义:
| 位 | 名称 | 含义 |
|---|---|---|
| bit 0 | OIP | Operation In Progress,1 = 器件忙 |
| bit 1 | P_FAIL | 编程失败,1 = 本次 Program Execute 失败 |
| bit 2 | E_FAIL | 擦除失败,1 = 本次 Block Erase 失败 |
| bit 4 ~ 5 | ECC 状态 | 00 = 无错误;01/10 = 已纠正;11 = 不可纠正 |
注意:WEL 位的位置、ECC 状态位的具体编码与所在地址各厂商不同(部分型号 ECC 状态在 0xC0 的 bit 4~5,部分另有专用地址)。以上为常见定义,必须以目标型号 datasheet 的 Status Register 表为准。