只读分享解决方案文档原理方案设计📅 2026-09-23🔖 Rev 1.0⏳ 30天有效(至 2026-10-23)
🔧解决方案&应用市场分析 -> 原理方案设计 -> eMMC_电路设计指南

eMMC_电路设计指南

生成时间 2026-09-17 14:34:00 有效期至 2026-10-23 14:46:41(30天有效(至 2026-10-23))

eMMC 电路设计指南

BGA 封装与扇出 · VCC/VCCQ 双电源 · 1/4/8-bit 总线 · HS200/HS400 提速与 Tuning · 分区与启动 · 休眠与掉电通知 | 编制日期 2026-09-23 | 版本号 Rev 1.0

本指南面向嵌入式硬件工程师与驱动工程师,覆盖 eMMC(embedded MultiMediaCard,JDEC JESD84 / eMMC 5.1) 从器件选型、原理图设计、电源与时序、PCB Layout、ESD 与可靠性、焊接生产到故障排查的完整链路,并给出可直接落地的参数与检查清单。

适用范围

主控侧带 eMMC Host 控制器(MMC 模式)的 SoC / MPU / FPGA / 车规与工控平台;器件侧为 BGA 封装 eMMC(BGA-153 / BGA-169 / BGA-100 / BGA-221 等),容量 4 GB ~ 256 GB,速率档位从 Legacy 到 HS400 / HS400ES。

不适用的场景

若主控没有 eMMC 控制器、PCB 只能做 2~4 层、或容量需求在 8 GB 以下且成本敏感,建议改用 SPI NOR / SPI NAND / SD NAND 方案,见下列同系列文档。

同系列文档

文档器件类型关注重点
SPI NOR 电路设计指南串行 NOR FlashQuad/QPI 提速、dummy cycles、XIP、DPD 低功耗
SPI NAND 电路设计指南串行 NAND Flash页/块管理、片内 ECC、坏块表、主机 FTL
并行NAND (PPI NAND) 电路设计指南8/16 位并行 NAND宽总线时序、ECC 引擎、40+ 引脚 Layout
eMMC 电路设计指南 本文eMMC 5.0/5.1HS200/HS400、1.8 V VCCQ、DS 选通与等长
SD NAND 电路设计指南贴片式 SD NANDSPI/SDIO 双模式、无休眠指令、VCC 负载开关断电
NAND MCP 电路设计指南多芯片合封存储多 die 与多 CE、双电源轨、HDI 扇出
并行NOR (PPI NOR) 电路设计指南并行 NOR Flash异步读时序、XIP、等待周期、总线扩展
PSRAM 电路设计指南伪静态 RAMOPI/HyperBus、刷新与延迟周期、XIP 与帧缓存
DDR2 电路设计指南DDR2 SDRAMSSTL_18、T 分支拓扑、VTT 端接、ODT
DDR3 电路设计指南DDR3 / DDR3LFly-by 拓扑、write leveling、动态 ODT
DDR4 电路设计指南DDR4 SDRAMPOD12、bank group、DBI、2D 训练
DDR5 电路设计指南DDR5 SDRAM双子通道、On-DIMM PMIC、DFE、同帧 ECC
EEPROM 电路设计指南EEPROMI²C/SPI 接口、上拉电阻与总线电容、页写与写保护

阅读建议

  • 硬件原理图阶段:重点看 §1§4§5
  • PCB Layout 阶段:重点看 §7(BGA 0.5 mm pitch 扇出与等长是本项目成败关键)。
  • 驱动 / Bring-up 阶段:重点看 §2§3§6
  • 量产与维护阶段:重点看 §8§9§10

1 · eMMC 器件基础

eMMC 不是一颗裸 NAND,而是「NAND 阵列 + 控制器 + FTL + 寄存器接口」的完整子系统。它对外只暴露一组 MMC 总线,主机无需关心坏块、ECC、磨损均衡,代价是必须使用专用 eMMC 控制器并接受 BGA 封装。

1.1 定位与选型对比

下面把 eMMC 与同系列其他四类存储放在同一张表里横向对比。选型时的第一性问题通常是:主控有没有 eMMC 控制器PCB 能不能承受 BGA + 6 层以上

