前言
之前,在芯片原厂搞过这个,把知道的分享给大家(其实就是帮大家翻译下协议!!)
介绍
DisplayPort(DP-1.2)的Clock Recovery(CR)是TX和RX建立同步的第一道训练。
目的,为了让RX从字符串中恢复出时钟(DP接口其实就相当于是一个serdes),只有正确恢复出时钟(即RX和TX的时钟保持同步),才能从数据流中正确锁定字符,恢复出正确的数据。
可以看下图,这是DP-1.2协议中的CR training的流程图。
CR training流程
首先,CR训练发送的是D10.2数据符号(训练pattern:TPS1),而且训练时必须禁用加扰(需要注意)。发射器必须在电压摆幅为0,预加重为0(记为:(0,0)挡位)的挡位。
开始发送训练pattern之前,需要设置好RX和TX的lane数和link速率。
S1:配置RX设备的TRAINING_PATTERN_SET位(DPCD地址102h),设置训练的pattern为TPS1(值为21h);并将RX当前训练的挡位设置为0(即:电压摆幅为0,预加重为0(0,0)),其配置对应TRAINING_LANEx_SET字节(DPCD寄存器的103h〜106h)。
注意,如果RX的CDR(时钟和数据恢复)单元已实现并保持频率锁定时,RX才会在DPCD链路状态字段中设置LANEx_CR_DONE位,将其值设为1。
S2:TX开始发送TPS1训练pattern,必须至少等待TRAINING_AUX_RD_INTERVAL中指定的时间后,才能读取接收器DPCD寄存器的LANEx_CR_DONE位的值。(CDR恢复时钟需要一定的时间,所以要等待TRAINING_AUX_RD_INTERVAL时间后,才能去读LANEx_CR_DONE位的值)
如果,读出所有lane的LANEx_CR_DONE的值都为1,则CR训练成功,结束CR训练。
如果,所有lane的LANEx_CR_DONE位的值,在连续读取了4次后,依然不全为1(即:如果4条lane,只有3条lane为1,也叫失败),则CR锁定失败,开始步骤S3。
S3:CR锁定失败,RX将会自动将所有的LANEx_CR_DONE的值保持清零。同时RX会将合适训练的差分电压摆幅和预加重电平的挡位(假设为:(2,3)挡位),更新到ADJUST_REQUEST_LANEx_x字节中。
S4:接着,将ADJUST_REQUEST_LANEx_x字节的差分电压摆幅和预加重电平的挡位((2,3)挡位),更新到RX的TRAINING_LANEx_SET字节中。
然后,重新从步骤S2开始,如果重复读取4次后,CR还是没有锁定,则CR训练失败,接着需要降低link速率,去重新开始训练。
注意,大部分的IP和协议的描述基本一致,让我们去读取ADJUST_REQUEST_LANEx_x中差分电压摆幅和预加重电平的值,然后按这个挡位值重新开始训练。如果训练成功则成功,失败就需要降低link速率重新开始训练。从我的实际经验来看,这个流程其实并不适用。
我们从(0,0)挡位开始训练,如果失败,我们将采用ADJUST_REQUEST_LANE的挡位(2,3),其实(2,3)挡位也不是能保证百分白成功(我的经验来看,基本很难成功,因为每次更新的值都不一样),而且很多显示器不是很正规,因此靠这个满足兼容性测试完全不够。
因此,如果(0,0)挡位失败了,建议切到(0,1)挡位开始下一次训练,最好遍历所有的挡位后,才采取降低link速率开始下一次训练。
不要因为ADJUST_REQUEST_LANE的挡位训练不通过,就盲目降低速率去训练。
S5:当遍历所有档位后,CR还是没有锁定,则需要降低link速率去训练。重新训练,则重新从步骤S2开始训练。
S6:当link速率降低到RBR(1.62Gbps)后,CR还是没有锁定,则需要减少lane数,从新开始训练(这个步骤是DP-1.4以上的内容,不再展开,都是从步骤S2重复开始)
S7:一旦所有通道的LANEx_CR_DONE位被置起(值为1),则CR训练成功。接收器将会继续进行下一个阶段的训练,即 Channel Equalization (EQ训练)。
CR训练注意事项
1. 训练时,TX和RX必须禁用加扰。
2. 训练时,TX和RX的训练pattern必须保持一致。
3. 训练时,TX和RX的lane数和link速率必须保持一致。
4. 训练时,TX和RX的训练挡位必须保持一致。
EDP训练注意
每个EDP屏的lane数和link速率,默认是固定的。因此只需要训练不同的挡位即可,不需要去改动lane数和link速率。