2、eMMC基础:物理结构、内部组成与核心术语
eMMC(Embedded Multi Media Card)是当前嵌入式设备中最主流的非易失性存储方案,广泛应用于手机、平板、车载系统、工业控制与物联网终端。要深入理解后续的分区管理与坏块处理策略,首先必须建立对eMMC硬件架构的清晰认知。本章将从物理结构出发,拆解其内部组成,厘清eMMC与裸NAND Flash的关系,并系统讲解Block、Page、Plane、Die等关键术语,为后续章节打下坚实的知识地基。
2.1 eMMC的物理结构与封装形态
eMMC本质上是一种将NAND Flash芯片和专用控制芯片封装在一起的嵌入式存储模组。从物理结构来看,它采用BGA(Ball Grid Array,球栅阵列)封装形式,常见的有BGA-153、BGA-169等规格,引脚间距从0.5mm到0.65mm不等。这种封装方式使得eMMC可以直接贴装在PCB板上,无需额外的卡座或连接器,非常适合空间受限的嵌入式产品。
从外部接口来看,eMMC遵循JEDEC(Joint Electron Device Engineering Council)制定的eMMC标准,当前主流版本为5.1。其接口信号主要包括:
- CLK:时钟信号,最高支持200MHz(HS400模式),决定数据传输速率。
- CMD:双向命令线,用于主机发送命令和接收设备响应。
- DAT0-DAT7:8位双向数据总线,支持1/4/8位模式切换。
- RST_n:硬件复位信号,低电平有效,用于强制复位eMMC控制器。
- VCC(3.3V)与VCCQ(1.8V/3.3V):分别为NAND Flash核心供电和控制器/接口供电。
值得注意的是,VCCQ的电压选择直接影响I/O电平标准,在高速模式下(如HS200/HS400)必须使用1.8V。硬件设计时,VCC和VCCQ的电源时序、去耦电容布局都会影响eMMC的稳定性,这也是后续排障时的重要检查点。
2.2 eMMC内部组成:控制器与NAND Flash的协同
eMMC内部由两大核心部件构成:eMMC控制器和NAND Flash存储阵列。控制器是eMMC的“大脑”,负责处理主机发来的所有命令,并将其转换为对NAND Flash的实际操作。控制器内部集成了多个关键模块:
| 控制器模块 | 功能说明 | 对上层的影响 |
|---|---|---|
| Flash转换层(FTL) | 实现LBA(逻辑块地址)到PBA(物理块地址)的映射 | 主机无需关心NAND物理布局,但映射表损坏会导致数据丢失 |
| ECC引擎 | 对读写数据执行纠错码校验,通常支持BCH或LDPC算法 | ECC能力决定eMMC对坏块的容忍度,LDPC比BCH纠错能力更强 |
| 坏块管理单元 | 标记出厂坏块和运行期新增坏块,建立坏块表 | 坏块表存储在NAND的保留区域,控制器自动跳过坏块 |
| 磨损均衡模块 | 动态和静态磨损均衡算法,延长NAND寿命 | 影响写入放大系数(WAF),间接影响性能一致性 |
| Cache管理 | 利用SLC Cache或DRAM Cache加速写入 | Cache满时性能骤降,需关注持续写入场景 |
NAND Flash存储阵列则是实际的数据载体,由多个Die组成。每个Die是独立的硅片,拥有独立的片选信号(CE#)和命令/地址/数据总线。控制器通过多通道(Channel)连接这些Die,实现并行读写操作。例如,一颗64GB的eMMC可能包含4个16GB的Die,控制器可以同时向4个Die发出读写命令,从而提升带宽。
2.3 eMMC与NAND Flash的关系:封装与裸片
eMMC与NAND Flash的关系可以概括为“封装与被封装”。裸NAND Flash(Raw NAND)只有存储阵列和简单的I/O接口,没有控制器,因此需要主机端(SoC)集成NAND控制器来管理。而eMMC则将控制器和NAND Flash封装在一起,对外提供标准化的MMC接口协议。
这种封装带来的核心优势包括:
- 标准化接口:主机只需遵循eMMC协议即可访问存储,无需关心NAND的具体型号和时序。
- 坏块透明化:eMMC控制器自动管理坏块,主机完全无感知;而裸NAND需要主机软件维护坏块表。
- ECC内置:控制器完成ECC校验,主机无需额外计算。
- 磨损均衡:控制器自动执行磨损均衡算法,延长存储寿命。
然而,eMMC也存在劣势:控制器固件(FW)的算法质量直接影响性能和寿命;且eMMC的写放大通常高于裸NAND配合优秀FTL的方案。在工业级应用中,如果对存储寿命有极致要求,有时会选择裸NAND配合自研FTL,但这需要深厚的NAND管理经验,一般消费级产品不建议采用。
2.4 核心术语详解:Block、Page、Plane、Die
这四个术语构成了NAND Flash的物理层级结构,理解它们对于后续坏块处理至关重要。下面从底层到顶层逐一展开。
2.4.1 Die(裸片)
Die是NAND Flash的最小独立单元,拥有完整的存储阵列和外围电路。一颗eMMC内部可能包含1~8个Die。每个Die有独立的CE#引脚,控制器可以独立对每个Die发送命令。多Die设计的主要目的是提升并行度——控制器可以同时操作多个Die,从而增加带宽。例如,在eMMC 5.1规范中,支持8位数据总线,配合多Die交错操作,理论带宽可达400MB/s(HS400模式)。
2.4.2 Plane(平面)
Plane是Die内部的分区,每个Die通常包含1~4个Plane。Plane共享命令/地址总线,但拥有独立的页缓冲寄存器(Page Buffer)。多Plane设计的价值在于支持多平面操作——控制器可以同时向多个Plane发出相同的操作命令(如读、写、擦除),从而减少命令开销。例如,一个Die包含2个Plane,控制器可以同时从两个Plane各读一页数据,等效于将页读取速度提升一倍。
2.4.3 Block(块)
Block是NAND Flash的擦除最小单位。每个Block包含多个Page(通常为64~256个Page)。Block的大小因制程和工艺而异,常见的有1MB、2MB、4MB甚至8MB。Block是坏块管理的基本单元——NAND Flash出厂时可能存在坏块,使用过程中也会产生新坏块,坏块的最小单位就是Block。擦除操作只能以Block为单位进行,这意味着即使只修改一个Page的数据,也需要先将整个Block的数据读入缓存,修改后再整体写回,这就是“读-改-写”操作,也是写放大的来源之一。
2.4.4 Page(页)
Page是NAND Flash的读写最小单位。每个Page包含主数据区和备用区(OOB,Out-of-Band)。主数据区大小通常为4KB、8KB或16KB,OOB区大小为主数据区的1/32左右(如128B/4KB)。OOB区用于存储ECC校验码、坏块标记、逻辑地址映射信息等元数据。Page的编程(写入)操作只能从空状态(全0xFF)开始,且不能覆盖写入——必须先擦除整个Block才能重新写入。
| 层级 | 操作单位 | 典型大小 | 关键特性 | 对上层的影响 |
|---|---|---|---|---|
| Die | 独立片选 | 8GB~64GB | 可并行操作 | 决定最大带宽 |
| Plane | 多平面操作 | 2~4个/Die | 共享总线,独立缓冲 | 影响随机读写性能 |
| Block | 擦除 | 1MB~8MB | 坏块最小单位 | 决定GC效率和写放大 |
| Page | 读写 | 4KB~16KB | 需先擦后写 | 影响文件系统对齐策略 |
2.5 场景化理解:从主机写入到物理存储的完整路径
为了将上述概念串联起来,我们模拟一个实际写入场景。假设主机需要向eMMC的LBA 0x1000写入4KB数据:
- 主机发起写命令:主机通过CMD线发送写命令,携带LBA地址和传输长度(通常为1个Sector,即512B,或连续多个Sector)。
- 控制器接收并解析:eMMC控制器收到命令后,查询FTL映射表,找到该LBA对应的物理地址(Die、Plane、Block、Page)。如果该Page已有数据,则触发“读-改-写”流程。
- 分配新Page:控制器从空闲块列表中分配一个新的Page(通常选择当前活跃Block的下一个空闲Page),将数据写入该Page的主数据区。
- 写入OOB区:控制器计算ECC校验码,写入OOB区,同时更新映射表,将LBA映射到新的物理Page。
- 标记旧Page无效:旧Page中的数据被标记为无效(Invalid),等待后续垃圾回收(GC)时被擦除。
- 返回写完成:控制器向主机返回写完成响应。
这个流程揭示了几个关键点:写入放大(实际写入NAND的数据量/主机请求的数据量)通常大于1,因为需要额外的元数据写入和GC搬移;随机小写入(如4KB随机写)会显著增加写放大,因为每次小写入都可能触发读-改-写;GC时机由控制器自主决定,当空闲块数量低于阈值时,控制器会启动GC,将有效数据搬移到新Block,然后擦除旧Block。
2.6 常见误区与总结复盘
在eMMC基础概念的理解上,工程师常犯以下错误:
- 误区一:将eMMC等同于NAND Flash。eMMC是封装了控制器的完整存储方案,而NAND Flash只是存储介质。两者在接口、管理方式上完全不同。
- 误区二:认为Block大小固定不变。不同制程、不同厂商的NAND Flash,其Block和Page大小差异很大。例如,SLC NAND的Block通常为128KB~256KB,而TLC NAND的Block可达4MB~8MB。设计分区时必须参考具体eMMC型号的数据手册。
- 误区三:忽略OOB区的作用。OOB区不仅存放ECC,还存放坏块标记。在eMMC中,OOB区由控制器管理,主机无法直接访问,但理解其存在有助于理解为什么eMMC的可用容量总是小于标称容量。
- 误区四:认为坏块只发生在出厂时。实际上,NAND Flash在生命周期内会持续产生新坏块,尤其是TLC和QLC制程。eMMC控制器会动态管理这些坏块,但坏块增长速率与写入量、温度、电压稳定性密切相关。