2.4.1 PCIE控制器——物理逻辑层——链路训练状态机

导读:本篇文章讲解 2.4.1 PCIE控制器——物理逻辑层——链路训练状态机,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com

该过程的主要目的是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
  • 进行链路重新训练
  • 正常工作状态

二、LTSSM状态机

LTSSM有11个状态(其中又有多个子状态),分别是Detect、Polling、Configuration、Recovery,L0、L0s、L1、L2(L3是可选的)、Hot Reset、Loopback和Disable状态。系统进行复位操作(Cold, Hot or Warm Reset)后,会自动进入Detect状态。
在这里插入图片描述
在这里插入图片描述

2.1 Detect

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

2.1.1 Quiet

充电状态,满足以下条件之一进入Active状态:

  1. pipe接口的rx_elec_idle信号得到反馈后说明,充电完成,保持状态100us后进入Active状态
  2. Quiet状态保持12ms后自动进入Active状态

2.1.2 Active

2.2 Polling

进入此状态,说明两者已经相遇了,接下来就需要打个招呼,看下是否能够正常交流。
在这个状态下,两端设备通过互相发送TS1和TS2来确认Bit Lock, Symbol Lock,Polarity Inversion等。该状态下有三个子状态,分别是Active、Compliance、Configuration状态

2.2.1 Active状态

当在Detect.Active状态时TX发送RD序列后,对端的RX接收正常,PCIe设备进入Polling.Active状态。
该状态下:

  • 进入compliance状态
  1. 检测link control2寄存器的“Enter Compilance bit”位,如果该位为1,则进入compliance状态
  2. 如果PCIe链路上任何一个lane的发送链路上连接了一个“对地阻抗为50欧”的电阻后,PCIe设备也将强制进入Compliance状态
  3. 若进入configuration状态的条件没有成立也会进入Compliance状态
  • 进入configuration状态
  1. 当“Enter Compilance bit”位不为1时,PCIe链路两端设备的发送逻辑TX需要向对端至少发送1024个TS1序列,其中TS1序列的Lane/Link number必须为PAD(即不设置Lane/Link number),如果其接收逻辑RX从全部“已被正确识别的lane”中受到了以下任意一种8个连续的报文序列后,该PCIe设备将进入Configuration状态

2.3 Configuration

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

在这里插入图片描述

2.4 L0

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

在这里插入图片描述
链路电源管理状态有L0、L0s、L1、L2和L3。只有L0状态下能够完成正常操作,其余状态都属于低功耗状态:

2.4.1 L0s

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

2.5 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.5.1 L1.1

在L1的基础上更激进的处理
在这里插入图片描述

2.5.2 L1.2

相较于L1.1更复杂。
在这里插入图片描述

2.6 Recovery

进入此状态,说明双方认为还能继续交流一下,争取达到合作共赢的最佳状态。
这是一个重新训练状态,目的是达到最佳链路状态,进入该状态比如链路异常,未达到最大速率或者最大宽度

三、link失败的原因

3.2.3 造成linking不稳定的因素

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

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/82469.html

(0)
小半的头像小半

相关推荐

极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!