企业办公|会员服务平台
  • 协同办公
  • 集群调度
服务热线:400-650-2790
产品展示
  • 宽带无线产品
  • 军工电子产品
  • 嵌入式系统产品
  • 物联网平台产品
行业解决方案
  • 油田
  • 港口
  • 电信
  • 交通
  • 船舶
  • 机场
  • 森林防火
  • 建筑工地
  • 跨海通信
  • 平安城市
  • 智能电网
  • 其他行业
  • FMC2.0,极致体验的融合超宽带
    随着4K视频等极致体验业务快速发展,超宽带产业正迈向千兆宽带时代。
  • FMC2.0,极致体验的融合超宽带
    随着4K视频等极致体验业务快速发展,超宽带产业正迈向千兆宽带时代。
PCIe物理层及链路训练之二
上篇文章介绍了PCIe物理层和链路训练的基础,本章将详细介绍LTSSM(链路训练和状态的状态机)的第一个子状态——Detect。链路训练主要完成链路数据速率和链路宽度协商、Bit锁定与Symbol锁定、链路编号与对齐等,Detect作为LTSSM的第一个子状态,是完成这些功能的基础。
如果Detect环节出现错误,即使可以运行的之后的子状态也还会出现其他问题,最终都会导致链路不能正常工作。因此在PCIe链路异常时,应该首先考虑是否与Detect环节有关。
Detect通过集成在发送器(Transmitter)中的接收器检测(Receiver Detection)电路实现,电路的功能在于检测接收器内的等效对地阻抗ZRX是否在40 Ω-60 Ω之间。PCIe总线支持热插拔,因此当对端设备没有插入时其ZRX为开路,则检测电路可以据此判断出对端无设备;而板内PCIe链路的芯片在复位状态或未上电等异常状态下其阻抗也会呈开路状态,。检测到对端没有设备的后续操作请见后文对Detect子状态状态机的介绍。

图1 Detect原理示意图
在位检测步骤如下:
  1. 发送器的输出保持在稳定的共模电平上;
  2. 发送器对共模输出差分对的D+和D-充电;
  3. 检测电路通过线路上电平变换的速率来判断接收器是否在位。
由图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,然后再次进行接收器在位检测。
  1. 如果检测结果与上次一致,且检测到在位的Lane可以组成1个或多个Link,则设备进入Polling状态。
  2. 否则设备进入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状态,则需要仔细排查本端设备的问题。

链路两端的设备训练状态机独立运行有相互影响,同时又常常涉及多个子状态,例如Detect、Polling,因此熟练掌握各个状态的进入条件和退出条件,再结合状态寄存器、链路信号的观察才可以找到能够帮助定位问题的线索。因此下一章节将介绍LTSSM的下一个状态Polling,敬请期待!
北京永利电子游戏网站科技股份有限公司 版权所有|
地址:北京市海淀区上地信息路1号国际创业园A栋4层 |
版权所有:北京永利电子游戏网站科技股份有限公司
XML 地图 | Sitemap 地图