PCIe link training求助
在PCIE link training : endpoint设为Gen2 X4, Root complex设为Gen2 X2.
发现endpoint的LTSSM进入了 polling.compliance状态。 而endpoint的link control 2 寄存器并没有设置过 set enter compliance。
Root complex则LTSSM停止在Polling.config 状态。
请问 endpoint此时进入polling.compliance是否是正常的呢? 如果正常的话 怎么样才能让它再退回到polling.active
有大侠能否给指点指点
感谢!
Link的问题吧。
进入Polling.Compliance的另外两个条件:
24ms timeout且
1) not enough lanes has exited electrical idle
2) any lane has received 8 ... TS with Compliance==1, Loopback==0.
抓个trace看看呗,条件2按你描述不太可能吧,有trace也很好排除。
请教个问题。
对于进入compliance的第一个条件有点疑问。
从Detect进入Polling的前提就是确定了Lane的数量。
那第一个条件的not enough Lane是什么意思呢?
因为在Polling状态下,不会再发Receiver Detection Sequence了。
也不应该再去判断退出Electrical Idle Lane的数量了。
所以不太明白这个条件是什么含义。谢谢。
在detect.active检测到receiver并不一定能保证你在Polling.active可以检测到electricl idle exit
检测receiver是通过TX端充放电然后衡量充放电时间来决定的,你很简单接一个电容,你可以检测到receiver的存在,但是你看不到electrical idle exit
你得看看连在一起的两条lane是不是都有TS1,也有可能对方发TS1你这端的phy根本就没收到也没给出electrical idle exit的信号
但是检测Elecidle 是PMA的模拟部分的功能;
PCIE的数字IP只有发出PIPETXDETECT有效后,
PMA才会去检测并上报Lane的状态。否则,PCIE IP是
无法知道Lane是否处于Electrical Idle状态。
当然,你说的是否接收到TS1序列是一种方法。
搞混了吧,以下描述基于PIPE
MAC拉TXRX_DETECT的时候PHY会去做一个receiver detection, 通过phy_status 为高时候的RxStatus来告诉MAC有没有检测到receiver
PIPE上面的另外一个信号RXELECTRICAL用于表征PHY的RXN/RXP是否处于electrical idle的状态,这个信号是没有类似receiver detection一样需要MAC给一个启动信号的,MAC是用这个信号来判断是不是electriacal idle exit的
是我把接收端和发送端的检测搞混了。
那开始说的第一个条件就是指接收端的是否处于
RXELECILDLE的Lane数有变化。
和发送端没有关系。
第一个条件展开说就是
比如你一开始在detect.active检测到有2条lane有receiver
然后进了polling.active之后24ms timeout了,但你发现可能只有1条或者0条Lane检测到electrical idle exit ( 反映到PIPE上就是RXELECTRICL一直未1 ),这个时候就会进polling.compliance
鉴于RC可以正常进polling.config,而EP进了polling.compliance,而且EP是x4,RC是x2
有以下几种可能
1. EP没有接的两条lane你们没有tie死掉,导致在detect.active的时候这两条lane上也误检测到了receiver
2. EP的RX端有问题,或者内部压根是断的,导致PIPE给出的RXELECTRICAL始终是1
小刚刚~~~解释得真详细啊
termination detected:线上有负载
electrical idle exit:线上有数据(TS)在传
说得通俗点,就是你的EP检测到对面有东西(RC),进了polling发现RC不发TS,以为RC是一个compliance test device,所以进polling.compliance了。而你的RC能收到EP发的TS1,所以进了polling.configuration,但是收不到TS2
看起来就是EP->RC的lane是工作的,但是RC->EP的lane有问题。
按理说EP只要能检测到一条lane有electrical idle exit也就够了,spec也没要求要所有检测到termination的lane都得electircal idle exit。
还是抓个trace看RC的TS发没发出来吧
好贴 re
日,有本事下班后别走
哈哈
上面的各位解释的很不错 受教了
多谢
rxstatus 0和1是正常的,7是disparity error嘛。
polling.active里TS1 handshake超时了2次(disparity太多了?)回了Detect,第三次大概是RC那头被操作系统disable了。所以没有rx elec idle break。
rxvalid一直在抖,看起来像字符定界有问题
rxvalid在跳说明收到的数据有问题。
Serdes数据没有正常传输。先做一下PRBS测试看看。
挖个坟,这个问题后来有结果了吗?
有结果了
因为phy的仿真模型里 我修改了timescale后就好了 。。。。。
PCIE不了解,但USB3比较熟悉,应该差不多的吧
进compliance也可能是超时了,例如我只挂终端电阻,没有任何握手,就会进compliance