NAND Flash 详细说明
1. NAND 到底是什么
NAND Flash 是一种非易失性存储介质,断电后数据仍能保存。
它的核心特点不是“像硬盘一样按块覆盖写”,而是:
- 以
page为基本读写单位 - 以
block为基本擦除单位 - 擦除前不能随意覆盖写
- 天生存在坏块
- 需要 ECC、坏块管理、磨损均衡
工程上如果说 NAND,通常默认指的是 Raw NAND,也就是裸 NAND 器件。
2. NAND 的基本组织结构
NAND 一般按下面几层组织:
CellPageBlockPlaneLUNDie
最重要的是前三层:
Page
Page 是最基本的读写单位,典型大小常见为:
2KB4KB8KB16KB
很多器件还会给每个 page 配一个 OOB/Spare 区,用来存:
- ECC 校验数据
- 坏块标记
- 文件系统/FTL 元数据
Block
Block 是最基本的擦除单位,一个 block 由多个 page 组成。
典型可能是:
64 pages/block128 pages/block256 pages/block
为什么这很重要
因为 NAND 的物理约束是:
- 读:按 page
- 写:按 page
- 擦:按 block
这就决定了上层软件不能简单地像磁盘那样“就地覆盖写”。
3. NAND 的工作原理
NAND 单元通过浮栅或电荷陷阱存储电荷状态。
读操作通过感知阈值电压来判断存储值;写操作本质上是编程;擦除则通常以 block 为单位清空电荷状态。
从软件视角最重要的结论只有三个:
- 写入会损耗介质
- 擦除比读写慢得多
- 读出的比特错误率会随寿命和工艺演进而上升
这就是为什么 NAND 必须和:
- ECC
- 坏块管理
- 磨损均衡
- 垃圾回收
这些机制一起使用。
4. NAND 的类型
按每个 cell 存的 bit 数,常见有:
SLC:1 bit/cellMLC:2 bit/cellTLC:3 bit/cellQLC:4 bit/cell
SLC
特点:
- 速度快
- 寿命高
- BER 低
- 成本高
适合:
- 工业
- 启动区
- 高频写日志
- 高可靠设备
MLC
特点:
- 成本和性能平衡
- 寿命低于 SLC
TLC
特点:
- 单位容量成本更低
- 写入和读扰更敏感
- ECC 和管理策略要求更高
QLC
特点:
- 容量成本优先
- 延迟和寿命压力更大
5. NAND 的接口与标准
Raw NAND 最常见的标准脉络有两类:
ONFIToggle DDR
5.1 ONFI
ONFI 全称是 Open NAND Flash Interface。
它的目标是把 NAND 的接口、参数页和部分行为标准化,降低主控适配成本。
ONFI 的几个关键价值:
- 标准化 parameter page
- 标准化器件识别
- 标准化接口能力描述
- 支持更高速的数据传输模式
5.2 Toggle DDR
Toggle DDR 更多见于部分大厂高速 NAND 体系。
核心思路是进一步提升数据传输效率和接口速度。
工程上要记住的是:
- ONFI/Toggle 解决的是“接口和传输”
- 它们不等于“你就不用做 ECC 和坏块管理”
6. NAND 的时序
NAND 的 timing 很重要,因为它和 eMMC/UFS 这种受管设备完全不是一套思路。
NAND 时序一般分成两类:
6.1 接口级时序
这部分关注主机如何在总线上把命令、地址、数据送给 NAND。
典型参数:
tCLS/tCLHtALS/tALHtDS/tDHtWP/tWHtRP/tREHtRC/tWC
这些大多是 ns 级。
6.2 阵列内部时序
这部分反映 NAND 内部真的在干什么。
典型参数:
tR:读出 page 所需时间tPROG:编程一个 page 所需时间tBERS:擦除一个 block 所需时间
典型量级通常是:
tR:几十到上百ustPROG:几百ustBERS:几ms
这意味着什么
这意味着:
- 接口信号很快
- 但阵列内部操作并不快
所以很多 NAND 系统的瓶颈不在“总线频率”,而在:
- program
- erase
- ECC
- block recycle
7. NAND 的访问流程
7.1 读流程
主机典型流程:
- 发读命令
- 发列地址/行地址
- 等待 ready/busy
- 读出 page 数据
- 读出 OOB
- 做 ECC 校验和纠错
7.2 写流程
主机典型流程:
- 发 program setup
- 发地址
- 写数据和 OOB
- 发 program confirm
- 等待 busy 完成
- 读状态
7.3 擦除流程
主机典型流程:
- 发 erase setup
- 发 block 地址
- 发 erase confirm
- 等待 busy
- 读状态
这意味着主机必须真的理解 NAND 协议。
8. NAND 为什么难用
Raw NAND 难用,不是因为接口线多,而是因为它把复杂性都留给了系统。
系统必须自己解决:
- ECC
- 坏块管理
- 磨损均衡
- FTL 或 UBI
- 断电保护
- 元数据一致性
- 块回收
如果这些处理不好,就会出现:
- 数据读不回
- 写入失败率上升
- 寿命衰减过快
- 量产后随机坏
9. ECC 为什么是 NAND 的核心
随着工艺演进和 TLC/QLC 普及,NAND 原始误码率越来越高。
所以 ECC 从“可选优化”变成“系统生死线”。
常见 ECC 方案:
HammingBCHLDPC
粗略理解:
- 老 SLC/低密度时代,ECC 压力较小
- 新工艺/高密度时代,ECC 强度必须明显提高
如果 SoC NAND controller 的 ECC 能力不够,后期寿命会很危险。
10. 坏块管理
NAND 出厂就可能带坏块,后续使用过程中也会继续长坏块。
所以系统必须做到:
- 识别出厂坏块
- 运行期发现新增坏块
- 避免关键数据落在坏块
- 建立坏块表或坏块策略
坏块管理是 Raw NAND 系统量产稳定性的关键之一。
11. 磨损均衡与垃圾回收
因为 NAND 擦写次数有限,所以不能让少数 block 被反复写爆。
这就需要:
Wear LevelingGarbage Collection
Wear Leveling
目标:
- 让擦写分布更均匀
Garbage Collection
目标:
- 回收失效页所在 block
- 迁移有效数据
- 释放新块
代价:
- 写放大
- 延迟抖动
12. 软件栈
在 Linux 里,Raw NAND 通常走:
MTDUBIUBIFS
或某些系统自己做:
- 专用 FTL
- 专用日志存储层
MTD
直接面向 flash 语义,不假装自己是块设备。
UBI
负责把坏块、磨损和卷管理抽象起来。
UBIFS
运行在 UBI 之上的文件系统。
这套栈比 eMMC 的块设备栈复杂得多,但也更符合 Raw NAND 的物理现实。
13. NAND 的优点
Raw NAND 的优点主要有:
cost per bit通常更低- 控制权高
- 可深度定制
- 可针对特定 workload 做优化
- 某些场景可实现更可预测的行为
特别适合:
- 成本极敏感产品
- 有成熟 NAND 团队的公司
- 工业日志型系统
- 专用设备
14. NAND 的缺点
Raw NAND 的缺点也非常明显:
- 开发难度高
- 驱动/BSP 依赖强
- 量产验证周期长
- 对 ECC 和坏块策略要求高
- 软件栈复杂
- 不适合小团队快速量产
换句话说:
Raw NAND 便宜的只是器件,不是整个系统。
15. 适合用 NAND 的场景
更适合选 Raw NAND 的情况通常是:
- 团队有成熟 MTD/UBI/FTL 经验
- SoC 自带强 NAND controller 和 ECC
- 需要最低存储 BOM
- 负载模型固定
- 愿意投入长期验证和维护
如果这些条件不满足,很多项目最后都会转向 eMMC。
16. 总结
可以把 Raw NAND 概括成一句话:
它不是一个现成块设备,而是一种需要系统自己接管管理的闪存介质。
它的价值在于:
- 成本低
- 控制权高
- 可定制性强
它的代价在于:
- 软件复杂
- 风险高
- 量产难
17. 参考资料
-
Micron, “Choosing the right NAND”
https://www.micron.com/products/storage/nand-flash/choosing-the-right-nand -
Micron, “ONFI advantages”
https://www.micron.com/products/storage/nand-flash/onfi-advantages -
ONFI Workgroup
https://onfi.org/ -
Alliance Memory Parallel NAND datasheet
https://www.alliancememory.com/wp-content/uploads/AllianceMemory_AS9Fxx_Series_1Gb_2Gb_4Gb_8Gb_x8bits_SLC_Parallel_NAND_Fl.pdf -
Kioxia Serial NAND datasheet brief
https://europe.kioxia.com/content/dam/kioxia/newidr/productinfo/datasheet/201910/DST_TC58CYG2S0HRAIJ-TDE_EN_36007.pdf
版权声明
内容来源及使用限制
欢迎访问 TomgZHE研习社(网址:https://blog.tomgzhe.com)。本网站部分文章内容源自网络,仅作学习交流与参考分享;若您发现有内容涉嫌侵权,请立即联系 tomgzhe@qq.com,我们将在接到通知后的 48 小时内核实并删除相关侵权内容。
软件资源相关规定
本网站为个人非盈利性质的站点,所有软件资源均来自网络。这些资源仅用于个人学习、研究和参考,严禁用于任何商业用途。您下载和使用本网站软件资源即表示您同意仅将其用于学习目的,若因违反此规定导致任何法律纠纷或损失,责任由您自行承担。
原创版权
本网站上的原创内容,包括但不限于文字作品、自行设计的图片、独家制作的音频视频等,其版权均归本网站所有。未经本网站书面授权,任何组织或个人不得擅自复制、转载、摘编、传播或以其他任何方式使用这些原创内容。如需使用,请提前与我们联系并获得书面许可,同时需在显著位置注明出处及作者信息。
转载与引用规范
若您需转载本网站文章,务必注明文章来源为 “[ https://blog.tomgzhe.com/index.php/2026/07/15/nand-flash/ ],原文链接:[ https://blog.tomgzhe.com/index.php/2026/07/15/nand-flash/ ]”;对于有明确作者署名的文章,还需完整保留作者姓名。在引用本网站内容时,请确保内容准确无误,并遵循学术及行业的引用规范。
微信扫一扫打赏
支付宝扫一扫打赏