4. T1训练阶段:链路建立与握手

好,我们终于进入真正的链路训练了。T1阶段,说白了就是Source和Sink互相认识的过程。你想想看,两根线刚连上,谁都不知道对方是什么规格、支持多少条lane、跑多高速率,总得先打个招呼吧?

T1阶段的核心任务就两个:建立物理连接和完成能力握手。这个阶段搞不定,后面所有事都免谈。我在项目中遇到过好几次,板子拿来死活不亮,最后查出来都是T1阶段的问题。

4.1 关键信号状态检查

进入T1之前,有几个信号状态必须确认。我个人习惯是先看这三个:

  • HPD(Hot Plug Detect):Sink端一定要拉高,告诉Source“我准备好了”。HPD我一般建议用示波器量一下,电平是否稳定在3.3V左右。有一次我调一块屏,软件报告HPD没问题,结果示波器一看,电平只有2.8V,还带着纹波——后来发现是连接器接触不良。
  • AUX CH:差分信号,阻抗100Ω。AUX不通,所有通信都是白搭。
  • 主链路(Main Link):这时候lane上还没数据,但电气特性要先对。差分阻抗、共模电压,这些基本项目必须过。
我的检查清单:
  1. HPD电平:3.0V ~ 3.6V,稳定无抖动
  2. AUX CH差分阻抗:90Ω ~ 110Ω
  3. 主链路lane共模电压:0V ± 50mV

4.2 链路训练流程

信号状态确认OK后,Source就开始主动发起训练了。流程其实不复杂,我画了张图你看一下就明白了:

T1训练阶段流程图 T1训练阶段:链路建立与握手 Source检测HPD Source通过AUX 发送DPCD读取请求 Sink返回DPCD能力 Source配置链路参数 Source发送训练模式 Sink锁定并回复 说明:Source读取DPCD后决定链路参数,Sink必须锁定并给出成功回复

这张图的逻辑其实很直白。Source检测到HPD后,就开始通过AUX通道去读Sink的DPCD寄存器。Sink老老实实把自己的能力告诉Source——支持几条lane、最高速率、是否支持增强帧等等。Source拿到这些信息后,拍板决定:好,咱们就用4 lane、HBR2跑吧。然后开始配置链路参数,再发个训练模式过去。Sink收到训练模式,开始做CDR(时钟恢复),成功锁定了之后,回一个好消息给Source。

4.3 关键的DPCD寄存器

整个握手过程,全是靠AUX读写DPCD寄存器完成的。我个人觉得,搞清楚下面这几个寄存器,T1阶段的调试你就心中有数了:

DPCD地址 寄存器名 作用 调试关注点
0x000 SINK_COUNT 告知Source支持的流数量 必须≥1,否则Source认为无设备
0x001 DEVICE_SERVICE_IRQ_VECTOR 中断标志,用于热插拔等事件 Source轮询此寄存器判断Sink状态
0x002 LINK_REVISION Sink支持的eDP协议版本 Source根据此版本决定训练策略
0x003-0x004 MAX_LINK_RATE Sink支持的最高链路速率 值含义:0x06=1.62Gbps,0x0A=2.7Gbps,0x14=5.4Gbps
0x005 MAX_LANE_COUNT Sink支持的最大lane数 bit[3:0]=lane数-1,bit[4]表示是否支持增强帧
我曾经踩过的坑: 有一次调试,Sink的MAX_LINK_RATE寄存器返回0x06,也就是只支持RBR(1.62Gbps)。但Source强行配成了HBR(2.7Gbps),结果链路训练死活不过。后来用分析仪抓AUX事务才看到,Sink在接收到配置后直接回复NACK。所以记住:Source不能超出Sink的能力范围配置。

4.4 握手成功条件

Source完成配置后,会等Sink的回复。Sink需要在规定时间内(eDP标准规定是100ms以内)通过DPCD寄存器0x200(SINK_STATUS)告诉Source训练结果。

握手成功的标志就是:

  • 时钟恢复锁定:每个lane的CDR都锁定了
  • 符号对齐:lane间的数据符号已经对齐
  • 通道均衡完成:各个lane的眼图都打开了
我的调试习惯: 用分析仪抓AUX事务时,我会特别关注Source写完0x102寄存器(训练模式配置)之后,Sink有没有在合理时间内更新0x200寄存器的值。如果超过50ms还没变化,基本可以断定训练失败了。

嗯,这里要注意一个细节:有些Sink芯片做得比较“偷懒”,它返回的成功标志可能只是软件层面置位了,但物理层根本没锁定。我遇到过一块屏,0x200显示训练成功,但主链路上根本测不到数据。后来查出来是Sink的CDR电路有bug,锁定时钟但没恢复数据。所以只看寄存器是不够的,最好用示波器或者协议分析仪去抓主链路上的信号,眼见为实。

4.5 常见失败原因

T1训练失败,我总结下来90%逃不出这几个原因:

  1. HPD问题:Sink没拉高,或者拉高后不稳定。Source一直在等待HPD,不会进入训练。
  2. AUX通信失败:电气问题或者Sink没响应。用分析仪看AUX波形,检查有没有NACK。
  3. 能力不匹配:Source和Sink对链路速率或lane数的期望不一致。这个最常出现在多供应商方案中。
  4. 时序超时:Source发了训练模式,Sink超过100ms还没回复。可能是Sink太慢,也可能是CDR就没锁住。
  5. 物理层链路不干净:比如某条lane断路、短路,或者差分阻抗不对。这种问题看寄存器是找不出来的,必须上示波器。
我的排查口诀——“先看HPD,再读DPCD,不行上示波器”

T1阶段的链路建立与握手,说白了就是Source和Sink之间的一次常规面试:Source是面试官,Sink是候选人。HPD是候选人敲门,DPCD是候选人递简历,配置链路参数是面试官定岗,训练模式是技术考核——Sink通过了,大家就签合同开工了。

在实际调试中,我建议你每次做T1阶段分析时,都把AUX事务从头到尾抓一遍。从Lane 0开始,一步一步看Source和Sink的每一次握手。很多时候问题就出在某个细节上,比如寄存器写对了但读错了地址,或者Sink的回复被Source忽略。

好了,T1阶段的核心内容就这些。你把它理解成Source和Sink互相确认身份和能力的过程,带着这个思路去调试,基本上不会绕远路。