4. Detect状态详解:电气空闲检测、接收器检测、Beacon序列
Detect状态,说白了就是链路训练的“起跑线”。
我经常跟团队里的新人说,别小看这个状态。它虽然逻辑简单,但一旦出问题,整个链路都起不来。我遇到过好几次板卡插上后死活不link,最后定位到就是Detect阶段电气空闲没检测对。
好,咱们今天就把Detect状态掰开揉碎讲清楚。
4.1 电气空闲检测:链路活着的“呼吸”
电气空闲检测,英文叫Electrical Idle,简称EI。
说白了,就是判断链路上有没有信号在传输。PCIe链路上没有数据时,差分信号对(D+和D-)会保持共模电压,没有摆幅。这就是电气空闲状态。
核心要点:
- 电气空闲 = 差分电压幅度低于阈值(通常为50mV-175mV)
- 接收器需要连续检测至少4个UI(Unit Interval)的电气空闲状态
- 检测到电气空闲后,接收器才能进入下一阶段
为什么会这么设计?你想想看,如果接收器不知道链路上有没有信号,它怎么知道该不该开始接收数据?
我个人的习惯是,在仿真验证时,电气空闲检测的阈值一定要留裕量。曾经有个项目,芯片在高温下电气空闲检测阈值漂移,导致链路间歇性断开。排查了整整两周才找到根因。
实战技巧:
电气空闲检测的滤波器时间常数建议设为10ns左右。太短容易误触发,太长会延迟链路恢复。我在Gen3项目中就用这个参数,效果不错。
4.2 接收器检测:确认对面有人
电气空闲检测通过后,LTSSM进入接收器检测子状态。
这一步的目的很简单:确认对端有没有接上接收器。注意,这里检测的是物理存在,不是功能正常。
检测原理是这样的:
- 发送器在TX端发出一个小的共模电压变化(约300-600mV)
- 如果对端有接收器,这个电压变化会被接收器的终端电阻(50Ω)吸收
- 发送器通过检测反射回来的信号幅度,判断接收器是否存在
注意:
接收器检测必须在电气空闲状态下进行。如果链路上有噪声或串扰,可能导致误判。我曾经在实验室遇到过,因为电源纹波太大,接收器检测总是失败,最后加了去耦电容才解决。
接收器检测的结果只有两种:
| 检测结果 | 含义 | 后续动作 |
|---|---|---|
| 检测到接收器 | 对端设备存在 | 进入Polling状态 |
| 未检测到接收器 | 对端设备不存在或未上电 | 回到Detect.Quiet,等待下次检测 |
这里有个细节:接收器检测的周期是12ms。如果12ms内没检测到,LTSSM会回到Quiet状态,然后重新开始。这个时间参数在PCIe Base Spec里有明确规定,我建议你记下来,调试时经常用到。
4.3 Beacon序列:唤醒沉睡的链路
Beacon序列是Detect状态里的一个特殊机制。它用于唤醒处于低功耗状态(L2/L3)的链路。
Beacon信号长什么样?说白了就是一组周期性的脉冲序列:
Beacon序列格式:
- 脉冲宽度:2ns - 6ns
- 脉冲周期:250ns - 500ns
- 持续发送时间:至少2ms
- 差分电压幅度:300mV - 600mV
我刚开始接触Beacon时觉得这玩意儿挺简单,不就是发几个脉冲嘛。直到有一次,一个客户反馈他们的设备在L2状态下无法被唤醒。我查了三天,最后发现是Beacon脉冲的占空比不对,接收端的检测窗口没对齐。
Beacon序列的关键作用:
- 用于L2/L3低功耗状态的唤醒
- 不需要参考时钟即可发送(由内部振荡器产生)
- 接收端通过检测Beacon脉冲来识别唤醒请求
嗯,这里要注意:Beacon序列只在特定场景下使用。大多数情况下,链路从Detect状态直接进入Polling状态,不需要Beacon。只有从L2/L3恢复时,才会用到Beacon。
4.4 Detect状态完整流程图
为了让你更直观地理解Detect状态的工作流程,我画了一张图:
从这张图可以清楚看到,Detect状态有三个核心子状态:Quiet、电气空闲检测、接收器检测。Beacon序列作为特殊分支,只在低功耗唤醒场景下使用。
4.5 常见问题与避坑指南
我在实际项目中总结了一些Detect状态的常见问题,分享给你:
- 电气空闲检测失败:最常见的原因是链路上有噪声。我曾经遇到过,板卡上的DC-DC转换器开关频率正好落在PCIe检测频段内,导致电气空闲检测一直失败。解决办法是优化电源滤波。
- 接收器检测误判:如果PCB走线阻抗不连续,反射信号会干扰检测结果。我建议在仿真阶段就做好TDR分析,确保阻抗控制在85Ω-115Ω范围内。
- Beacon序列无法唤醒:检查Beacon脉冲的幅度和时序。有些低功耗设计会关闭PLL,导致Beacon脉冲抖动过大。我一般会在接收端加一个数字滤波器,容忍±30%的脉冲宽度变化。
我的调试建议:
如果你在调试Detect状态,建议用逻辑分析仪同时抓取TX和RX端的信号。重点关注电气空闲检测的阈值电压和接收器检测的反射波形。这两个信号能告诉你90%的问题所在。
好了,Detect状态的核心内容就这些。它虽然只是LTSSM的起点,但却是整个链路训练的基础。把Detect状态吃透了,后面的Polling、Configuration状态理解起来会轻松很多。
公众号:蓝海资料掘金营,微信deep3321