对比项eMMCSD NANDSPI NAND并行 NANDSPI NOR
典型容量 4 GB ~ 256 GB(主流 8/16/32/64 GB) 128 MB ~ 8 GB 128 MB ~ 4 GB 1 Gb ~ 64 Gb(128 MB ~ 8 GB) 512 KB ~ 256 MB
对外接口 MMC 协议,CLK/CMD/DAT0~7/DS SDIO(1/4-bit)或 SPI SPI(1/2/4 线) 8/16-bit 异步 ONFI / Toggle DDR SPI(1/2/4 线,部分 8 线)
总线宽度 1 / 4 / 8-bit(HS400 另需 DS) 1 / 4-bit(SDIO)、1-bit(SPI) 1 / 2 / 4-bit 8 / 16-bit 1 / 2 / 4-bit
最大理论速率 HS400:200 MHz DDR × 8 bit = 400 MB/s SDR104 约 104 MB/s(常见设计 25~50 MB/s) 约 50 MB/s(104 MHz QPI) 约 40 MB/s(Toggle DDR) 约 66 MB/s(133 MHz QPI)
封装 / 焊接 BGA-153 / 169 / 100 / 221,0.5 mm pitch;难度高 LGA-8 / WSON-8,6×8 mm 级;友好 SOP-8 / WSON-8 / BGA-24;友好 TSOP-48 / BGA-63 / BGA-100;一般 SOP-8 / WSON-8;友好
主控要求 必须有 eMMC Host 控制器 SDIO 或 SPI 外设即可 通用 SPI 需要 NAND 控制器(含 ECC / FTL) 通用 SPI
内置 FTL / ECC 有(坏块管理 + 磨损均衡 + ECC + 缓存) 内置 ECC,FTL 多由主控实现 无,全部由主控实现 无(无需)
休眠 / 掉电通知指令 有:CMD5 Sleep/Awake、CMD6 写 EXT_CSD[34] POWER_OFF_NOTIFICATION 无标准休眠指令 无(仅有 Deep Power-down)
PCB 层数要求 6 层以上,推荐 HDI(激光微孔 / 盘中孔) 2 ~ 4 层即可 2 层即可 4 ~ 6 层 2 层即可
相对成本 中高(器件 + PCB + 焊接检测) 中(需计入主控 NAND 方案成本) 最低
适用场景 智能手机 / 平板 / 车载 / 网关 / 边缘计算 / 大容量日志 MCU/MPU 中小容量扩展、消费类 代码存储、配置、小数据、低成本 大容量、主控自带 NAND 方案 启动代码、参数、小固件、XIP
eMMC 相对 SD NAND 的三个实质优势

带宽:8-bit + HS400 可到 400 MB/s,远超 SDIO 4-bit;② 休眠指令:CMD5 可让器件进入 100~300 µA 的 Sleep 态并快速唤醒,无需重新初始化;③ 掉电通知:CMD6 写 EXT_CSD[34] 让器件在断电前完成内部整理,显著降低掉电损坏概率。代价是 BGA 封装、专用控制器与更高的 PCB 要求。

反过来,SD NAND 更合适的场合

接口简单(SDIO/SPI 通用外设)、封装友好(LGA/WSON 可手工焊接与返修)、2~4 层板即可、容量 8 GB 以内、BOM 与测试成本敏感。此时上 eMMC 带来的带宽与休眠能力往往用不上,却要多付 HDI 板与 X 光检测的成本。

1.2 常见封装与引脚

eMMC 采用 BGA 封装,球的排列遵循「外圈走信号、内层走电源与地」的通用规律,但具体到每个球的定义,不同厂商、不同容量、不同版本可能完全不同,必须以所选型号的 datasheet 为准。

eMMC BGA 封装与 ball map 分区示意 BGA-153 11.5 x 13 mm 0.5 mm pitch,外圈信号球,中部电源与地球。 11.5 mm 13.0 mm 0.5 mm ball pitch 建议 HDI 工艺 + 6 层以上 BGA-153 · 11.5×13 mm · 0.5 mm pitch 信号球:CLK / CMD / DAT0~7 / DS / RST_n VCC 电源球(核心 / NAND) VCCQ 电源球(IO / 控制器) VSS / VSSQ 地球 NC / 保留球(悬空,不接) ball map 因厂商而异 不同厂商 / 不同容量的 ball map 可能完全不同, 必须以所选型号 datasheet 为准,不可套用旧图。 扇出与叠层要点 外圈出信号,内层走电源 / 地 或盘中孔(VIPPO);建议 6 层及以上、完整地平面
图 1-1 BGA-153 封装与 ball map 分区示意(12×13 阵列去 3 球 = 153 球;配色仅表示分区规律,非真实球号)
封装本体尺寸Ball pitch球数典型容量说明
BGA-15311.5 × 13 mm0.5 mm1534 GB ~ 128 GB最主流 优先选用;需 HDI 或至少 6 层板
BGA-16912 × 16 mm0.5 mm16932 GB ~ 256 GB大容量;同样 0.5 mm pitch
BGA-10014 × 18 mm0.8 mm1004 GB ~ 64 GB老一代封装,pitch 宽松,易焊接;面积大
BGA-22114 × 18 mm0.5 mm22164 GB 及以上大容量新封装;扇出难度最高
BGA-18612 × 16 mm0.5 mm186按厂商部分厂商大容量料号;需查手册
ball map 因厂商而异 —— 不要套用旧图

同一容量、同为 BGA-153 的两颗 eMMC,VCC / VCCQ / VSS / NC 的球位可能不同;同一厂商不同版本(如 eMMC 5.0 与 5.1)也可能改版。原理图符号与封装库必须逐型号从 datasheet 建立,并在 BOM 中锁定完整料号(含温度等级与固件版本)。换料时按新料重新核对 ball map。

1.3 信号定义

eMMC 是点对点(point-to-point)连接:一组 CLK/CMD/DAT 总线上只能挂一颗 eMMC,不支持多设备并联共用总线(这与 SD 卡的多卡总线不同)。总线上所有信号都参考 VCCQ。

