H27U4G8F2D的数据手册里,标注以下参数,该如何理解? 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 同时擦/写两个块。
(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 的物理页,两者都对,看语境
(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 里。
同一颗 NAND 在 X8(8位总线)和 X16(16位总线)两种硬件接口模式下的物理映射表。核心规律是:内部物理阵列完全没变,只是“账本单位”从 Byte 换成了 Word(1 Word = 2 Byte)。
为了让你一眼看透本质,我把它整理成了对照表,并附上底层原理和实操影响:
| 层级 | X8 模式 (8-bit) | X16 模式 (16-bit) | 换算逻辑 |
|---|---|---|---|
| Page 结构 | (2048 + 64) Bytes | (1024 + 32) Words | 2048B / 2 = 1024 Words |
| Block 结构 | (128K + 4K) Bytes | (64K + 2K) Words | 128KB / 2 = 64K Words |
| 总 Block 数 | 4096 Blocks | 2048 Blocks | 4096 / 2 = 2048 Blocks |
| 总容量 | 4Gbit (512M×8) | 4Gbit (256M×16) | 物理 Die 容量不变 |
一句话定义:OOB 是 NAND 中不用来存业务数据,但专门留给系统管 Flash 本身的那一小块空间。
在 H27U4G8F2D 的 X8 模式下:
| 内容 | 典型大小 | 作用 |
|---|---|---|
| ECC 校验码 | 7~24 Byte | 纠正 bitflip(SLC 一般 1~4 bit) |
| 坏块标记 | 1 Byte | 标记该 block 是否出厂坏块 |
| 文件系统元数据 | 剩余字节 | UBIFS/YAFFS/JFFS2 存擦除次数、序列号等 |
一句话定义:Die 是 NAND Flash 内部一个独立的最小物理芯片单元,有自己独立的存储阵列和控制逻辑。
在 H27U4G8F2D 中:
| 特性 | 说明 |
|---|---|
| 独立操作 | 一个 Die 同一时间只能执行一条命令(读/写/擦) |
| Multi-Die | 高端 NAND 会在一个封装里放 2~4 个 Die,可并发操作 |
| Plane | Die 内部再分 Plane(H27U4G8F2D 有 2 Planes),支持 Multi-Plane 操作 |
工程经验:Die 是功耗、并发度和坏块分布的基本单位。Multi-Die 对嵌入式系统意义不大,但在 SSD 里是性能关键。
一句话定义:就是 X8 模式下,每一页对应的 OOB 大小。
在 H27U4G8F2D 里:
PAGE SIZE: (2048 + 64 spare) bytesSpare 是 JEDEC / 原厂 Datasheet 的传统叫法
OOB 是 Linux MTD / 文件系统层的叫法
两者指的是同一块物理区域
| 偏移 | 内容 |
|---|---|
| 0–1 | 坏块标记(0x00 = 坏块) |
| 2–6 | 保留 |
| 7–xx | ECC 校验码(BCH / Hamming) |
| 剩余 | 文件系统私有数据 |
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 进行删除