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 Flash | Quad/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.1 | HS200/HS400、1.8 V VCCQ、DS 选通与等长 |
| SD NAND 电路设计指南 | 贴片式 SD NAND | SPI/SDIO 双模式、无休眠指令、VCC 负载开关断电 |
| NAND MCP 电路设计指南 | 多芯片合封存储 | 多 die 与多 CE、双电源轨、HDI 扇出 |
| 并行NOR (PPI NOR) 电路设计指南 | 并行 NOR Flash | 异步读时序、XIP、等待周期、总线扩展 |
| PSRAM 电路设计指南 | 伪静态 RAM | OPI/HyperBus、刷新与延迟周期、XIP 与帧缓存 |
| DDR2 电路设计指南 | DDR2 SDRAM | SSTL_18、T 分支拓扑、VTT 端接、ODT |
| DDR3 电路设计指南 | DDR3 / DDR3L | Fly-by 拓扑、write leveling、动态 ODT |
| DDR4 电路设计指南 | DDR4 SDRAM | POD12、bank group、DBI、2D 训练 |
| DDR5 电路设计指南 | DDR5 SDRAM | 双子通道、On-DIMM PMIC、DFE、同帧 ECC |
| EEPROM 电路设计指南 | EEPROM | I²C/SPI 接口、上拉电阻与总线电容、页写与写保护 |
阅读建议
1 · eMMC 器件基础
eMMC 不是一颗裸 NAND,而是「NAND 阵列 + 控制器 + FTL + 寄存器接口」的完整子系统。它对外只暴露一组 MMC 总线,主机无需关心坏块、ECC、磨损均衡,代价是必须使用专用 eMMC 控制器并接受 BGA 封装。
1.1 定位与选型对比
下面把 eMMC 与同系列其他四类存储放在同一张表里横向对比。选型时的第一性问题通常是:主控有没有 eMMC 控制器与PCB 能不能承受 BGA + 6 层以上。
| 对比项 | eMMC | SD NAND | SPI NAND | 并行 NAND | SPI 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 |
① 带宽:8-bit + HS400 可到 400 MB/s,远超 SDIO 4-bit;② 休眠指令:CMD5 可让器件进入 100~300 µA 的 Sleep 态并快速唤醒,无需重新初始化;③ 掉电通知:CMD6 写 EXT_CSD[34] 让器件在断电前完成内部整理,显著降低掉电损坏概率。代价是 BGA 封装、专用控制器与更高的 PCB 要求。
接口简单(SDIO/SPI 通用外设)、封装友好(LGA/WSON 可手工焊接与返修)、2~4 层板即可、容量 8 GB 以内、BOM 与测试成本敏感。此时上 eMMC 带来的带宽与休眠能力往往用不上,却要多付 HDI 板与 X 光检测的成本。
1.2 常见封装与引脚
eMMC 采用 BGA 封装,球的排列遵循「外圈走信号、内层走电源与地」的通用规律,但具体到每个球的定义,不同厂商、不同容量、不同版本可能完全不同,必须以所选型号的 datasheet 为准。
| 封装 | 本体尺寸 | Ball pitch | 球数 | 典型容量 | 说明 |
|---|---|---|---|---|---|
| BGA-153 | 11.5 × 13 mm | 0.5 mm | 153 | 4 GB ~ 128 GB | 最主流 优先选用;需 HDI 或至少 6 层板 |
| BGA-169 | 12 × 16 mm | 0.5 mm | 169 | 32 GB ~ 256 GB | 大容量;同样 0.5 mm pitch |
| BGA-100 | 14 × 18 mm | 0.8 mm | 100 | 4 GB ~ 64 GB | 老一代封装,pitch 宽松,易焊接;面积大 |
| BGA-221 | 14 × 18 mm | 0.5 mm | 221 | 64 GB 及以上 | 大容量新封装;扇出难度最高 |
| BGA-186 | 12 × 16 mm | 0.5 mm | 186 | 按厂商 | 部分厂商大容量料号;需查手册 |
同一容量、同为 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 地 | 全部接到完整地平面 |
VSSQ | 地 | IO / 控制器地 | 与 VSS 同地平面,就近打地过孔 |
① 串阻 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 µA | CMD5 进入,状态保持,唤醒无需重新初始化 |
| 断电(Power Off)电流 | < 1 µA | VCC 负载开关关断后的漏电流 |
| 工作温度(商业级) | 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、DAT0 | 0 | 上电 / 复位后的默认状态;Bring-up 阶段先在此档调通 |
| 4-bit SDR | + DAT1~DAT3 | 1 | 带宽翻倍;主控或 PCB 无法支持 8-bit 时的折中 |
| 8-bit SDR | + DAT4~DAT7 | 2 | HS200 的前提;HS400 之前必须先切到 8-bit SDR |
| 4-bit DDR | DAT0~DAT3(双沿采样) | 5 | 较少使用;同样要求 VCCQ = 1.8 V |
| 8-bit DDR | DAT0~DAT7 + DS | 6 | HS400 / HS400ES 必需;此时 DS 才生效 |
必须先切总线宽度(BUS_WIDTH),再切速率档位(HS_TIMING),最后切主控侧时钟频率与 DDR 模式。反过来先提时钟再切宽度,器件会在不匹配的时序下工作,表现为命令超时或数据 CRC 错误。
2.2 速率档位
| 档位 | 时钟 | 采样方式 | 总线宽度 | 理论吞吐 | VCCQ 要求 | Tuning |
|---|---|---|---|---|---|---|
| 识别模式(Identification) | ≤ 400 kHz | SDR | 1-bit | — | 任意 | 不需要 |
| Legacy(兼容 MMC) | ≤ 26 MHz | SDR | 1 / 4 / 8-bit | ≤ 26 MB/s | 3.3 V 或 1.8 V | 不需要 |
| High Speed(HS) | ≤ 52 MHz | SDR | 1 / 4 / 8-bit | 8-bit 时 52 MB/s | 3.3 V 或 1.8 V | 不需要 |
| HS200 | ≤ 200 MHz | SDR | 4 / 8-bit | 8-bit 时 200 MB/s | 1.8 V | 必须 |
| HS400 | ≤ 200 MHz | DDR | 8-bit + DS | 400 MB/s | 1.8 V | 必须 |
| HS400ES(Enhanced Strobe) | ≤ 200 MHz | DDR | 8-bit + DS | 400 MB/s | 1.8 V | 必须 |
HS400 下 DS 由器件在写操作时输出、读操作时器件也输出 DS 供主控采样,DS 与数据边沿存在固有的时序偏差;HS400ES(Enhanced Strobe) 让器件在 DS 上持续输出时钟(enhanced strobe 模式),主控可据此做更稳健的训练与采样,显著改善时序裕量,代价是需要主控与器件双方都支持。若主控支持,优先选 HS400ES。
2.3 初始化与提速完整流程
上电后器件处于未知状态,主机必须按固定顺序完成复位、识别、读取 EXT_CSD,再按需提速。下图给出完整流程。
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(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 关键字段速查
| 字节偏移 | 字段名 | 关键取值 | 用途 |
|---|---|---|---|
| 183 | BUS_WIDTH | 0=1-bit,1=4-bit,2=8-bit,5=4-bit DDR,6=8-bit DDR | 切换总线宽度,提速第一步 |
| 185 | HS_TIMING | 0=Legacy,1=High Speed,2=HS200,3=HS400,4=HS400ES | 切换速率档位,提速第二步 |
| 179 | PARTITION_CONFIG | bit0~2 BOOT_PARTITION_ENABLE,bit3~5 BOOT_PARTITION_ACCESS,bit6 BOOT_ACK | 启动分区选择与当前访问分区 |
| 212 | SEC_COUNT | 4 字节,单位 512 B 扇区 | 容量 = SEC_COUNT × 512 B |
| 196 | DEVICE_TYPE | 位域,标示支持的 HS200 / HS400 及对应电压 | 决定可切到的最高档位 |
| 192 | REV | eMMC 版本号 | 版本兼容性判断 |
| 194 | 温度相关字段 | 按版本定义 | 读取器件温度,用于热管理 |
bit3~5(PARTITION_ACCESS)决定主机当前访问的是哪个分区,而不是 Boot 使能。上电后默认访问 User Data Area。若误写成访问 Boot 分区,会把 boot 镜像当成数据区读写,导致启动失败或数据错乱。改这个字段前务必先确认当前没有未落盘的传输。
3 · 分区与启动
eMMC 内部被划分为若干硬件分区,主机任何时刻只访问其中一个,通过 EXT_CSD[179] 的 PARTITION_ACCESS 位切换。理解这套映射是做启动、OTA 与安全存储的前提。
3.1 内部分区映射
| 分区 | 典型大小 | 访问方式 | 典型用途 | 注意事项 |
|---|---|---|---|---|
| Boot Area Partition 1 | 4 MB(可配置,常见 128 KB ~ 4 MB) | PARTITION_ACCESS = 1 | 一级启动镜像(SPL / bootloader) | Boot 期间器件以固定低速输出数据 |
| Boot Area Partition 2 | 同 Boot 1 | PARTITION_ACCESS = 2 | 备份镜像、A/B 升级 | 与 Boot 1 二选一作为启动源 |
| RPMB | 512 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~2 | BOOT_PARTITION_ENABLE | 0=不使能 Boot;1=从 Boot 1 启动;2=从 Boot 2 启动;3~6=从 UDA 启动(含部分特殊含义);7=从 UDA 启动 |
| bit 3~5 | BOOT_PARTITION_ACCESS | 0=无访问(UDA);1=Boot 1;2=Boot 2;3=RPMB;4~7=GPP 1~4 |
| bit 6 | BOOT_ACK | 0=无需 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 启动流程
- 上电:VCC / VCCQ 达到门限,器件内部完成初始化(典型几十 ms 内)。
- 主机拉低 CMD:主机在上电后把 CMD 线保持低电平 ≥74 个时钟周期(部分平台为 1 s 内),向器件发出 Boot 请求。若不拉低,器件进入普通识别流程。
- 器件响应:器件识别到 Boot 请求后,按 BOOT_PARTITION_ENABLE 指定的分区,以固定低速(通常为 1-bit 或 4-bit SDR、低速时钟)连续输出数据。
- Boot Acknowledge(可选):若 BOOT_ACK = 1,器件先发送 Acknowledge 图案再输出数据。
- 主机接收:主机按协议接收固定长度(常见 128 KB × N)的数据块,完成后拉高 CMD 结束 Boot 模式。
- 进入常规识别:Boot 结束后器件回到 Idle,主机按 §2.3 流程发 CMD0/CMD1/… 重新初始化。
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。
| 电源 | 常见规格 | 作用 | 设计要点 |
|---|---|---|---|
VCC | 2.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 以上峰值 |
VCCQ | 1.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 在写 / 擦时会出现上百毫安的阶跃电流,串入磁珠会引入额外阻抗,造成电压跌落与地弹,直接表现为高速模式下偶发 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 上电与断电时序
上电流程
- VCC 先建立(或与 VCCQ 同时),VCCQ 随后建立;全程保证 VCCQ ≤ VCC。
- 两路电源稳定后,等待 ≥1 ms(建议 5 ms)。
- 在 CLK ≤ 400 kHz 下发送 ≥74 个 dummy clock,让器件内部完成复位与状态机同步。
- 进入 §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 尚未泄放干净就重新上电,器件内部状态机可能停在半初始化状态,表现为「偶尔识别不到」或「第一次上电失败、第二次成功」。若系统无法保证泄放时间,应在电源轨上增加泄放电阻或选用带快速放电(quick output discharge)的负载开关。
4.3 上拉与源端串阻
| 信号 | 上拉 | 源端串阻 | 说明 |
|---|---|---|---|
CLK | 不需要 | 22 ~ 33 Ω | 主控输出,无开漏需求;串阻用于抑制过冲与振铃 |
CMD | 必须 10 kΩ ~ 50 kΩ 到 VCCQ | 22 ~ 33 Ω | 开漏双向,上拉缺失会导致识别与 Boot 失败 |
DAT0~DAT7 | 建议 10 kΩ ~ 50 kΩ 到 VCCQ | 22 ~ 33 Ω | 先确认主控内部上拉是否足够,不足则必须外加 |
DS | 按主控与器件参考设计(上拉或下拉) | 22 ~ 33 Ω | HS400 必需;务必查两端参考设计后确定 |
RST_n | 必须 4.7 ~ 10 kΩ 到 VCCQ | 一般不需要 | 同时建议由主控 GPIO 控制,便于软件复位 |
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,但注意它不会复位所有器件内部状态。
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 的关键优势。
| 方案 | 指令 / 动作 | 典型电流 | 恢复耗时 | 是否需要重新初始化 | 适用场景 |
|---|---|---|---|---|---|
| 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 甚至更长 | 需要 | 仅作兜底有掉电损坏风险,非紧急不使用 |
器件在收到 CMD6 写 EXT_CSD[34] POWER_OFF_NOTIFICATION(取值 1=SHORT / 2=LONG,超时分别参考 GENERIC_CMD6_TIME / POWER_OFF_LONG_TIME)后会主动完成内部整理(把缓存数据落盘、结束正在进行的编程操作、进入可安全断电的状态),然后返回 Ready。主机等到 Ready 之后再断电,可以把掉电造成坏块 / 文件系统损坏的概率降一个数量级。注意:eMMC 不存在独立的掉电通知命令,配置一律走 CMD6。