该过程的主要目的是host在识别枚举PCIe设备之前,设备与主机在PCIe链路上都发生了什么事情,主要流程为上电后两侧根据PCIe总线协议进入LTSSM流程;该过程是一套硬件自动化的流程,链路双方自动协商速率和宽度,调节发送和接收参数,从而达到最佳信号质量。
根据信号完整性的不同,尽管Root port支持PCIe Gen3/4,但主板走线有问题,有干扰,可能只能Training出Gen2,甚至Gen1的速度来。
一、link概述
1.1 链路特征
- 初始化链路
- 数据包传输
- 链路错误恢复
- 低功耗状态恢复
- 协商链路宽度、数据传输速率、lane极性、lane翻转
- 比特锁定
- 字符锁定
- 排lane顺序
- 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状态:
- pipe接口的rx_elec_idle信号得到反馈后说明,充电完成,保持状态100us后进入Active状态
- 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状态
- 检测link control2寄存器的“Enter Compilance bit”位,如果该位为1,则进入compliance状态
- 如果PCIe链路上任何一个lane的发送链路上连接了一个“对地阻抗为50欧”的电阻后,PCIe设备也将强制进入Compliance状态
- 若进入configuration状态的条件没有成立也会进入Compliance状态
- 进入configuration状态
- 当“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机制设置
- PCIPM
RC向外设的PMSCR寄存器发起一个配置写请求,告诉外设从L0状态过度到L1状态,随后外设发出PM_Enter_L1 DLLP报文开始切换到L1状态 - ASPM
RC修改EP的APSM相关寄存器,外设就可以发起PM_Active_State_Request_L1 DLLP,与RC协商完毕,RC会发出PM_Requst_ACK DLLP
2.5.1 L1.1
2.5.2 L1.2
2.6 Recovery
进入此状态,说明双方认为还能继续交流一下,争取达到合作共赢的最佳状态。
这是一个重新训练状态,目的是达到最佳链路状态,进入该状态比如链路异常,未达到最大速率或者最大宽度
三、link失败的原因
3.2.3 造成linking不稳定的因素
- 高速串行信号质量问题
高速信号完整性问题经过示波器测量确定 - Serdes电源问题
- 时钟问题
PCIe SPEC规定RC和EP设备的时钟在同源情况下要求100M. ±600ppm ,非同源时钟要求100M. ±300ppm,因此若link时时钟时钟达不到要求可以通过跳线等方式是pcie的Host和EP端要使用同源时钟,或者尝试蒋EP的SSC功能关闭。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/82469.html