2、eMMC基础:物理结构、内部组成与核心术语

eMMC(Embedded Multi Media Card)是当前嵌入式设备中最主流的非易失性存储方案,广泛应用于手机、平板、车载系统、工业控制与物联网终端。要深入理解后续的分区管理与坏块处理策略,首先必须建立对eMMC硬件架构的清晰认知。本章将从物理结构出发,拆解其内部组成,厘清eMMC与裸NAND Flash的关系,并系统讲解Block、Page、Plane、Die等关键术语,为后续章节打下坚实的知识地基。

eMMC 内部架构与 NAND 层级关系图 eMMC 封装(BGA-153/169) 主机接口 CLK / CMD / DAT0-7 VCC (3.3V) / VCCQ (1.8V) RST_n / DS / RTC_CLK eMMC 控制器 Flash 转换层 (FTL) 坏块管理 / ECC / 磨损均衡 Cache / 命令解析 总线 NAND Flash 存储阵列 Die 0 / Die 1 / Die 2 / Die 3 Plane 0 / Plane 1 Block → Page → Sector 通道 Die(裸片) 独立片选 CE# 独立命令/地址/数据 可并行操作 Plane(平面) Die 内部分区 共享命令/地址总线 支持多平面操作 Block(块) 擦除最小单位 典型 1MB ~ 8MB 坏块管理基本单元 Page(页) 读写最小单位 典型 4KB ~ 16KB 含 OOB 区域 Sector(扇区) 主机访问最小单位 固定 512B LBA 寻址基础 关键关系 1 Block = N Pages 1 Page = N Sectors + OOB 1 Plane = M Blocks

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的稳定性,这也是后续排障时的重要检查点。

经验提醒:在PCB布局时,eMMC的VCC和VCCQ引脚附近应放置至少4个100nF的MLCC去耦电容,并尽量靠近引脚放置。同时,CLK信号线应包地处理,避免与其他高频信号耦合。这些硬件细节虽然不直接影响软件分区策略,但会间接影响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发出读写命令,从而提升带宽。

核心原理:eMMC控制器对主机屏蔽了NAND Flash的所有物理细节。主机发送的读写命令基于LBA地址,控制器负责将LBA转换为具体的Die、Plane、Block和Page地址。这意味着,上层软件(包括分区表和文件系统)完全不需要感知NAND的物理特性,但理解这些底层机制有助于我们预判eMMC的性能表现和寿命特征。

2.3 eMMC与NAND Flash的关系:封装与裸片

eMMC与NAND Flash的关系可以概括为“封装与被封装”。裸NAND Flash(Raw NAND)只有存储阵列和简单的I/O接口,没有控制器,因此需要主机端(SoC)集成NAND控制器来管理。而eMMC则将控制器和NAND Flash封装在一起,对外提供标准化的MMC接口协议。

这种封装带来的核心优势包括:

  1. 标准化接口:主机只需遵循eMMC协议即可访问存储,无需关心NAND的具体型号和时序。
  2. 坏块透明化:eMMC控制器自动管理坏块,主机完全无感知;而裸NAND需要主机软件维护坏块表。
  3. ECC内置:控制器完成ECC校验,主机无需额外计算。
  4. 磨损均衡:控制器自动执行磨损均衡算法,延长存储寿命。

然而,eMMC也存在劣势:控制器固件(FW)的算法质量直接影响性能和寿命;且eMMC的写放大通常高于裸NAND配合优秀FTL的方案。在工业级应用中,如果对存储寿命有极致要求,有时会选择裸NAND配合自研FTL,但这需要深厚的NAND管理经验,一般消费级产品不建议采用。

风险提示:eMMC控制器固件是黑盒,我们无法直接干预其FTL算法。因此,在分区规划时,必须预留足够的OP(Over-Provisioning,预留空间)区域。一般建议至少保留7%~15%的容量不进行分区,让控制器有足够的空闲块进行垃圾回收和磨损均衡。如果分区表将eMMC容量全部占满,会导致控制器在写入压力下性能急剧下降,并加速坏块产生。

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数据:

  1. 主机发起写命令:主机通过CMD线发送写命令,携带LBA地址和传输长度(通常为1个Sector,即512B,或连续多个Sector)。
  2. 控制器接收并解析:eMMC控制器收到命令后,查询FTL映射表,找到该LBA对应的物理地址(Die、Plane、Block、Page)。如果该Page已有数据,则触发“读-改-写”流程。
  3. 分配新Page:控制器从空闲块列表中分配一个新的Page(通常选择当前活跃Block的下一个空闲Page),将数据写入该Page的主数据区。
  4. 写入OOB区:控制器计算ECC校验码,写入OOB区,同时更新映射表,将LBA映射到新的物理Page。
  5. 标记旧Page无效:旧Page中的数据被标记为无效(Invalid),等待后续垃圾回收(GC)时被擦除。
  6. 返回写完成:控制器向主机返回写完成响应。

这个流程揭示了几个关键点:写入放大(实际写入NAND的数据量/主机请求的数据量)通常大于1,因为需要额外的元数据写入和GC搬移;随机小写入(如4KB随机写)会显著增加写放大,因为每次小写入都可能触发读-改-写;GC时机由控制器自主决定,当空闲块数量低于阈值时,控制器会启动GC,将有效数据搬移到新Block,然后擦除旧Block。

实战启示:在嵌入式Linux系统中,文件系统(如ext4、F2FS)的块大小应尽量与eMMC的Page大小对齐。例如,如果eMMC的Page大小为4KB,则文件系统的块大小也应设置为4KB,避免一个文件系统块跨越两个物理Page,导致额外的读-改-写操作。对于F2FS,其segment大小通常为2MB,与Block大小对齐,能有效减少GC开销。

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控制器会动态管理这些坏块,但坏块增长速率与写入量、温度、电压稳定性密切相关。