D~DIDI~DIDIDI!!!!

0%

EMMC-基础

概述

eMMC(embedded Multi-Media Card)是一种软硬件结合的存储解决方案,物理载体为 NAND Flash,外部封装了一层 eMMC 协议控制器,负责管理 NAND 的 ECC、均衡算法、指令管理、低功耗、坏块等方面的管理。

eMMC 使用 BGA 封装了 NAND Flash 和 Flash 控制器,向外提供标准 MMC 接口。

eMMC 模块内部框图

eMMC 芯片内部主要包含以下组件:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
┌─────────────────────────────────────────────┐
│ eMMC Package │
│ ┌─────────────────────────────────────────┐ │
│ │ eMMC Controller │ │
│ │ ┌──────┐ ┌──────┐ ┌────────────────┐ │ │
│ │ │ ECC │ │ FTL │ │ Wear Leveling │ │ │
│ │ │Engine│ │ │ │ Engine │ │ │
│ │ └──────┘ └──────┘ └────────────────┘ │ │
│ │ ┌──────┐ ┌──────┐ ┌────────────────┐ │ │
│ │ │ CMD │ │ Bad │ │ Power Mgmt │ │ │
│ │ │Parser│ │Block │ │ │ │ │
│ │ │ │ │ Mgmt │ │ │ │ │
│ │ └──────┘ └──────┘ └────────────────┘ │ │
│ └─────────────────────────────────────────┘ │
│ ┌─────────────────────────────────────────┐ │
│ │ NAND Flash Array │ │
│ │ ┌────────┐ ┌────────┐ ┌────────┐ │ │
│ │ │ Die 0 │ │ Die 1 │ │ Die N │ │ │
│ │ └────────┘ └────────┘ └────────┘ │ │
│ └─────────────────────────────────────────┘ │
│ ┌─────────────────────────────────────────┐ │
│ │ BGA Ball Interface │ │
│ │ VCC VCCQ CLK CMD DAT[7:0] │ │
│ └─────────────────────────────────────────┘ │
└─────────────────────────────────────────────┘

eMMC 与 Raw NAND 对比

特性 eMMC Raw NAND
控制器 内置 Flash 控制器 需要外部控制器
ECC 控制器内部处理 主机端或外部控制器处理
坏块管理 控制器自动管理 需要软件实现
磨损均衡 控制器自动处理 需要软件实现
FTL 内置 FTL 层 需要外部 FTL
接口 标准 MMC/SD 接口 芯片级接口(8/16-bit)
封装 BGA(易于焊接) TSOP/BGA(需要复杂布线)
开发难度 低(标准接口) 高(需要驱动开发)
成本 较高 较低
适用场景 嵌入式系统、手机 大容量存储、SSD

eMMC 总线接口

信号定义

信号 方向 说明
CLK Host → Device 时钟信号,驱动总线操作
CMD 双向 命令/响应信号,半双工
DAT[7:0] 双向 数据线,支持 1/4/8-bit 模式
Data Strobe Device → Host HS400模式下的数据选通信号
VCC 电源 NAND Flash 供电(2.7V-3.6V)
VCCQ 电源 控制器 I/O 供电(1.7V-1.95V 或 2.7V-3.6V)
VSS 接地引脚
RST_n Host → Device 硬件复位信号

总线模式

模式 数据宽度 时钟频率 最大速率 eMMC 版本
Legacy 1-bit 0-26 MHz 26 MB/s 4.3
High Speed 4/8-bit 0-52 MHz 52 MB/s 4.4
HS200 4/8-bit 200 MHz 200 MB/s 4.5
HS400 8-bit 200 MHz 400 MB/s 5.0
HS400ES 8-bit 200 MHz 400 MB/s 5.1

eMMC 内部分区

