eMMC 高速模式:HS200/HS400 与 SD UHS-I 时序、调谐与数据选通
更新时间:2026-09-19。前置:NAND/eMMC 控制器 ECC、Raw NAND 时序、源同步接口、DDR PHY 训练。eMMC 是带控制器的 managed NAND,命令/数据走类似 SD 的并行总线;高版本(5.0/5.1)支持 HS200/HS400 高速模式,SD 卡对应 UHS-I 模式。
一、速率模式总览
eMMC 总线:CLK + CMD + DAT0~7(8 位数据)+(HS400)数据选通 DS。模式从慢到快:
- 兼容/默认模式(Identification/Default/SDR,0~26MHz):开漏/推挽识别,初始化阶段,1/4/8 位 SDR(单沿)。
- High Speed SDR(HS,52MHz,SDR):约 52MB/s(×8)。
- HS200(200MHz SDR,1.8V/1.2V I/O):单沿采样,理论 ~200MB/s(×8),需要 tuning。
- HS400(200MHz DDR 双沿,1.8/1.2V):时钟双沿各传一次,~400MB/s(×8);通常先在 HS200 完成调谐再切 HS400;HS400ES 增强选通。
- 可选 HS400 用数据选通(DS)辅助读。
SD 卡 UHS-I:SDR12/25/50/104(最高 104MHz SDR,~104MB/s ×4)、DDR50(50MHz 双沿);UHS-II 则改走差分(本文聚焦 UHS-I 并行)。所有高速模式都要求 I/O 电压切到 1.8V(UHS-I/eMMC HS200),旧卡/老 host 留在 3.3V 低速。
二、电压切换(1.8V)的握手
高速前必须安全降 I/O 电压(3.3→1.8V),靠专门命令确认双方支持:
- eMMC/SD 初始化时 host 发电压切换命令(eMMC CMD1 给电压范围;SD 用 CMD11
voltage switch,UHS-I)。 - 卡若支持,响应后 host 按规定时序切到 1.8V,卡检测到稳定后继续;切压失败/超时要回退 3.3V 或报错(与 USB-C 电压协商 的握手-切换-确认类似,但这里是 I/O 电平)。
- 电压不对,HS200/SDR104 时序根本不工作甚至损伤/误码。
三、HS200/SDR104:高速 SDR 与 tuning 调谐
200MHz 单沿时,UI 只有 2.5ns,板级走线/卡内延迟使 host 采样点偏离数据眼中心(源同步问题,见 源同步):
- host 在 CMD 发 tuning 命令(eMMC CMD21,SD CMD19),卡返回一个固定的训练 pattern(tuning block)。
- host 逐步改变内部接收采样延迟/相位(IO delay/DLL,见 DLL),扫描能正确解码的延迟范围(pass 窗口),取窗口中心作为工作点。
- 支持 tuning block 内重复(可多次)、CRC 校验;某些 host 还要在温度/电压变化后重调(与 DDR read training 同理,但调谐由协议命令触发)。
- CMD/DAT 线在高速下保持连续/按窗口,CMD 线也有相关时序要求。
四、HS400:DDR 双沿与数据选通 DS
HS400 在 CLK 双沿传数据(DDR),频率仍 200MHz 但带宽翻倍:
- 进入路径通常:先在 HS200 完成 tuning 校准接收时序 → 再切到 HS400 DDR;因为 HS400 借用 HS200 调好的延迟。
- 数据选通 DS(Data Strobe):HS400 由设备(eMMC)在读操作时输出一个随路选通 DS,host 用 DS 沿采读数据(真正的源同步,类似 DDR 的 DQS,见 源同步 DQS),降低 host 在高频读时的时序压力;写方向仍由 host 用 CLK。HS400ES(Enhanced Strobe)让 CMD/响应也用 DS,进一步放宽 CMD 时序。
- 数据 CRC 在 DDR 模式按双沿计算(CRC16,DDR 模式有专门多项式/初值),CRC 状态 token 也不同;控制器不能沿用 SDR 的 CRC。
- 电平:HS400 用 1.8V(HS400 部分版本 1.2V);时钟可达 200MHz,信号完整性(ODT/驱动强度/摆率)需配置(见 SI)。
五、初始化进入高速模式的序列(要点)
上电(3.3V) → 发 CMD0/CMD1 协商电压、识别 OCR/CID/CSD/EXT_CSD
→ (eMMC CMD6 / SD ACMD6) 选总线宽度 4/8 bit
→ CMD11/CMD11 切 1.8V I/O, 等待稳定
→ 切 host/卡到 HS200/SDR104 时钟
→ CMD21/CMD19 tuning 扫描采样窗, 锁定延迟
→ (eMMC) 切 HS400(DDR), 启用 DS, 配 ODT/驱动强度
→ 正常高速读写, 必要时周期性/温变后重调- EXT_CSD(eMMC 扩展寄存器)里保存设备支持的最高模式、是否支持 HS400/DS/tuning;host 必须读能力再切换,不能假设。
- 退出高速(如复位、降速、卡插拔)要按序关 DDR/降频/可能恢复电压;SD 卡热插拔还要去抖和重新初始化(见 SDIO/eMMC 卡初始化、GPIO 去抖)。
六、常见的坑
- 没切 1.8V 就跑高速:电平不匹配导致完全不工作或间歇误码。
- 电压切换握手失败处理缺失:切换后无超时/回退,卡死在初始化。
- HS200/HS400 不做 tuning:200MHz 下采样点不在眼内,CRC 错;必须 CMD21/19 找窗口中心。
- HS400 直接进:通常要先经 HS200 调谐再切 DDR,直接进时序不对。
- DDR CRC/状态 token 用错:HS400 CRC16 多项式/采样双沿不同,沿用 SDR 必错。
- 数据选通 DS 未启用/方向错:HS400 读靠设备发 DS,host 未用 DS 或方向配置错导致读失败。
- 读/写时序同一相位:写用 CLK、读用 DS/调谐相位,控制器要分别处理。
- 温漂后不重调:初始 tuning 通过,温度变化窗口漂移(要监控/重调谐)。
- 总线宽度与模式不一致:CMD6/ACMD6 宽度配置和控制器宽度不符。
- ODT/驱动强度不配:高速反射/过冲,眼闭合(见 SI)。
- 设备能力未读 EXT_CSD:向不支持 HS400 的设备发切换,命令失败/异常。
- 热插拔/复位状态机不全:SD 拔出、eMMC RST_n 后停在高速态未回到识别序列。
相关与延伸
managed NAND/ECC 见 NAND/eMMC 控制器;物理 NAND 见 Raw NAND ONFI;采样原理见 源同步接口;调谐部件见 DLL、DDR PHY 训练。
总结
eMMC/SD 高速模式在并行 CMD/DAT 总线上逐级提速:3.3V 默认/HS SDR 先用 CMD11 把 I/O 电压握手切换到 1.8V,再进 HS200(200MHz 单沿 SDR,约 200MB/s)或 SD SDR104,此时 host 必须发 CMD21/CMD19 tuning 命令让卡回训练 pattern、扫描接收延迟找到数据眼中心;eMMC HS400 一般在 HS200 调好后切入,用 CLK 双沿 DDR 翻倍到约 400MB/s,并在读时由设备输出随路数据选通 DS 让 host 源同步采样(HS400ES 连 CMD 也用 DS),同时必须换用 DDR 专用 CRC16 和 token、配置 ODT/驱动强度——漏做电压切换、不做 tuning、不经 HS200 直接进 HS400 和忽略 DS/双沿 CRC,是高速 eMMC 最典型的四类失败。