信号方向说明设计要求
CLK主控 → 器件时钟。识别阶段 ≤400 kHz,工作阶段按速率档位不需要上拉;建议源端串阻;包地处理
CMD双向命令与响应,开漏 + 上拉,双向半双工必须外部上拉 10 kΩ~50 kΩ 到 VCCQ
DAT0~DAT7双向数据线。DAT0 还兼作忙(busy)指示建议外部上拉;确认主控内部上拉是否足够
DS器件 → 主控Data Strobe,数据选通,HS400 必需与 DAT 组内等长;上拉/下拉按主控与器件参考设计
RST_n主控 → 器件硬件复位,低有效4.7 ~ 10 kΩ 上拉到 VCCQ,并可由 GPIO 控制
VCC电源核心 / NAND 阵列电源常见 2.7~3.6 V;1.8 V-only 器件为 1.7~1.95 V
VCCQ电源IO / 控制器电源1.7~1.95 V(1.8 V)或 2.7~3.6 V(3.3 V);不得高于 VCC
VSS核心 / NAND 地全部接到完整地平面
VSSQIO / 控制器地与 VSS 同地平面,就近打地过孔
eMMC 系统连接与信号架构 主控 SoC 内的 eMMC Host 控制器经 CLK、CMD、DAT0~7、DS、RST_n 与 eMMC 器件点对点连接,并由 PMIC 提供 VCC 与 VCCQ 两路电源。 主控 SoC / MPU eMMC Host Controller MMC 协议硬件控制器 PMIC / 电源 VCC + VCCQ 双路 GPIO:RST_n / 负载开关 eMMC 器件(BGA) 控制器 + FTL 坏块管理 / 磨损均衡 NAND Flash 阵列 SLC / MLC / TLC VCC / VCCQ / VSS CLK 时钟(主控输出,无需上拉) CMD 命令 / 响应(双向,必须上拉) DAT0~DAT7 数据(双向,建议上拉) DS 数据选通(HS400 必需,器件→主控) RST_n 硬件复位(低有效,上拉到 VCCQ) 33Ω 33Ω 33Ω 33Ω 33Ω VCC 2.7~3.6 V(核心/NAND) VCCQ 1.8 V 或 3.3 V(IO)
图 1-2 eMMC 系统连接与信号架构(点对点,总线不可并联第二颗器件)
图 1-2 补充说明

① 串阻 22~33 Ω 靠近主控侧放置,HS400 时按主控参考设计取值,部分平台不需要。② CMD 与 DAT0~7 的外部上拉不可省,主控内部上拉通常偏弱(几十 kΩ 到上百 kΩ),在 8-bit + 高速下不足以保边沿。③ DS 仅在 HS400 / HS400ES 模式下由器件输出,低速模式下可忽略,但走线仍需按高速信号处理。④ VCC 与 VCCQ 来自 PMIC 的两路(或一路可切换)电源,硬件上必须满足 VCCQ ≤ VCC。

1.4 关键电气参数

参数典型值说明与设计影响
VCC(核心 / NAND)2.7 ~ 3.6 V(常见 3.3 V);1.8 V-only 器件 1.7 ~ 1.95 V选型时先确认是 3.3 V 器件还是 1.8 V-only 器件,两者电源树完全不同
VCCQ(IO / 控制器)1.7 ~ 1.95 V(1.8 V)或 2.7 ~ 3.6 V(3.3 V)HS200 / HS400 要求 VCCQ = 1.8 V;不得高于 VCC
读电流30 ~ 80 mA电源与去耦按最坏情况设计
写 / 擦电流50 ~ 150 mA编程期间电流显著高于读
瞬时峰值电流可达 200 mA 以上LDO/DC-DC 与去耦网络必须承受,纹波建议 < 50 mVp-p
Sleep 电流100 ~ 300 µACMD5 进入,状态保持,唤醒无需重新初始化
断电(Power Off)电流< 1 µAVCC 负载开关关断后的漏电流
工作温度(商业级)0 ~ 70 °C消费类;高温会触发内部温控降速
工作温度(工业级)−40 ~ 85 °C车载、工控、户外必须选工业级料号
ESD(HBM)±2 kV 量级(按型号)人体可接触的接口仍需外加 TVS

2 · 接口与工作模式

eMMC 的速率由「总线宽度」与「HS_TIMING 档位」两个维度共同决定。上电后器件默认处于 1-bit + Legacy 的低速状态,必须由主机通过 CMD6 主动切换才能提速。

2.1 总线宽度 1 / 4 / 8-bit

总线宽度使用信号EXT_CSD[183] 取值说明
1-bit(默认)CLK、CMD、DAT00上电 / 复位后的默认状态;Bring-up 阶段先在此档调通
4-bit SDR+ DAT1~DAT31带宽翻倍;主控或 PCB 无法支持 8-bit 时的折中
8-bit SDR+ DAT4~DAT72HS200 的前提;HS400 之前必须先切到 8-bit SDR
4-bit DDRDAT0~DAT3(双沿采样)5较少使用;同样要求 VCCQ = 1.8 V
8-bit DDRDAT0~DAT7 + DS6HS400 / HS400ES 必需;此时 DS 才生效
切换顺序不能反

必须先切总线宽度(BUS_WIDTH),再切速率档位(HS_TIMING),最后切主控侧时钟频率与 DDR 模式。反过来先提时钟再切宽度,器件会在不匹配的时序下工作,表现为命令超时或数据 CRC 错误。

2.2 速率档位

