2026-08-17
硬件-基本技术
0

目录

先介绍X8(8位总线)的理解
1. MEMORY CELL ARRAY:(2K+64)B × 64 pages × 4096 blocks
2. PAGE SIZE:(2048 + 64 spare) bytes
3. BLOCK SIZE:(128K + 4K spare) bytes
三者对应关系一句话
对应使用场景
X16(16位总线)的理解
1. 参数对照与换算关系
其它概念补充
1. OOB(Out-Of-Band,带外数据区)
OOB 里通常放什么?
2. Die(晶片 / 颗粒)
Die 的关键特性
3. 64 Spare(64 Bytes Spare Area)
为什么叫 “64 Spare” 而不是 “64 OOB”?
64 Spare 的典型布局(Hynix SLC)
4. 三者的关系(用一句话串起来)

H27U4G8F2D的数据手册里,标注以下参数,该如何理解? MEMORY CELL ARRAY

  • X8: (2K + 64) bytes x 64 pages x 4096 blocks。
  • X16: (1k+32) words x 64 pages x 2048 blocks PAGE SIZE
  • X8: (2048 + 64 spare) bytes,
  • X16:(1024 + 32spare) Words Block SIZE
  • X8: (128K + 4K spare) bytes。
  • X16:(64K + 2K spare) Words

先介绍X8(8位总线)的理解

1. MEMORY CELL ARRAY:(2K+64)B × 64 pages × 4096 blocks

这是整颗芯片的总容量分解公式,告诉你物理阵列怎么拼出来。

  • 2K+64 = 2112 Byte:一页(Page)的物理长度,2048B 主数据 + 64B Spare(也叫 OOB)

  • × 64 pages:一个块(Block)里有 64 页

  • × 4096 blocks:整片有 4096 个可擦除块

  • 乘起来:2112 × 64 × 4096 = 553,648,128 Byte ≈ 528 MByte,对应 4Gbit(512M×8)标称值(多余部分是 Spare 区,不算“用户可用容量”但物理存在)

顺带一提:4096 blocks 实际是 2 个 Plane × 2048 blocks,所以支持 Multi-plane 同时擦/写两个块。

2. PAGE SIZE:(2048 + 64 spare) bytes

这是读写最小单位的定义。

  • NAND 不能任意地址改 1 字节,必须整页读、整页写(编程)

  • 2048B 是你能放的“业务数据”

  • 64B Spare/OOB 不是给你存业务数据的,专门留给:

    • ECC 校验码(每 256/512B 数据算一组,SLC 常用 1-bit 汉明或 BCH)

    • 坏块标记(一般是块内第 0 页 OOB 第 6 字节 ≠ 0xFF)

    • 文件系统元数据(YAFFS 直接塞对象头,JFFS2 只放 ECC+坏块标)

  • 所以驱动里常说的“page size = 2048”是指 Main Area,“page size = 2112”是指含 OOB 的物理页,两者都对,看语境

3. BLOCK SIZE:(128K + 4K spare) bytes

这是擦除最小单位的定义。64 × 2112 = 135,168 B = 131,072 + 4096 = 128K + 4K

  • NAND 只能整块擦除,不能按页擦

  • 128K 是 64 页 × 2048B 主数据;4K 是 64 页 × 64B Spare

  • 寿命按块算:H27U4G8F2D 典型 10 万次 P/E 循环(配 1bit/528B ECC)

  • FTL / 裸机坏块管理都以 Block 为搬运、替换、磨损均衡的粒度

三者对应关系一句话

Page = 读写字单位(2112B 物理 / 2048B 可用)| Block = 擦除单位(64 页)| Array = 4096 Block 拼出整片

对应使用场景

  • 裸机 MCU 跑 SPI/异步 NAND 驱动:必须按页写、按块擦,Spare 区自己填 ECC(软件汉明或 MCU 硬件 ECC)+ 建 BBT(坏块表),适合工控小数据日志、固件备份

  • Linux/RTOS 挂 MTD + UBIFS/YAFFS2:Page/Block 参数直接填进 mtd_info,文件系统接管 Spare 布局,ECC 交给 SoC NAND 控制器;启动阶段扫全部 4096 块建坏块表

  • BootROM 从 NAND 启动:SOC 的 BootROM 按 2048+64 页格式读前几块到内部 RAM,所以 SPL/U-Boot 镜像必须按这个页结构打包,不能当纯线性 512MB 盘写

  • 固件 OTA / 掉电保护:利用 Multi-plane(2×2048 block)做双块备份擦写,减少擦除阻塞;写前必须确认目标块已擦除且不在 BBT 里。

