3. HS400 信号特征:差分时钟、数据线、命令线、数据选通信号详解
说到 HS400 模式,我脑子里第一个跳出来的就是那根差分时钟和 DS 信号。很多工程师调试时容易把时钟和选通搞混,其实这两者分工完全不同。我个人习惯在开始调板之前,先把四类信号的电气特性和时序关系在白板上画一遍,对后续定位问题非常有帮助。
3.1 差分时钟 CLK+ / CLK−
HS400 使用差分时钟,这跟普通 DDR 模式的单端时钟不一样。为什么非要差分?因为 HS400 的时钟频率最高可达 200 MHz,差分能大幅抑制共模噪声,信号完整性更好。
我曾在某款平板项目里遇到过时钟抖动超标的问题。当时用示波器量单端 CLK 波形,看着还行,但一换成差分探头看差分幅度,发现压摆率不够,导致 HS400 训练总失败。后来把上拉电阻调小,问题就解决了。
- 差分时钟周期:最小 5 ns (200 MHz),最大 25 ns (40 MHz)
- 占空比:45% – 55%
- 差分输入电压摆幅 (VIH diff):≥ 0.35 V
- 差分共模电压范围:0.5V – 0.9V (Vref ≈ 0.7V)
需要注意的是,差分时钟的走线必须等长,长度差尽量控制在 10 mil 以内。我见过因为两根时钟线走了不同层导致延时差异,直接让整个 HS400 链路无法 lock。
3.2 数据线 DAT[7:0]
HS400 模式下,数据总线固定为 8 位宽,即 DAT0 ~ DAT7。数据采用双沿采样——在时钟的上升沿和下降沿各传输一个位,所以有效数据传输率是时钟频率的两倍。比如 200 MHz 时钟,数据率就是 400 MT/s。
每条数据线都连接了内部上拉或下拉,具体取决于命令。调试时最好用逻辑分析仪同时抓 8 根线,我曾经因为只看单根 DAT0 以为没问题,结果 DAT5 上有个毛刺,导致读回的数据经常 CRC 错误。
3.3 命令线 CMD
CMD 线是双向的,由主机发送命令,设备返回响应。注意:在 HS400 中,CMD 仍然只在时钟的上升沿采样,并不像数据那样采用双沿。为什么?因为 CMD 的速率相对较低,不需要那么高的吞吐量,而且单沿采样可以简化命令协议的时序设计。
不过 CMD 线在 HS400 模式下有个特殊要求:主机必须在发送命令前保持总线空闲至少 8 个时钟周期。我之前遇到过设备不响应命令的情况,抓波形发现主机的 NOP 指令间隔太短,设备根本来不及处理。
3.4 数据选通信号 DS
DS 是 HS400 模式的核心信号,它只由设备(eMMC)驱动,用于协助主机采样返回数据。DS 的频率和相位与时钟不同:在数据输出期间,DS 的每个边沿(上升和下降)都正好对齐数据的变化沿。换句话说,主机应该在 DS 的 下一个边沿 采样数据,才能确保建立和保持时间。
理解这个相位关系很重要。我画一个简单的时序图就能说清:
时钟 CLK : __--__--__--__--__--
数据 DQ : X0 X1 X2 X3 X4 X5
DS : __-- __-- __-- (边沿对齐数据变化)
主机采样点: 在DS的相反沿 (即上升沿采下降沿对应的数据)
很多工程师刚接触 HS400 时,会误以为 DS 和时钟同频同相,结果直接对时钟沿采样数据,导致全部错位。我记得在一个 SSD 项目调试中,FPGA 固件工程师把 DS 采样沿设反了,跑出来的数据全是错位的 0x55 和 0xAA,折腾了两天才找到原因。
3.5 信号完整性要点
把四种信号放在一起看,有两点必须注意:
- 差分时钟走线:必须成对等长,避免共模转差模噪声。走线参考层要完整,不要跨分割。
- DS 与数据线的 Timing:DS 的走线长度要尽量与最长数据线匹配,否则选通边沿会偏移,导致主机在错误的时刻采样。
我建议在新板投板前,先用仿真工具扫一遍各信号的眼图和串扰。有个项目就是因为 DS 线紧挨着 CLK+ 走,高频耦合导致 DS 毛刺被主机识别为额外边沿,直接造成 CRC 风暴。