档位时钟采样方式总线宽度理论吞吐VCCQ 要求Tuning
识别模式(Identification)≤ 400 kHzSDR1-bit任意不需要
Legacy(兼容 MMC)≤ 26 MHzSDR1 / 4 / 8-bit≤ 26 MB/s3.3 V 或 1.8 V不需要
High Speed(HS)≤ 52 MHzSDR1 / 4 / 8-bit8-bit 时 52 MB/s3.3 V 或 1.8 V不需要
HS200≤ 200 MHzSDR4 / 8-bit8-bit 时 200 MB/s1.8 V必须
HS400≤ 200 MHzDDR8-bit + DS400 MB/s1.8 V必须
HS400ES(Enhanced Strobe)≤ 200 MHzDDR8-bit + DS400 MB/s1.8 V必须
HS400 与 HS400ES 的区别

HS400 下 DS 由器件在写操作时输出、读操作时器件也输出 DS 供主控采样,DS 与数据边沿存在固有的时序偏差;HS400ES(Enhanced Strobe) 让器件在 DS 上持续输出时钟(enhanced strobe 模式),主控可据此做更稳健的训练与采样,显著改善时序裕量,代价是需要主控与器件双方都支持。若主控支持,优先选 HS400ES。

2.3 初始化与提速完整流程

上电后器件处于未知状态,主机必须按固定顺序完成复位、识别、读取 EXT_CSD,再按需提速。下图给出完整流程。

eMMC 初始化与提速完整流程 左列为上电复位到读取 EXT_CSD 的识别流程,右列为解析能力、切换 VCCQ、切总线宽度、切速率档位、tuning 与主控侧切时钟的提速流程。 A · 上电与识别流程 B · 总线宽度与提速流程 1 上电稳定 + 虚拟时钟 VCC / VCCQ 稳定后等待 ≥1 ms(建议 5 ms) 再送 ≥74 个 dummy clock,CLK ≤ 400 kHz 2 CMD0 复位到 Idle arg = 0x00000000(GO_IDLE_STATE) 注:0xF0F0F0F0 是 GO_PRE_IDLE_STATE(复位后重新引导 boot),进入 Idle 用 0x00000000;也可 RST_n 硬件复位 3 CMD1 SEND_OP_COND arg 常用 0x40FF8080(含 sector mode) 轮询响应 bit31 = 1 后退出,超时按失败处理 4 CMD2 + CMD3 取 CID / 设 RCA CMD2 ALL_SEND_CID 读 128 bit CID CMD3 SET_RELATIVE_ADDR 分配 RCA(默认 1) 5 CMD7 SELECT_CARD 以 RCA 选中器件,进入 Transfer 态 此后才可发 CMD8 / CMD6 等数据传输命令 6 CMD8 SEND_EXT_CSD 读回 512 字节 EXT_CSD 寄存器 解析 [212] SEC_COUNT 容量、[196] DEVICE_TYPE 1 判定器件能力 [196] DEVICE_TYPE:是否支持 HS200 / HS400 [192] REV 版本;结合主控能力取交集 2 硬件切换 VCCQ → 1.8 V 由 PMIC / regulator 完成,属硬件动作 切换后重新等待电源稳定(≥1 ms) 3 CMD6 切总线宽度(先) [183] BUS_WIDTH = 2(8-bit SDR) 1/4/8-bit = 0/1/2;4/8-bit DDR = 5/6 4 CMD6 切 HS_TIMING(后) [185]:0=Legacy 1=HS 2=HS200 3=HS400 4=HS400ES(仅 8-bit DDR 允许) 5 HS200 / HS400 执行 Tuning CMD21 SEND_TUNING_BLOCK 或主控自动 tuning 调整采样相位 / 延时,失败则降速重试 6 主控侧切时钟与 DDR 切时钟频率、使能 DDR 采样,DS 生效 校验读写,失败按 HS200 → HS → Legacy 回退 顺序不可颠倒:先切 BUS_WIDTH → 再切 HS_TIMING → 最后切主控时钟与 DDR 模式 HS200 / HS400 前必须先完成 VCCQ → 1.8 V 硬件切换,并执行 tuning(CMD21)
图 2-1 eMMC 初始化与提速完整流程(左:识别;右:提速)

2.3.1 命令序列参考

// ---- 1) 上电与虚拟时钟 ----
VCC / VCCQ 上电并稳定
delay_ms(5);                       // 规格要求 ≥1 ms,建议 5 ms
clk_set(400 kHz);                  // 识别模式 ≤400 kHz
send_dummy_clocks(80);             // ≥74 个 dummy clock

// ---- 2) 复位与识别 ----
CMD0  arg = 0x00000000             // GO_IDLE_STATE,进入 Idle(0xF0F0F0F0 是 GO_PRE_IDLE_STATE,用于复位后重引导 boot)
do {
    CMD1 arg = 0x40FF8080;         // 0x40FF8000 | sector mode(0x40000000) | OCR
    r = resp_r3();                 // OCR 寄存器,bit31 = busy/power-up status
} while ((r & 0x80000000) == 0 && !timeout(1s));
CMD2  ALL_SEND_CID                 // 读 128 bit CID
CMD3  SET_RELATIVE_ADDR            // 分配 RCA,常用 0x0001
CMD7  SELECT_CARD  arg = RCA<<16   // 进入 Transfer 态(Standby → Transfer)

