PCIE 设备在位检测机理

PCIE Detect原理
Detect通过集成在发送器(Transmitter)中的接收器检测(Receiver Detection)电路实现,电路的功能在于检测接收器内的等效对地阻抗ZRX是否在40 Ω-60 Ω之间。PCIe总线支持热插拔,因此当对端设备没有插入时其ZRX为开路,则检测电路可以据此判断出对端无设备;而板内PCIe链路的芯片在复位状态或未上电等异常状态下其阻抗也会呈开路状态,。检测到对端没有设备的后续操作请见后文对Detect子状态状态机的介绍。
在这里插入图片描述
图1 Detect原理示意图
在位检测步骤如下:
发送器的输出保持在稳定的共模电平上;
发送器对共模输出差分对的D+和D-充电;
检测电路通过线路上电平变换的速率来判断接收器是否在位。
由图1可知若对端设备不在位,则CTX之后的电路不存在,此时的充电时间常数为ZTX (CTX + Cpad + Cinterconnect),其中CTX为发送器内阻,约为50Ω,Cpad为芯片引脚的寄生电容,Cinterconnect为链路的寄生电容,这两个参数都极小(pF级别)因而此时充电时间常数较低。
若对端设备在位,则充电时间常数约为ZTX (CTX + Cpad + Cinterconnect),其中CTX为耦合电容的容值,由表1可知其取值在75nF至265nF,远大于对端设备不在位时的两个电容参数(1nF=1000pF)。因而在位时充电时间常数较大。
表1 PCIe耦合电容要求
在这里插入图片描述
在实际的电气信号中,充电时间常数的测量是通过发送器输出共模的脉冲信号,当对端接收器不在位时发送器可以检测到脉冲信号的幅度几乎没有衰减;而当对端接收器在位时,脉冲信号需要对链路的耦合电容充电,因而幅度会明显降低。接收器在位检测电路通过脉冲幅度来判断充电时间常数的大小,进而得出接收器是否在位的结论。
Detect子状态机
Detect状态主要有两个子状态Detect.Quiet、Detect.Active,其子状态机框图如图2所示。
在这里插入图片描述
图2 Detect子状态机框图
1、Detect.Quiet
当设备冷启动、复位或从Polling、L2等其他状态进入Detect状态时,首先进入Detect.Quiet状态。
在此状态下,发送器处在电气闲(Electrical Idle)状态。电气闲状态是指发送器的D+和D-保持在同一恒定电平下,主要用于节点状态和非活动状态。发送器和对端的接收器之间通过电容串联耦合,因此在电气闲状态下接收器端差分信号两端都是0V电平。
Detect.Quiet在12ms超时后会进入下一子状态Detect.Active,或者检测到退出电气闲也会进入到Detect.Active状态。
2、Detect.Active
进入Detect.Active状态后立即进行接收器在位检测,如果所有的未配置Lane都检测到了接收器在位,则设备进入Polling状态;如果所有Lane都没有检测到接收器在位则进入Detect.Quiet状态。一个Lane指的是一组发送差分信号和一组接收差分信号。
其余情况为至少有一个Lane检测到了设备在位,但也有未配置的Lane未检测到接收器在位。此情况下回首先等待12ms,然后再次进行接收器在位检测。
如果检测结果与上次一致,且检测到在位的Lane可以组成1个或多个Link,则设备进入Polling状态。
否则设备进入Detect. Quiet。
那么如何判断能否组成Link呢?
这主要看设备的特性。Link指的是设备到设备的一个链接,一个Link可以是X4链路宽度,则指的是4个Lane组成该链路。如果一个设备有4个Lane,那么一种可能其只支持1个Link,即只有一个控制器,此时若只有Lane 0检测到接收器在位,那么可以形成一个X1宽度的Link,而若只有Lane 1检测到接收器在位,那么久无法形成Link,设备就会退回到Detect.Quiet子状态。如果这个设备支持4个Link,那么设备就可以协商成4个X1的链路,此时只有Lane 1检测到接收器在位也可行形成1个Link,设备会进入Polling状态。
链路两端的设备LTSSM是独立运行的,所以有时两端设备所处的状态会出现不一致的现象。例如上文的例子,链路两侧的设备都是X4且都检测到了Lane 1接收器在位,但是一个只支持1个Link而另一个可以支持4个Link,此时现象回事一个回到Detect.Quiet子状态而另一个会进入Polling状态。两个设备的训练状态机会独立运行同时又互相影响,因此常常需要从两个角度去分析才能找到定位问题的线索。
Detect可能遇到的问题
由于各种原因导致连接断开或连接不良会导致Detect出现异常,使链路卡在Detect状态。体现到链路上的现象可能是发送信号线上都是0V电平或者24ms间隔的脉冲信号。24ms是由Detect.Quiet子状态的12ms超时和Detect.Active状态中等待12ms组成。
1、物理连接问题
这种情况多数是电容失效导致的,失效后短路、断路或容值偏移都会导致检测不到对端在位;另外连接器装配、芯片焊接不良也有可能出现此现象。
2、设置问题
对端设备处在复位或断电状态下,或是PCIe控制器未配置或使能,则会检测不到接收器在位。
在FPGA使用PCIe IP核的情况下,大量配置需要编程人员调整。其中检测接收器在位的阈值寄存器在默认值不合理的情况下则会导致误判为接收器不在位。默认值是经过大量验证的,一般情况下不会出现这种情况。
当出现链路Detect相关问题时,首先应该排查对端设备电源、复位和时钟状态,其次排查链路是否有失效器件或连接器问题。当难以判断是可以尝试在耦合电容连接接收器的一侧接50Ω电阻到GND,若此时设备可以通过Detect到达Polling状态或之后的状态,则基本可以确定问题在对端设备或是耦合电容之后的链路中,如图3所示。
在这里插入图片描述
图3 焊接电阻示意图
在耦合电容后接电阻到GND后,可以保证在位检测电路可以正常检测到接收器在位,因此若设备正常则会进入到下一个状态。反之如果操作之后还是卡在Detect状态,则需要仔细排查本端设备的问题。

  • 13
    点赞
  • 118
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值