4. AUX链路训练协议:训练序列格式、链路状态机、握手流程与参数协商

链路训练协议,说白了就是AUX链路建立可靠通信前的“握手”过程。我记得刚开始接触时,总觉得这些序列就是一些固定的码型,没什么特别的。直到有一次项目里,链路在低温环境下死活训练不过去,我才意识到这里面门道挺深。今天咱们就把它拆开讲透。

训练的核心目标是:让发送端和接收端在时钟频率、相位、均衡参数上达成一致。你想想看,如果两边不在同一个节奏上,数据传过来全是错码,那还怎么玩?

4.1 训练序列格式:三种序列,各有使命

AUX链路定义了三种训练序列,分别对应不同的训练阶段。我在项目中遇到过好几次因为序列格式配置错误导致链路卡住的情况,所以这一节咱们重点把格式记清楚。

序列类型 长度(UI) 码型特征 主要用途
TS1 16 重复的K28.5 + Dxx.x组合 初始连接检测、位锁定、极性检测
TS2 16 K28.5 + 特定数据码型 训练参数协商、链路状态确认
TS3 8 K28.5 + 固定码型 训练完成确认、进入正常操作模式

TS1序列——我习惯叫它“敲门砖”。它包含连续的K28.5逗号字符,接收端只要检测到这个序列,就能快速找到码字边界。嗯,这里要注意:TS1中的K28.5极性是可变的。发送端会翻转第5位来指示当前链路极性。我曾经在调试时发现,接收端老报极性错误,查了半天是发送端的极性控制逻辑写反了。

TS2序列——“谈条件”。它携带了具体的训练参数,比如期望的链路速度、参考时钟选择、均衡模式等。每个参数都被编码在特定的数据字节中。我建议你用一张表把每个字节的位段定义记下来,调试时翻起来方便。

TS3序列——“拍板确认”。它只有8个UI,很短。接收端收到连续正确TS3后,就知道发送端已经准备好进入正常数据模式了。

在项目调试中,最常见的问题是TS1序列的极性反转标记没配好,导致链路一直卡在检测状态。记住:TS1的第5位务必与PCB走线极性一致,否则接收端永远看不到正确的TS1。

4.2 链路状态机:五步走,一个不能少

链路状态机定义了训练从开始到结束的完整路径。我习惯把它想成“五步走”:

  1. 检测状态(Detect)——发送端持续发送TS1,等待接收端回应。接收端只要有信号活动,就进入下一状态。
  2. 训练状态(Train)——发送端继续发TS1,接收端开始做时钟恢复和位锁定。这是最关键的阶段,时钟恢复环必须在这个阶段锁定。
  3. 配置状态(Configure)——发送端切换为TS2,携带参数。接收端解析TS2中的参数,开始调整均衡器、时钟相位等。
  4. 锁定状态(Lock)——链路参数已经协商完成,双方开始发TS3确认。
  5. 连接状态(LinkUp)——训练正式结束,开始传输正常数据。

为什么会有这么多状态?说白了,就是防止误动作。每个状态都有超时计数器,如果在一定时间内没等到正确响应,状态机就会回退。我在项目中遇到过因为线上噪声导致状态机来回跳的情况,最后是靠调整超时阈值才搞定的。

注意:训练过程中绝不能跳过任何一个状态。有些工程师图省事,想直接配置成连接状态,结果链路速率不匹配,丢包率直接飙到50%以上。

AUX链路训练协议核心流程 Detect ① 发送TS1探测 Train ② 时钟恢复+位锁定 Configure ③ 参数协商 Lock ④ TS3确认 LinkUp ⑤ 正常数据传输 超时回退 注意:每个状态都有超时计数器,超时未收到正确响应则回退到Detect;链路正常时按箭头方向顺序执行。

4.3 握手流程:发什么、等什么、怎么确认

握手流程说白了就是“你发一句,我回一句,两边对了就继续”。咱们具体看看每个阶段的交互:

  • 发送端:连续发TS1,直到收到接收端回应的TS1。
  • 接收端:检测到TS1后,开始锁定时钟和数据边界。锁定成功后,也回发TS1。
  • 参数协商阶段:发送端转为TS2序列,接收端解析参数并用TS2回应。如果参数不匹配,接收端会回传一个带“不支持”标记的TS2。这时候发送端就要调整参数重新发。
  • 确认阶段:双方都满意了,就发TS3说“好了,过了”。连续两个正确TS3后,链路进入连接状态。

我个人习惯在调试时抓TS序列的波形,计算从TS1到TS3的完成时间。如果超过500微秒还没进入LinkUp,基本可以断定某个参数没协商好,或者时钟恢复环没锁定。

4.4 参数协商:到底谈些什么

参数协商是握手流程里的核心。我在项目里被坑得最惨的一次,是两边对“参考时钟频率”理解不一。发送端用100MHz,接收端硬配成125MHz,结果链路速率差了20%,训练当然过不去。

协商的主要参数包括:

参数名 编码位置 可选值 我踩过的坑
参考时钟频率 TS2字节1 100MHz / 125MHz / 156.25MHz 发送接收必须一致,否则CDR锁定失败
均衡模式 TS2字节2 CTLE / DFE / 自动 建议从CTLE开始,锁定后再切DFE
预加重电平 TS2字节3 0dB / 3dB / 6dB PCB走线长时加3dB,太长加6dB
数据速率 TS2字节4 2.5Gbps / 5Gbps / 8Gbps 降速重训练是常用的抗干扰手段

参数协商的过程其实就是一个“提议-确认”循环。发送端在TS2中填上自己期望的参数集,接收端逐项对比自己的支持能力。如果都能满足,就回传相同的TS2。如果有参数不匹配,接收端会修改对应字节,回传给发送端。发送端收到修改后的TS2,要么接受,要么重新提议其他值。这个来回一般不会超过3次,我见过的极限是5次。

注意:在训练过程中,链路两端必须使用相同的参考时钟频率。这是硬件决定的,软件层面的参数协商救不了。我建议在设计阶段就把参考时钟的容差算清楚,别等到调试才发现两边频率对不上。