eMMC 设备内部包含多个逻辑分区:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
┌────────────────────────────────────────────┐
│ eMMC Device │
│ ┌──────────────────────────────────────┐ │
│ │ User Data Area (UDA) │ │
│ │ 主用户数据区域 │ │
│ │ (可通过 GPP 进一步划分) │ │
│ └──────────────────────────────────────┘ │
│ ┌──────────┐ ┌──────────┐ │
│ │ Boot │ │ Boot │ │
│ │ Area 1 │ │ Area 2 │ │
│ │(128KB- │ │(128KB- │ │
│ │ 128MB) │ │ 128MB) │ │
│ └──────────┘ └──────────┘ │
│ ┌──────────────────────────────────────┐ │
│ │ RPMB (Replay Protected │ │
│ │ Memory Block) │ │
│ │ 安全存储区域 │ │
│ └──────────────────────────────────────┘ │
│ ┌─────┐ ┌─────┐ ┌─────┐ ┌─────┐ │
│ │GPP1 │ │GPP2 │ │GPP3 │ │GPP4 │ │
│ │通用 │ │通用 │ │通用 │ │通用 │ │
│ │分区1│ │分区2│ │分区3│ │分区4│ │
│ └─────┘ └─────┘ └─────┘ └─────┘ │
└────────────────────────────────────────────┘
分区 说明
User Data Area (UDA) 主数据区域,存储用户数据
Boot Area 1/2 启动分区,存储 Bootloader
RPMB 重放保护存储块,用于安全存储(如密钥)
GPP 1-4 通用分区,可根据需求自定义

eMMC 命令集

命令分类

类别 命令号 名称 说明
基本命令 CMD0 GO_IDLE_STATE 复位至空闲状态
基本命令 CMD1 SEND_OP_COND 发送操作条件
基本命令 CMD2 ALL_SEND_CID 获取 CID 寄存器
基本命令 CMD3 SET_RELATIVE_ADDR 设置相对地址
基本命令 CMD7 SELECT/DESELECT_CARD 选中/取消选中设备
基本命令 CMD8 SEND_EXT_CSD 读取扩展 CSD 寄存器
基本命令 CMD13 SEND_STATUS 读取设备状态
读命令 CMD17 READ_SINGLE_BLOCK 读取单个块
读命令 CMD18 READ_MULTIPLE_BLOCK 读取多个块
写命令 CMD24 WRITE_BLOCK 写入单个块
写命令 CMD25 WRITE_MULTIPLE_BLOCK 写入多个块
擦除命令 CMD35 ERASE_GROUP_START 设置擦除组起始地址
擦除命令 CMD36 ERASE_GROUP_END 设置擦除组结束地址
擦除命令 CMD38 ERASE 执行擦除操作
安全命令 CMD44 SET_WRITE_PROT 设置写保护

关键寄存器

寄存器 大小 说明
CID 128-bit 设备标识信息(制造商、产品名、序列号等)
CSD 128-bit 设备特性信息(容量、速度等级等)
EXT_CSD 512-byte 扩展设备特性(详细配置参数)
OCR 32-bit 操作条件寄存器(电压范围等)
RCA 16-bit 相对地址寄存器

eMMC 操作特性

读写性能参考

操作 典型时间 说明
页读取 ~100 μs 从 NAND 读取到页缓存
页编程 ~250 μs - 3 ms 将页缓存写入 NAND
块擦除 ~1.5 ms - 5 ms 擦除一个 Block
缓存读取 ~25 ns 从页缓存读取到 I/O

生命周期管理

参数 EXT_CSD 字段 说明
设备寿命估算 A DEVICE_LIFE_TIME_EST_TYP_A UDA 区域寿命估算
设备寿命估算 B DEVICE_LIFE_TIME_EST_TYP_B Boot 和 RPMB 区域寿命估算
预 EOL 信息 PRE_EOL_INFO 设备预估到达使用寿命

嵌入式安全研究视角

常见攻击面

攻击类型 方法 风险
固件提取 通过 eMMC 读取器直接读取固件 固件被逆向分析
数据恢复 从 User Area 恢复已删除数据 敏感数据泄露
Boot 分区篡改 修改 Boot Area 注入恶意代码 设备被植入后门
RPMB 绕过 尝试绕过 RPMB 认证机制 安全存储被破坏

安全建议

  1. 启用写保护:对 Boot 分区启用永久或临时写保护
  2. 使用 RPMB:将关键安全数据存储在 RPMB 分区
  3. 安全擦除:使用 Secure Erase/Trim 命令确保数据不可恢复
  4. 固件加密:对存储在 eMMC 中的固件进行加密

相关知识

eMMC 是嵌入式系统中最常用的存储解决方案之一,理解其内部架构、分区结构和命令集,对于嵌入式设备安全研究和固件分析至关重要。本文与 NAND Flash 基础、JTAG/SWD/DAP 调试接口等文章共同构成硬件安全研究的知识体系。

⚠️ 安全提示

  • 对 eMMC 芯片的直接读写操作应在合法授权范围内进行
  • 固件提取和分析应遵守相关法律法规
  • 本文仅用于学术研究和安全评估目的