2.4.1 PCIe——物理逻辑层——链路训练状态机

该过程的主要目的是host在识别枚举PCIe设备之前,设备与主机在PCIe链路上都发生了什么事情,主要流程为上电后两侧根据PCIe总线协议进入LTSSM流程;该过程是一套硬件自动化的流程,链路双方自动协商速率和宽度,调节发送和接收参数,从而达到最佳信号质量。
根据信号完整性的不同,尽管Root port支持PCIe Gen3/4,但主板走线有问题,有干扰,可能只能Training出Gen2,甚至Gen1的速度来。

一、link概述

1.1 链路特征

  1. 初始化链路
  2. 数据包传输
  3. 链路错误恢复
  4. 低功耗状态恢复
  5. 协商链路宽度、数据传输速率、lane极性、lane翻转
  6. 比特锁定
  7. 字符锁定
  8. 排lane顺序
  9. lane相位补偿

1.2 链路过程

  • 初始状态,探测对方是否存在
  • 互发Training Sequence,实现位锁定(Bit Lock)、字符锁定(Symbol Lock,Gen1 & Gen2 Only)、块锁定(Block Lock,Gen3 Only)
  • 互发TS,确定链路宽度、速度,通道位置翻转(Lane Reversal)、信号极性翻转(Polarity Inversion)、确定链路的数据率(Data Rate),确定lane-to-lane Deskew
  • 进行链路重新训练
  • 正常工作状态

1.3 状态机编码

2.4.1 PCIe——物理逻辑层——链路训练状态机_第1张图片

二、LTSSM状态机

LTSSM有11个状态(其中又有多个子状态),分别是Detect、Polling、Configuration、Recovery,L0、L0s、L1、L2(L3是可选的)、Hot Reset、Loopback和Disable状态。系统进行复位操作(Cold, Hot or Warm Reset)后,会自动进入Detect状态。
2.4.1 PCIe——物理逻辑层——链路训练状态机_第2张图片

2.1 Detect

Detect状态是设备上电复位或者热复位后的第一个状态,也就是LTSSM的入口状态,当前设备检测到对端设备在位后,就会往下进入polling状态。检测方法是发送端改变链路电压对链路充电,根据充电时间长短来判断对端是否在位。

2.1.1 quiet (0x00)

该状态的行为:

  1. Link Status 2的eq phase 1 successful、eq phase 2 successful、eq phase 3 successful、eq complete字段为0
  2. linkup=0
  3. DL层处于DL_inactive
  4. 发送端处于Electrical idle状态

进入Active状态:

  1. 任一lane退出Electrical idle状态,即该lane的pipe_rx_elec_idle信号拉高,保持状态100us后,设备进入Active状态
  2. quiet状态保持12ms后自动进入active状态

2.1.2 active (0x01)

  • 该状态的行为:
  1. 发送端的接收端检测逻辑(receiver detect)通过发送receiver detection序列来检测对端设备接收逻辑的DC共模输入阻抗,来判断接收端是否存在,即发送端检测是否存在一个负载,其DC阻抗满足阻抗参数ZRX-DC(40~60欧姆之间)
  • 进入Polling状态
  1. TX的receiver detect逻辑检测到所有unconfigured的lane
  2. 若TX只检测到部分unconfigured的lane,则先等待12ms,向剩余未检测的unconfigured lane发送receiver detection序列,如果检测结果和第一次相同,则物理层把这些lane设为Electrical idle状态,后进入Polling;
  • 进入Detect.quiet状态
  1. receiver detect逻辑检测没有检测到任一lane
  2. 若TX只检测到部分unconfigured的lane,则先等待12ms,向剩余未检测的unconfigured lane发送receiver detection序列,如果两次结果不同,则进入quiet状态

2.2 Polling

进入此状态,说明两者已经存在,接下来就需要轮询,确认双方是否能通信。
该状态下有三个子状态,分别是Active、Compliance、Configuration状态,从Detect状态出来后先进入Polling.active状态。
在这个状态下,两端设备通过互相发送TS1和TS2来确认Bit Lock, Symbol Lock,Polarity Inversion等。
2.4.1 PCIe——物理逻辑层——链路训练状态机_第3张图片

2.2.1 active (0x02)

该状态下:

  1. TX等待DC共模电压恢复到正常水平后才会发送TS1序列。
2.2.1.1 进入compliance
  1. 若link_control2寄存器的enter_compliance字段为1,无需发送TS1序列,直接进入Polling.compliance,注意该转换要求链路双方的该字段均为1。
  2. 任一已被正确识别的lane接收的TS1序列中的compliance receive字段 ( Symbol5[4] ) 为1,或loopback字段 ( Symbol5[2] ) 为0
2.2.1.2 进入configuration
  1. 当“Enter Compilance bit”位不为1时,PCIe链路两端设备的发送逻辑TX需要向对端至少发送1024个TS1序列,双方的RX进行比特/字符锁定,其中TS1序列的Lane/Link number必须为PAD(即不设置Lane/Link number),如果其接收逻辑RX从全部“已被正确识别的lane”中受到了以下任意一种8个连续的报文序列后,该PCIe设备将进入configuration状态:
    (1)TS1,Lane/Link number为PAD,compliance receive字段 ( Symbol5[4] ) 为0
    (2)TS1,Lane/Link number为PAD,loopback字段 ( Symbol5[2] ) 为1。该序列由对端RX把接收到的序列通过TX回传给自身的RX
    (3)TS2,Lane/Link number为PAD。此时对端有可能已经进入configuration,已经在发TS2序列
  2. 24ms后若任一“已被正确识别的lane”中收到了上述三种任意一种8个连续的报文序列后,且在RX接收到第一个认可的TS1序列前,对端TX已发送1024个TS1序列,此时强制进入configuration
  3. 24ms后,已被正确识别的Lane中至少有一个lane检测到对端从Electrical Idle状态退出,则进入configuration