// ---- 3) 读能力 ----
CMD8  SEND_EXT_CSD                 // 读 512 B;注意用 ADTC + 数据块读
device_type = ext_csd[196];        // bit4=HS200_1.8V  bit6=HS400_1.8V ...
sec_count   = ext_csd[212..215];   // SEC_COUNT × 512 B
rev         = ext_csd[192];        // eMMC 版本

// ---- 4) 提速(以 HS400 为例)----
pmic_set_vccq(1.8 V);              // 硬件动作,等电源稳定 ≥1 ms
CMD6  arg = (3<<24)|(183<<16)|(2<<8)   // Access=Write Byte, Index=183, Value=2 (8-bit SDR)
CMD6  arg = (3<<24)|(185<<16)|(1<<8)   // HS_TIMING = 1,先到 High Speed 52 MHz
clk_set(52 MHz);
CMD6  arg = (3<<24)|(185<<16)|(2<<8)   // HS_TIMING = 2,HS200
clk_set(200 MHz);
tuning();                          // CMD21 SEND_TUNING_BLOCK,或主控自动 tuning
CMD6  arg = (3<<24)|(183<<16)|(6<<8)   // BUS_WIDTH = 6,8-bit DDR
CMD6  arg = (3<<24)|(185<<16)|(3<<8)   // HS_TIMING = 3,HS400;ES 则为 4
clk_set(200 MHz, DDR);              // 主控侧切 DDR 采样,DS 生效
verify_read_write();                // 失败则按 HS200 → HS → Legacy 逐级回退
CMD6 参数格式

CMD6(SWITCH)的 32 位参数为 [31:24] Access | [23:16] Index | [15:8] Value | [7:0] CmdSet。写字节时 Access = 0x03,Index 为 EXT_CSD 字节偏移,Value 为要写入的值,CmdSet 通常为 0x01(或 0)。写完后建议重新读一次 EXT_CSD 确认写入生效,并检查 SWITCH_ERROR 状态位。

2.3.2 EXT_CSD 关键字段速查

字节偏移字段名关键取值用途
183BUS_WIDTH0=1-bit,1=4-bit,2=8-bit,5=4-bit DDR,6=8-bit DDR切换总线宽度,提速第一步
185HS_TIMING0=Legacy,1=High Speed,2=HS200,3=HS400,4=HS400ES切换速率档位,提速第二步
179PARTITION_CONFIGbit0~2 BOOT_PARTITION_ENABLE,bit3~5 BOOT_PARTITION_ACCESS,bit6 BOOT_ACK启动分区选择与当前访问分区
212SEC_COUNT4 字节,单位 512 B 扇区容量 = SEC_COUNT × 512 B
196DEVICE_TYPE位域,标示支持的 HS200 / HS400 及对应电压决定可切到的最高档位
192REVeMMC 版本号版本兼容性判断
194温度相关字段按版本定义读取器件温度,用于热管理
EXT_CSD[179] PARTITION_CONFIG 易错点

bit3~5(PARTITION_ACCESS)决定主机当前访问的是哪个分区,而不是 Boot 使能。上电后默认访问 User Data Area。若误写成访问 Boot 分区,会把 boot 镜像当成数据区读写,导致启动失败或数据错乱。改这个字段前务必先确认当前没有未落盘的传输。

3 · 分区与启动

eMMC 内部被划分为若干硬件分区,主机任何时刻只访问其中一个,通过 EXT_CSD[179] 的 PARTITION_ACCESS 位切换。理解这套映射是做启动、OTA 与安全存储的前提。

3.1 内部分区映射

eMMC 内部分区映射 依次为 Boot Area Partition 1、Boot Area Partition 2、RPMB、General Purpose Partition 1 到 4、User Data Area,主机通过 PARTITION_CONFIG 切换当前访问分区。 eMMC 内部分区(主机通过 PARTITION_CONFIG 切换当前访问分区) Boot Area Partition 1 首选启动分区;由 EXT_CSD[179] bit0~2 选择并使能,主机以 4-bit SDR 或 1-bit 读取 典型 4 MB Boot Area Partition 2 第二启动分区,常用于备份镜像、双系统或 A/B 无缝升级 典型 4 MB RPMB(Replay Protected Memory Block) HMAC-SHA256 认证访问,写计数防重放;存放密钥、DRM、安全计数、防回滚版本 512 KB ~ 4 MB General Purpose Partition 1 ~ 4 通用分区,需先配置大小并增强属性后生效;可用于系统 / 数据 / 日志隔离 可选,用户配置 User Data Area(UDA) 默认访问分区,承载文件系统与主要数据;容量 = EXT_CSD[212] SEC_COUNT × 512 B 剩余全部容量 关键约束 ① Boot 分区与 RPMB 的容量、块大小、访问方式由 EXT_CSD 定义,改动分区配置会使数据不可访问; ② GPP 一旦创建并写入数据,重新配置大小通常需要先擦除;③ RPMB 不能当普通存储用,必须走认证读写流程。
图 3-1 eMMC 内部分区映射(各分区容量不按比例)
分区典型大小访问方式典型用途注意事项
Boot Area Partition 14 MB(可配置,常见 128 KB ~ 4 MB)PARTITION_ACCESS = 1一级启动镜像(SPL / bootloader)Boot 期间器件以固定低速输出数据
Boot Area Partition 2同 Boot 1PARTITION_ACCESS = 2备份镜像、A/B 升级与 Boot 1 二选一作为启动源
RPMB512 KB ~ 4 MB认证读写(HMAC-SHA256 + 写计数)密钥、DRM、防回滚计数、安全数据写入需密钥预置(一次性),不可当作普通分区
GPP 1 ~ 4用户配置PARTITION_ACCESS = 4 ~ 7系统 / 数据 / 日志隔离,可作为只读或增强分区需先配置大小并 POWER_ON 后生效
User Data Area剩余全部容量PARTITION_ACCESS = 0(默认)文件系统、应用数据上电后默认访问的就是这里