X16(16位总线)的理解

同一颗 NAND 在 X8(8位总线)和 X16(16位总线)两种硬件接口模式下的物理映射表。核心规律是:内部物理阵列完全没变,只是“账本单位”从 Byte 换成了 Word(1 Word = 2 Byte)

为了让你一眼看透本质,我把它整理成了对照表,并附上底层原理和实操影响:

1. 参数对照与换算关系

层级X8 模式 (8-bit)X16 模式 (16-bit)换算逻辑
Page 结构(2048 + 64) Bytes(1024 + 32) Words2048B / 2 = 1024 Words
Block 结构(128K + 4K) Bytes(64K + 2K) Words128KB / 2 = 64K Words
总 Block 数4096 Blocks2048 Blocks4096 / 2 = 2048 Blocks
总容量4Gbit (512M×8)4Gbit (256M×16)物理 Die 容量不变

其它概念补充

1. OOB(Out-Of-Band,带外数据区)

一句话定义:OOB 是 NAND 中不用来存业务数据,但专门留给系统管 Flash 本身的那一小块空间

在 H27U4G8F2D 的 X8 模式下:

  • 一页 = 2048 Byte(Main 区,存你的代码/文件)
  • OOB = 64 Byte(Spare 区)

OOB 里通常放什么?

内容典型大小作用
ECC 校验码7~24 Byte纠正 bitflip(SLC 一般 1~4 bit)
坏块标记1 Byte标记该 block 是否出厂坏块
文件系统元数据剩余字节UBIFS/YAFFS/JFFS2 存擦除次数、序列号等

2. Die(晶片 / 颗粒)

一句话定义:Die 是 NAND Flash 内部一个独立的最小物理芯片单元,有自己独立的存储阵列和控制逻辑。

在 H27U4G8F2D 中:

  • 它是一颗 Single-Die​ 的 NAND
  • 内部只有一个 Die,通过片选(CE#)选中

Die 的关键特性

特性说明
独立操作一个 Die 同一时间只能执行一条命令(读/写/擦)
Multi-Die高端 NAND 会在一个封装里放 2~4 个 Die,可并发操作
PlaneDie 内部再分 Plane(H27U4G8F2D 有 2 Planes),支持 Multi-Plane 操作

工程经验:Die 是功耗、并发度和坏块分布的基本单位。Multi-Die 对嵌入式系统意义不大,但在 SSD 里是性能关键。

3. 64 Spare(64 Bytes Spare Area)

一句话定义:就是 X8 模式下,每一页对应的 OOB 大小

在 H27U4G8F2D 里:

  • PAGE SIZE: (2048 + 64 spare) bytes
  • 64 spare = 64 Bytes OOB

为什么叫 “64 Spare” 而不是 “64 OOB”?

  • Spare​ 是 JEDEC / 原厂 Datasheet 的传统叫法

  • OOB​ 是 Linux MTD / 文件系统层的叫法

  • 两者指的是同一块物理区域

64 Spare 的典型布局(Hynix SLC)

偏移内容
0–1坏块标记(0x00 = 坏块)
2–6保留
7–xxECC 校验码(BCH / Hamming)
剩余文件系统私有数据

4. 三者的关系(用一句话串起来)

Die 是物理载体 → 内部划分为 Block → Block 内划分为 Page → 每 Page 附带 64 Bytes Spare(OOB)用于管理 Flash 可靠性

对应到 H27U4G8F2D:

1 Die └── 4096 Blocks └── 64 Pages/Block ├── 2048 Bytes Main(用户数据) └── 64 Bytes Spare(OOB:ECC + 坏块 + FS元数据)

本文作者:ZeroEngineer

本文链接:

版权声明:文章部分内容来源网络分享知识和经过人工智能加工处理过。如有侵权,请联系 1213190608@qq.com 进行删除