2.2.1.4 进入Detect

若进入Polling.compliance和Polling.configuration的状态不满足则进入Detect状态。

2.2.2 compliance (0x03)

进入该状态通常是因为链路信号质量较差,TX发送的序列不能被对端正确识别,需要在该状态下调整去重等级或均衡参数。
该状态下:

  1. Link Control 2的Transmit Margin字段,在进入该状态的192ns内对发送包产生作用,
2.2.2.1 进入active状态

2.2.3 configuration (0x04)

2.2.4 speed

调整链路得数据传送率,当链路两端得设备支持高于2.5GT/s得数据传送率时,

2.3 Configuration

进入此状态,说明两者使用的是同一种语言,交流无障碍,为了能达成合作需要进行更深入的交流。

2.4.1 PCIe——物理逻辑层——链路训练状态机_第4张图片

2.3.1 linkwidth start (0x05)

2.3.2 linkwidth accept (0x06)

2.3.3 linknum accept (0x07)

2.3.4 linknum wait (0x08)

2.3.5 complete (0x09)

2.3.6 idle (0x09)

2.4 Recovery

这是一个重新训练状态,目的是达到最佳链路状态,进入该状态比如链路异常,未达到最大速率或者最大宽度,进入此状态,说明双方认为还能继续交流一下,争取达到合作共赢的最佳状态。
2.4.1 PCIe——物理逻辑层——链路训练状态机_第5张图片

2.4.1 rcvr lock (0x0B)

2.4.2 speed (0x0C)

2.4.3 rcvr cfg (0x0D)

2.4.4 idle (0x0E)

进入该状态后,需经过四个阶段phase 0/1/2/3。
根据需要该状态可关闭,四个阶段也可选择性进入。

2.4.5 equalization Phase 0 (0x28)

2.4.6 equalization Phase 1 (0x29)

2.4.7 equalization Phase 2 (0x2A)

该过程是一个反复迭代的过程,迭代次数上限为MAX_EVAL_ITERATION

  1. controller输出PIPE_RXEQEVAL信号给PHY
  2. PHY反馈均衡器系数,并拉高PHY_STATUS
  3. controller使用反馈系数,并通过TS1序列返回调整后的系数给Downstream
  4. downstream接收并判断是否接受系数,
    如果接受,downstream同样将系数应用到自身发送端,将设置TS1的Reject Coefficient Values字段为0并发送;
    如果拒绝,将设置TS1的Reject Coefficient Values字段为1,并发送
  5. upstream接收TS1,并判断Reject Coefficient Values字段,
    如果为1,设置PIPE_INVALIDREQUEST为1,后再次拉高PIPE_RXEQEVAL进入步骤1开始下一次迭代;
    如果为0,设置 PIPE_INVALIDREQUEST为0,系数评估成功,后继续步骤1进行下一次迭代
  6. 当PHY反序三个均衡器系数为00,00,00时,迭代结束;否则继续迭代,直到迭代次数上限。

2.4.8 equalization Phase 3 (0x2B)

2.5 L0 (0x10)

进入此状态后,意味着双方交流完成了,可以开始愉快合作了。也就是可以进行DLLP和TLP通信了。
第一次进入的时候是GEN1的状态,但期望的是最大协商能力的L0状态,因此就需要再次重新交流一下,达到最佳合作状态,也就是跳入Recovery状态。

2.4.1 PCIe——物理逻辑层——链路训练状态机_第6张图片
链路电源管理状态有L0、L0s、L1、L2和L3。只有L0状态下能够完成正常操作,其余状态都属于低功耗状态:

2.5.1 L0s

进入L0状态后,如果没有事务发生,会进去一种低恢复延迟、节能的“standby”状态
PCIe控制器物理层会提供一种机制快速地切换到 L0s 状态

2.6 L1

高恢复延迟,低功耗的“standby”状态。当所有TLP包传输结束即可进入该状态。
该状态是一种可选状态,需要设备的配置空间寄存器支持。
协议规定该状态下有L1.1和L1.2状态两个子状态,L1.2相较于L1.1没有共模电压。表示是否进入该状态可通过sideband信号CLKREQ#,该信号是一个低有效信号,若拉低则表示退出L1状态。

  • 配置方法:
    可通过ASPM机制和PCIPM机制设置
  1. PCIPM
    RC向外设的PMSCR寄存器发起一个配置写请求,告诉外设从L0状态过度到L1状态,随后外设发出PM_Enter_L1 DLLP报文开始切换到L1状态
  2. ASPM
    RC修改EP的APSM相关寄存器,外设就可以发起PM_Active_State_Request_L1 DLLP,与RC协商完毕,RC会发出PM_Requst_ACK DLLP

2.6.1 L1.1

在L1的基础上更激进的处理
2.4.1 PCIe——物理逻辑层——链路训练状态机_第7张图片

2.6.2 L1.2

相较于L1.1更复杂。
2.4.1 PCIe——物理逻辑层——链路训练状态机_第8张图片

三、link失败的原因

3.2.3 造成linking不稳定的因素

  1. 高速串行信号质量问题
    高速信号完整性问题经过示波器测量确定
  2. Serdes电源问题
  3. 时钟问题
    PCIe SPEC规定RC和EP设备的时钟在同源情况下要求100M. ±600ppm ,非同源时钟要求100M. ±300ppm,因此若link时时钟时钟达不到要求可以通过跳线等方式是pcie的Host和EP端要使用同源时钟,或者尝试蒋EP的SSC功能关闭。

你可能感兴趣的:(#,PCIe,pci-e)