3.2 PARTITION_CONFIG 配置

EXT_CSD[179] PARTITION_CONFIG 是一个字节,三组分担不同职责:

字段取值与含义
bit 0~2BOOT_PARTITION_ENABLE0=不使能 Boot;1=从 Boot 1 启动;2=从 Boot 2 启动;3~6=从 UDA 启动(含部分特殊含义);7=从 UDA 启动
bit 3~5BOOT_PARTITION_ACCESS0=无访问(UDA);1=Boot 1;2=Boot 2;3=RPMB;4~7=GPP 1~4
bit 6BOOT_ACK0=无需 Boot Acknowledge;1=需要器件在 Boot 期间回 Acknowledge
bit 7保留通常写 0
最常见的两个坑

把 BOOT_PARTITION_ENABLE 与 BOOT_PARTITION_ACCESS 搞混:前者是「下次上电从哪启动」,后者是「现在读写的是哪个分区」。② 烧写完 boot 镜像后忘记把 ACCESS 切回 UDA,导致文件系统被写到 Boot 分区,或者内核启动时读不到 rootfs。

写 boot 镜像的标准流程

// 1) 切换到 Boot1 分区
CMD6 SWITCH  [179] PARTITION_CONFIG = (BOOT_ACK<<6) | (1<<3) | BOOT_EN
//    bit3~5 = 1  → 当前访问 Boot Area Partition 1

// 2) 擦除并写入镜像
CMD35 ERASE_GROUP_START / CMD36 ERASE_GROUP_END / CMD38 ERASE
CMD25 WRITE_MULTIPLE_BLOCK  <bootloader.img>
CMD12 STOP_TRANSMISSION

// 3) 配置启动源(下次上电从 Boot1 启动)
CMD6 SWITCH  [179] = (0<<6) | (0<<3) | 1
//    bit0~2 = 1  → BOOT_PARTITION_ENABLE = Boot 1
//    bit3~5 = 0  → 当前访问切回 User Data Area

// 4) 断电重启验证(部分器件需完整上下电才生效)
power_cycle(); verify_boot();

3.3 Boot 启动流程

  1. 上电:VCC / VCCQ 达到门限,器件内部完成初始化(典型几十 ms 内)。
  2. 主机拉低 CMD:主机在上电后把 CMD 线保持低电平 ≥74 个时钟周期(部分平台为 1 s 内),向器件发出 Boot 请求。若不拉低,器件进入普通识别流程。
  3. 器件响应:器件识别到 Boot 请求后,按 BOOT_PARTITION_ENABLE 指定的分区,以固定低速(通常为 1-bit 或 4-bit SDR、低速时钟)连续输出数据。
  4. Boot Acknowledge(可选):若 BOOT_ACK = 1,器件先发送 Acknowledge 图案再输出数据。
  5. 主机接收:主机按协议接收固定长度(常见 128 KB × N)的数据块,完成后拉高 CMD 结束 Boot 模式。
  6. 进入常规识别:Boot 结束后器件回到 Idle,主机按 §2.3 流程发 CMD0/CMD1/… 重新初始化。
Boot 模式的硬件含义

Boot 阶段器件使用固定的总线宽度与时钟,与后续工作模式无关,也不受 HS_TIMING 影响。因此CMD 与 DAT 的上拉必须可靠——Boot 阶段主控内部上拉尚未配置完成,若外部上拉缺失,最典型的现象就是「冷启动偶尔起不来、热复位正常」。

4 · 电源设计

eMMC 需要 VCC(核心 / NAND)VCCQ(IO / 控制器)两路电源。绝大多数「莫名其妙识别失败 / 高速不稳定」的问题,最后都追到这两路的电压、顺序、纹波或去耦上。

4.1 VCC / VCCQ 双电源与去耦

硬约束(不可违反)

VCCQ 不得高于 VCC:任何时刻(含上电、断电、掉电瞬间)都必须满足 VCCQ ≤ VCC,否则可能通过 IO 造成闩锁或损坏。② HS200 / HS400 要求 VCCQ = 1.8 V,3.3 V 的 VCCQ 无法进入这两个档位。③ 上电时 VCC 先于或同时 VCCQ;断电时 VCCQ 先于或同时 VCC

