一、eMMC HS400 简介:协议特征、信号速率与关键信号归纳
做嵌入式也好,搞硬件调试也罢,eMMC 这玩意你肯定绕不开。特别是到了 HS400 这种高速模式,信号质量稍微差一点,系统就给你颜色看。我个人习惯,调试之前先把协议本身摸透,不然连波形都看不懂,还谈什么调?
这一章,我们就专门把 HS400 模式扒开来看。协议特征、时钟多快、数据怎么传、命令怎么走,一条一条跟你捋清楚。
核心结论一句话:HS400 是 eMMC 5.0 引入的双数据速率(DDR)模式,时钟最高 200MHz,数据线跑 400MB/s,命令线仍然是单数据速率(SDR)。
1.1 HS400 模式到底解决了什么问题?
说白了,HS400 之前,eMMC 主要跑 HS200 模式。HS200 时钟最高也是 200MHz,但它是 SDR——每个时钟周期只传一笔数据。
你想想看,嵌入式设备对存储速度的需求越来越大。从开机到加载游戏,瓶颈经常卡在闪存读出上。HS200 的 200MB/s 已经不够用了,怎么办?
HS400 把数据线改成 DDR,时钟沿上沿下沿都能采样,数据速率直接翻倍到 400MB/s。代价呢?信号完整性的要求也翻倍了。我刚开始调 HS400 时,以为就改个寄存器的事,结果板子一跑全是 CRC 错误,检查才发现是 PCB 走线没做等长,CS 信号过冲严重。
我的经验:HS400 的真正难点不在于协议本身,而在于物理层信号。很多问题都是因为 PCB 布局、阻抗匹配、电源噪声导致的,不是配置没配对。
1.2 信号速率:时钟 200MHz,数据 400MT/s
先看时钟。HS400 模式下的 CLK 信号稳定在 200MHz。周期 5ns,上升沿和下降沿各占 2.5ns。别看 200MHz 跟很多高速接口比不算高,但在 eMMC 这种并行总线上,200MHz 已经非常难伺候了。
数据信号呢?每根数据线 DQ[7:0] 的速率是 400MT/s(Mega Transfer per second)。注意这里的单位是 MT/s,不是 MHz。因为 DDR 模式下每个时钟周期传两笔数据,所以数据信号的比特率是时钟的两倍。
以下是常用 eMMC 模式的关键参数对比:
| 模式 | 时钟频率 | 数据速率 | 数据线数量 | 信号类型 |
|---|---|---|---|---|
| HS200 | 200 MHz | 200 MB/s | 8 | SDR |
| HS400 | 200 MHz | 400 MB/s | 8 | DDR |
| DDR50 | 50 MHz | 50 MB/s | 8 | DDR |
| Default | 0~26 MHz | 26 MB/s | 1~4 | SDR |
注意:HS400 模式下,主机必须在数据线路上提供可编程的 数据选通信号(DS)。这个 DS 信号和时钟是同步的,频率也是 200MHz,但相位需要做调整,否则读数据的时候采样窗口会出问题。
1.3 时钟信号:不只是 200MHz 这么简单
eMMC 的时钟线 CLK,在 HS400 下还有两个关键点:
- 频率切换流程:HS400 不是上电就直接跑的。启动时先跑 Legacy 模式(26MHz),然后通过命令切到 High Speed,最后进入 HS400。每一步都有严格的时序要求。我以前遇到过一台设备一直切不到 HS400,后来抓波形发现是时钟调谐步骤的软件延时不够,导致切换命令没被正确识别。
- 时钟抖动:HS400 模式对时钟抖动的容忍度非常低。JEDEC 标准要求总抖动(包括周期抖动和累计抖动)不超过 ±50ps。如果你的电源纹波比较大,晶振本身质量一般,很容易超标。一台合格的示波器,至少要能看到 2.5ns 以内的细节,所以我个人推荐使用 1GHz 以上带宽的探头。
一句话总结时钟:200MHz 只是标称,真正限制信号质量的,往往是频率切换流程、时钟抖动和电源噪声。
1.4 数据线:8 根线加上 DS 选通
HS400 模式使用 8 位数据总线(DQ[7:0]),外加一条数据选通信号(DS)。DS 是 HS400 独有的,HS200 和更早的模式不需要。
为什么要加 DS?因为 DDR 模式下,数据在时钟的上下沿都采样。如果只靠 CLK 做采样参考,数据窗口会缩小一半,对信号眼图的要求极其苛刻。DS 信号由 eMMC 器件在读取数据时产生,它和输出的数据同步,主机用 DS 的上下沿来采样数据,这样采样窗口更大。
以下是写数据时的信号关系:
- 写数据(主机→eMMC):主机在 CLK 的上升沿输出第一笔数据,在 CLK 的下降沿输出第二笔数据。eMMC 同时使用 CLK 的上下沿采样。
- 读数据(eMMC→主机):eMMC 在 CLK 的上升沿输出第一笔数据,在 CLK 的下降沿输出第二笔数据。同时 eMMC 还会输出 DS 信号,主机用 DS 的上下沿采样数据。
关键差异:写数据时主机用 CLK 做参考,读数据时主机用 DS 做参考。这个差异决定了调试时看写和读的波形,关注点完全不同。
我遇到过不少工程师,调 HS400 读写都盯着 CLK 看,结果读数据永远采不对。其实读数据要看的是 DS 和数据的相对相位,不是 CLK。
1.5 命令线:CMD 仍然是 SDR
HS400 虽然数据线跑 DDR,但命令线 CMD 始终是单数据速率 SDR。这一点很多人忽略。
CMD 线分两种传输方向:
- 命令:主机发送给 eMMC 的指令,比如读、写、擦除、配置等。
- 响应:eMMC 回复主机的状态信息,比如操作完成、出错、忙碌等。
CMD 遵守两线开放式漏极驱动,上拉电阻一般在 10kΩ 左右。平时是高电平,发送数据时主机或器件拉低线路以形成传输。在 HS400 模式下,CMD 线的时钟频率仍然是 200MHz,但只在 CLK 的上升沿采样,所以速率只有 200MT/s。
为什么 CMD 不做 DDR?因为命令和响应不像数据那样需要持续高速传输。通常一次命令才 48 比特,用 SDR 完全够用,还能降低复杂度。
1.6 HS400 模式下的知识体系结构
把上面提到的要点串起来,可以看到 HS400 调试的知识体系涵盖协议特征、时钟、数据线、命令线、信号完整性等多个维度。下面这张图帮你理清全局:
看到这张图,你应该能理解 HS400 调试为什么头疼——它涉及三个不同特性的信号类(时钟、数据、命令),每一个都有不同的关注点。很多新手只盯着数据线看,忽略了时钟切换流程和命令时序,结果花了大量时间却找不到问题。
1.7 我的一点点建议
在进入示波器调试细节之前,先把上面这些概念记牢。你可以做一个小卡片放在桌上:
- 时钟:200MHz,5ns周期,注意抖动和切换流程。
- 数据线:8条DQ+1条DS,400MT/s,读写采样参考不同。
- 命令线:SDR 200MT/s,两根线(CMD+上拉),注意响应超时。
下一章开始,我们就拿起探头,看真实波形。但如果你现在闭上眼就能把上面三条说出来,恭喜你——你已经比之前板子调通了。
一个小故事:有一次培训,一个学员跟我说他的 HS400 板子读数据老是出错。我用示波器抓了 DS 和 DQ 的波形,发现 DS 的相位完全不在采样窗口内。原因是 PCB 上 DS 走线比 DQ 长了将近 2cm,导致延时超了。重新走线后,问题解决。所以调试之前,先确认走线等长!