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上还没数据,但电气特性要先对。差分阻抗、共模电压,这些基本项目必须过。
- HPD电平:3.0V ~ 3.6V,稳定无抖动
- AUX CH差分阻抗:90Ω ~ 110Ω
- 主链路lane共模电压:0V ± 50mV
4.2 链路训练流程
信号状态确认OK后,Source就开始主动发起训练了。流程其实不复杂,我画了张图你看一下就明白了:
这张图的逻辑其实很直白。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]表示是否支持增强帧 |
4.4 握手成功条件
Source完成配置后,会等Sink的回复。Sink需要在规定时间内(eDP标准规定是100ms以内)通过DPCD寄存器0x200(SINK_STATUS)告诉Source训练结果。
握手成功的标志就是:
- 时钟恢复锁定:每个lane的CDR都锁定了
- 符号对齐:lane间的数据符号已经对齐
- 通道均衡完成:各个lane的眼图都打开了
嗯,这里要注意一个细节:有些Sink芯片做得比较“偷懒”,它返回的成功标志可能只是软件层面置位了,但物理层根本没锁定。我遇到过一块屏,0x200显示训练成功,但主链路上根本测不到数据。后来查出来是Sink的CDR电路有bug,锁定时钟但没恢复数据。所以只看寄存器是不够的,最好用示波器或者协议分析仪去抓主链路上的信号,眼见为实。
4.5 常见失败原因
T1训练失败,我总结下来90%逃不出这几个原因:
- HPD问题:Sink没拉高,或者拉高后不稳定。Source一直在等待HPD,不会进入训练。
- AUX通信失败:电气问题或者Sink没响应。用分析仪看AUX波形,检查有没有NACK。
- 能力不匹配:Source和Sink对链路速率或lane数的期望不一致。这个最常出现在多供应商方案中。
- 时序超时:Source发了训练模式,Sink超过100ms还没回复。可能是Sink太慢,也可能是CDR就没锁住。
- 物理层链路不干净:比如某条lane断路、短路,或者差分阻抗不对。这种问题看寄存器是找不出来的,必须上示波器。
T1阶段的链路建立与握手,说白了就是Source和Sink之间的一次常规面试:Source是面试官,Sink是候选人。HPD是候选人敲门,DPCD是候选人递简历,配置链路参数是面试官定岗,训练模式是技术考核——Sink通过了,大家就签合同开工了。
在实际调试中,我建议你每次做T1阶段分析时,都把AUX事务从头到尾抓一遍。从Lane 0开始,一步一步看Source和Sink的每一次握手。很多时候问题就出在某个细节上,比如寄存器写对了但读错了地址,或者Sink的回复被Source忽略。
好了,T1阶段的核心内容就这些。你把它理解成Source和Sink互相确认身份和能力的过程,带着这个思路去调试,基本上不会绕远路。