电源常见规格作用设计要点
VCC2.7 ~ 3.6 V(3.3 V 器件);1.7 ~ 1.95 V(1.8 V-only 器件) NAND 阵列与核心逻辑,写 / 擦电流主要来自这里 10 µF + 0.1 µF × 2;承受 200 mA 以上峰值
VCCQ1.7 ~ 1.95 V(1.8 V)或 2.7 ~ 3.6 V(3.3 V) IO 与控制器,所有信号电平参考它 每个 VCCQ 球 0.1 µF + 4.7 ~ 10 µF bulk;HS200/HS400 必须为 1.8 V
eMMC 双电源与去耦电路 VCC 由 3.3 V 经 LDO 或 Buck 与可选负载开关供电,VCCQ 由可切换 1.8 V 与 3.3 V 的 LDO 供电,两路各自配置 bulk 与 0.1 微法去耦,VSS 与 VSSQ 直接入地平面,电源路径禁止串磁珠。 3V3_SYS LDO / Buck VCC 3.3 V Load Switch 可选(断电用) VCC 2.7~3.6 V(核心 / NAND) 10 µF 0.1 µF 0.1 µF VCCQ_SRC LDO 1.8 V / 3.3 V VCCQ(可切换) HS200 / HS400 前必须先切到 1.8 V VCCQ 1.8 V / 3.3 V(IO / 控制器) 4.7 µF 0.1 µF 0.1 µF eMMC 器件 BGA-153 XTX XT28EG / M28EG 系列 控制器 + FTL SEC_COUNT × 512 B 8-bit+DS 需 1.8 V VCCQ 不得高于 VCC 写峰值 200 mA VCC 核心 / NAND VCCQ IO / 控制器 VSS VSSQ FB VCC / VCCQ 禁止串磁珠
图 4-1 eMMC 双电源架构与去耦(去耦电容须放在 BGA 背面靠近电源球,地过孔紧邻)
去耦电容上不要串磁珠

eMMC 的 VCC 在写 / 擦时会出现上百毫安的阶跃电流,串入磁珠会引入额外阻抗,造成电压跌落与地弹,直接表现为高速模式下偶发 CRC 错误或命令超时。正确做法是:电源路径上不加磁珠,改用足够容值的低 ESR 陶瓷电容 + 完整地平面;若确实担心 EMI,应在电源源头做滤波,而不是串在 eMMC 支路上。

去耦与布局要点

  • VCC:10 µF(bulk)+ 0.1 µF × 2,尽量靠近 VCC 球;bulk 可用 22 µF 以保证峰值电流下的电压稳定。
  • VCCQ每个 VCCQ 球配 0.1 µF,外加 4.7 ~ 10 µF bulk。VCCQ 是 IO 电源,HS400 下 200 MHz 边沿对它的纹波最敏感。
  • 去耦电容放在 BGA 背面(bottom side)靠近电源球的位置,地过孔紧邻电容地焊盘,回路面积最小化。
  • 电容优先 X5R / X7R 0402 或 0201,注意直流偏压下的容量衰减(1.8 V / 3.3 V 偏置会显著降容,选型时留出余量)。
  • 电源纹波建议控制在 50 mVp-p 以内,VCCQ 尤其严格。

4.2 上电与断电时序

eMMC 上电与断电时序 VCC 先上电,VCCQ 后上电且不得高于 VCC;两路稳定后等待至少 1 毫秒并发送 74 个以上虚拟时钟再开始初始化;断电时先停传输并发送掉电通知,VCCQ 先于或同时与 VCC 掉电。 上电阶段 初始化 / 提速 断电阶段 VCC VCCQ 1 3 4 6 2 5 1 VCC 先上电 · 不得高于规格上限(2.7~3.6 V) 2 VCCQ 后上电;全程不得高于 VCC 3 两路稳定后等待 ≥1 ms(建议 5 ms)再发 ≥74 个 dummy clock 4 初始化 + CMD6 提速;切 1.8 V 需先确认 VCCQ 5 断电:先停传输 -> POWER_OFF_NOTIFICATION -> 等 Ready 6 VCCQ 先于 VCC 掉电;VCC / VCCQ 均 < 100 mV 且保持 ≥1 ms 后再上电
图 4-2 eMMC 上电与断电时序(VCC 先上后掉,VCCQ 后上先掉)

上电流程

  1. VCC 先建立(或与 VCCQ 同时),VCCQ 随后建立;全程保证 VCCQ ≤ VCC。
  2. 两路电源稳定后,等待 ≥1 ms(建议 5 ms)
  3. 在 CLK ≤ 400 kHz 下发送 ≥74 个 dummy clock,让器件内部完成复位与状态机同步。
  4. 进入 §2.3 的识别与提速流程。

断电流程(推荐)

// 1) 停止传输并落盘
CMD12 STOP_TRANSMISSION
poll CMD13 / DAT0 直到非忙
fs_sync();                          // 文件系统同步

// 2) 通知器件即将断电(eMMC 特有优势)
CMD34 POWER_OFF_SHORT  /  CMD35 POWER_OFF_LONG
poll 直到器件返回 Ready(器件完成内部整理)

// 3) 停时钟并把 IO 拉到确定电平
clk_gate();
set_io_as_gpio_output_low();        // CLK/CMD/DAT/DS/RST_n 全部输出低

// 4) 关断 VCC 负载开关
load_switch_off(VCC);
delay_ms(...);                       // 等 VCC / VCCQ 均 < 100 mV 且保持 ≥1 ms 后再允许上电
为什么必须等 VCC / VCCQ < 100 mV

若 VCC 尚未泄放干净就重新上电,器件内部状态机可能停在半初始化状态,表现为「偶尔识别不到」或「第一次上电失败、第二次成功」。若系统无法保证泄放时间,应在电源轨上增加泄放电阻或选用带快速放电(quick output discharge)的负载开关。

4.3 上拉与源端串阻

信号上拉源端串阻说明
CLK不需要22 ~ 33 Ω主控输出,无开漏需求;串阻用于抑制过冲与振铃
CMD必须 10 kΩ ~ 50 kΩ 到 VCCQ22 ~ 33 Ω开漏双向,上拉缺失会导致识别与 Boot 失败
DAT0~DAT7建议 10 kΩ ~ 50 kΩ 到 VCCQ22 ~ 33 Ω先确认主控内部上拉是否足够,不足则必须外加
DS按主控与器件参考设计(上拉或下拉)22 ~ 33 ΩHS400 必需;务必查两端参考设计后确定
RST_n必须 4.7 ~ 10 kΩ 到 VCCQ一般不需要同时建议由主控 GPIO 控制,便于软件复位
RST_n 硬件复位时序

RST_n 为低有效硬件复位。建议 4.7 kΩ 上拉到 VCCQ(允许 4.7 ~ 10 kΩ,不使用 47 kΩ 一类过弱上拉:RST_n 走线常与高速 DQ 平行,过弱上拉易被耦合干扰误触发复位),并由主控 GPIO 通过开漏或推挽控制。复位时序:拉低 ≥1 µs(建议 1 ~ 10 ms),释放后等待 ≥1 ms 再开始初始化。若不需要硬件复位,也必须保留上拉,不可悬空。软件复位可用 CMD0 arg=0x00000000,但注意它不会复位所有器件内部状态。

HS400 下的串阻要单独确认

22 ~ 33 Ω 是通用经验值。进入 HS400 后,串阻会与走线、负载电容共同影响 200 MHz 边沿与 DS 时序裕量,部分平台明确要求不同的阻值,甚至不需要串阻。务必以主控参考设计与实测眼图 / tuning 结果为准,不要直接照搬 4-bit 的经验值。

4.4 低功耗三档

eMMC 提供了三档功耗状态,覆盖从「短暂空闲」到「彻底断电」的全部场景。其中 Sleep/Awake(CMD5)Power Off Notification(CMD6 写 EXT_CSD[34];eMMC 无独立的掉电通知命令) 是 eMMC 相对 SD NAND 的关键优势。

eMMC 低功耗三档状态切换 Active 运行态经 CMD5 进入 Sleep 休眠态并可唤醒,也可经掉电通知与关断 VCC 进入断电态,断电态需重新上电与完整初始化才能回到运行态。 重新上电 + 完整初始化(10~100 ms) ① Active 运行态 读 30~80 mA / 写 50~150 mA 峰值可达 200 mA 以上 全速读写,时钟持续 ② Sleep / Awake(CMD5) Sleep 电流 100~300 µA 唤醒 数百 µs ~ 几 ms 无需重新初始化,状态保持 ③ VCC 负载开关断电 断电电流 < 1 µA 需重新初始化 10~100 ms 先 CMD6 写 EXT_CSD[34] 再关断 VCC CMD5 bit15=1 (进入 Sleep) CMD5 bit15=0 (唤醒 Awake) POWER_OFF_NOTIFICATION(CMD6 写 EXT_CSD[34])+ 关断 VCC 选型与流程建议 短时空闲用 Sleep(CMD5);长时间断电先发 CMD6 写 EXT_CSD[34] 再关断 VCC。 断电流程:sync -> CMD6 写 EXT_CSD[34] -> 等 Ready -> 停时钟 -> IO 输出低 -> 关断开关 -> 等 VCC/VCCQ <100 mV 且保持 ≥1 ms。
图 4-3 eMMC 低功耗三档状态与切换路径
方案指令 / 动作典型电流恢复耗时是否需要重新初始化适用场景
Sleep / Awake CMD5(arg bit15 = 1 进入 Sleep;bit15 = 0 唤醒) 100 ~ 300 µA 数百 µs ~ 几 ms 不需要 秒级到分钟级空闲;待机但仍需快速响应
Power Off Notification + 断电 CMD34(POWER_OFF_SHORT)/ CMD35(POWER_OFF_LONG),等 Ready,再关断 VCC < 1 µA 10 ~ 100 ms 甚至更长 需要 长时间休眠、运输模式、电池供电设备的关机
直接 VCC 负载开关断电 无通知,直接关断 VCC < 1 µA 10 ~ 100 ms 甚至更长 需要 仅作兜底有掉电损坏风险,非紧急不使用
Power Off Notification 是 eMMC 相对 SD NAND 的第二大优势,务必用上

器件在收到 CMD6 写 EXT_CSD[34] POWER_OFF_NOTIFICATION(取值 1=SHORT / 2=LONG,超时分别参考 GENERIC_CMD6_TIME / POWER_OFF_LONG_TIME)后会主动完成内部整理(把缓存数据落盘、结束正在进行的编程操作、进入可安全断电的状态),然后返回 Ready。主机等到 Ready 之后再断电,可以把掉电造成坏块 / 文件系统损坏的概率降一个数量级。注意:eMMC 不存在独立的掉电通知命令,配置一律走 CMD6。

📥 芯参谋客户端下载