个人主页:highman110
作者简介:一名硬件工程师,持续学习,不断记录,保持思考,输出干货内容
参考书籍:《PCI.EXPRESS系统体系结构标准教材 Mindshare》
目录
概览
检测
轮询
配置
L0
恢复
L0s
L1
L2
回环
禁用
Hot复位
LTSSM由11个定级状态所组成:检测(Detect)、轮询(Polling)、配置(Configuration)、恢复(Recovery)、L0、LOs、L1、L2、Hot复位、回环(Loopback)和禁用(Disable)。这些状态可分为以下5类:
1.链路定向状态。
2.链路重新定向状态。
3.电源管理状态。
4.活动电源管理状态。
5.其他状态。
从任何类型的复位状态退出后,LTSSM流通过以下步骤重新训练:检测>轮询>配置>L0。其他状态间的转换大家看图中的箭头理解,这里暂不多提。
下面简单描述一下这11种状态:
这是复位后的初始状态。在该状态中,设备检测链路远端连接的设备是否存在以及使用了多少条lane资源。也可从几个其他LTSSM状态中进入检测状态,大家可以看上面状态机图的箭头。Detect状态主要包含了两个子状态:Detect.Quiet和Detect.Active.
(1) 检测.静止(Detect.Quiet)子状态
进入:从基本复位或Hot复位进入,也可从L1、回环、禁用、轮询、配置和恢复状态进入。
在检测.静止期间:发送器处于电气空闲状态。在将链路置于电气空闲状态前不必发送电气空闲有序集;发送器驱动一个DC共模电压(不必满足0~3.6V的规范);初始化2.5Gbit/s(第一代)的传输速率(不需要通过TS1和TS2有序集来通告链路速率);数据链路层发送LinkUp=0。
退出到检测.活动:12ms超时后(处于检测.静止状态超过12ms)或当链路退出电气空闲状态时退到该状态。
(2) 检测.活动(Detect.Active)子状态
从检测.静止状态进入:12ms后或当链路退出电气空闲状态时进入该状态。
在检测.活动期间:发送器设备检测链路的所有通道上是否连接了接收器。发送器在所有通道上启动一个稳定的DC共模电压。该电压可以是VbD、GND,或者这两个值之间的其他稳定电压。然后发送器驱动一个与当前值不同的DC共模电压。根据D+和D-向新电压的线路充电速率来检测接收器。在设计时,设备就被设计成知道更改电压所需的充电时间(基于假定的线路阻抗和在没有接收器终端情况下的发送器阻抗)。如果在另一端连接了接收器,充电时间将比没有连接接收器时要长。
退出到检测.静止:出现在未检测到接收器时。只要未连接接收器,就每12ms重复一次检测.静止到检测.活动的循环。如果在所有已配置的通道上检测到接收器,则下一个状态是轮询。
退出到轮询:如果设备检测到已连接的接收器则退出到轮询状态。现在该设备必须驱动一个0~3.6V的VTX-CM-DC规范内的DC共模电压。
特殊情况:如果并非所有的设备通道都连接到接收器。例如,一台x4的设备连接到一台x2的设备。在这种情况下,设备会检测某些通道(两条通道)连接到接收器,而其他则没有。那些连接到接收器的通道属于LTSSM,而那些未连接到接收器的通道有两种选择:
a.那些未连接到接收器的通道属于另一个LTSSM(如果该通道可作为分离的链路运行),这些LTSSM继续重复上述接收器检测序列(就是剩下的链路继续检测)。
b.那些未连接到接收器并且无法成为另一条链路或LTSSM一部分的通道必须将无连
接的通道转换为电气空闲状态(就是剩下的链路进入电气空闲)。
在链路训练和初始化过程中,设备将在此状态首次进行PLP(如TS1/TS2有序集)交互。在轮询状态期间完成以下训练内容:
比特锁定;
符号锁定;
通道极性;
通道数据速率;
另外一致性测试也出现在该状态中:
在一致性测试期间,发送器输出指定的一致性测试码型。测试设备使用该码型来验证所有的电压、噪声的发射和训练规范是否处于误差范围之内。在轮询状态期间,设备发送TS1和TS2有序集并响应接收到的TS1和TS2有序集。通过交换TS1和TS2有序集中的速率ID字段(支持的最高速率)来通告对更高比特速率的支持。
下面按照上图的箭头,从左往右简单描述一下子状态间的转换。
1、当检测完成,发送器在所有检测到接收器的通道上驱动DC共模电压后,将进入轮询.活动状态,在这个状态下,两台已连接设备的发送器在所有连接的通道上最少发送1024个通道和链路号字段中使用PAD符号填充的连续的TS1有序集。1024个TS1有序集总计用64us的时间来实现比特和符号锁定。
2、如果在轮询.活动状态检测到有任意一条lane从未检测到从电气空闲退出,那么就退出到轮询.一致状态(一条通道上的被动测试负载,如电阻器,即可强制所有通道进入轮询.一致状态),当然,在轮询.一致状态如果所有lane都退出了电气空闲,将进入到轮询.活动状态继续进行TS1交互。
3、如果在轮询.活动状态任意通道上都没有接收到链路和通道号字段设置为PAD符号的TS1或TS2有序集,则退出到检测状态。
4、如果在轮询.活动状态下,设备在所有通道上接收到8个连续的通道和链路号字段设置为PAD符号的TS1或TS2有序集(或者其补码,由于极性倒置所致),或者24ms超时后,设备在任意通道(在检测状态期间已检测到连接了接收器)上接收到8个连续的TS1或TS2有序集(或者其补码),并且所有通道都检测电气空闲的退出,将进入到轮询.配置状态。
5、在轮询.配置期间如果接收器看到TS1/TS2有序集的补码(对于TS1有序集而言接收的是D21.5而不是D10.2,对于TS2有序集而言接收的是D26.5而不是D5.2),将进行极性反转。
6、在Polling状态机中,还有一个Polling.Speed子状态,该状态的主要作用是调整PCIe链路使用的数据传送率。当一个PCIe链路两端的设备可以支持高于2.5GT/s的数据传送率时,可以首先进入该状态,改变PCIe链路的数据传送率。在许多PCIe设备的具体实现中,并没有使用Polling.Speed子状态。此时在PCIe链路的训练过程中,将缺省使用2.5GT/s的数据传送率。此时LTSSM状态机将首先沿着Detect→Polling→Configuration→L0的路径进入L0状态,并使用2.5GT/s的数据传送率,即便PCle链路两端的设备都支持更高的数据传送率。当PCIe设备改变数据传送率时,需要在L0状态,通过向对端设备发送TS1序列(其speed_change位为1),使PCIe链路两端设备进入Recovery状态后,才能改变缺省使用的数据传送率。所以上图中有个叉。
在配置状态期间完成以下训练内容:
链路宽度;
链路号;
通道反转;
极性倒置(如果需要);
执行通道到通道相位补偿。
发送器和接收器以协商好的数据速率进行通信。在该状态期间,可以禁用加扰、进人禁用和回环状态,并建立从L0s状态转换到L0状态所必需的FTS有序集的数目。
这个状态重要的是链路宽度和lane number的确认,如上图,两端先互相发送带有link number字段和lane number字段的TS1完成link number和lane number accept,然后发送TS2对之前设定的Link/Lane number进行确认,确认无误就可以进入L0了。
这是链路正常、完全活动的状态,在该状态期间发送并接收TLP、DLLP和PLP。如果需要切换到高于 2.5 GT/s 的速度传输,则需要进入 Recovery 状态进行链路重训练(Re-Training)。
PCIe 链路需要进行重训练(Re-Training)时会进入该状态,可能的原因有:
1、PCIe链路信号发现error,需要调整Bit Lock和Symbol Lock;
2、从L0s或者L1低功耗电源状态退出;
3、Speed Change。因为第一次进入L0状态时,速率是2.5GT/s. 当需要进行速率调整5.0GT/s或者8.0GT/s时,需要进入Recovery状态进行Speed Change. 这个阶段,Bit Lock、Symbol Lock等都需要重新获取;
4、需要重新调整PCIe链路的Width;
5、软件触发Re-Training操作;
6、仅在Gen3和Gen4,需要重新进行Equalization。
在 Recovery状态,重新建立Bit Lock和Symbol/Block Lock的过程与Polling状态相似,但是要比Polling状态花的时间更短。
这是ASPM(Active State Power Management)机制提供的第 1 级低功耗的、活动电源管理状态。从L0s状态转换回L0状态只需很短的时间(因为LTSSM不必经过恢复状态)。当链路处于L0状态时,在发送器发送并且远程接收器接收了电气空闲有序集EIOS后即进入该状态。从L0s状态退出到L0状态涉及到发送和接收FTS有序集。从L0s退出到L0时,必须执行通道到通道的相位补偿,并重新建立比特和符号锁定。
这是是 ASPM(Active State Power Management)机制提供的第 2 级低功耗状态,比L0s更低。L1退出延迟(通过恢复状态)比L0s退出延迟的时间要长。想要进入 L1 状态,位于PCIe总线两端的设备需要进行协商,然后同时进入L1状态。两种可能的方式如下:
1、ASPM机制下硬件自动切换。当一端设备的硬件发现没有TLP或者DLLP需要再发送的时候,就会自动和另一端进行协商进入L1状态。如果对端设备同意,则二者同时进入L1状态;如果对端设备拒绝,则本端会进入 L0s 状态。协商过程就是发EIOS,如果PCIe设备的接收逻辑RX从任意Lane中收到1个或者2个EIOS序列后,该设备将进入到L1或者L2状态。当PCIe链路工作在2.5GT/s时,需要发送1个EIOS序列;如果工作在5GT/s时,需要发送2个EIOS序列。注意,只有下游设备(EP或者Switch的上游端口)可以主动“进入L1状态”,而上游设(RC或者Switch的下游端口)必须与下游设备进行协商后才能进入L1状态。
2、电源管理软件通过命令将设备配置为低功耗状态(D1,D2,D3hot)。此时Upstream Port和Downstream Port上的设备同时进入L1状态。
处于L1状态时,PCIe设备的发送逻辑TX仍然需要维持一个相对较低的DC共模电压。
这是最低的电源状态。大多数发送器和接收器逻辑都已关闭(除了接收器终端外,其必须加电以使接收器处于低阻抗状态)。尽管Vaux电源可用,但是并不保证主电源
和时钟。这种状态可以通过系统唤醒事件来唤醒。
该状态用做测试和故障隔离状态。可在每条通道上或在整个所配置的链路上进行测试。回环主(Loopback Master)设备向回环从(Loopback Slave)设备发送TS1有序集,其中的TS1训练控制字段内设置了回环比特。回环从设备接收到两个连续的、设置有回环比特的TS1有序集后,就进入回环状态。
该状态允许禁用已配置的链路(如意外删除了远程设备)。在该状态中,发送器驱动器处于高阻抗状态,接收器已启用并且处于低阻抗状态。软件可命令设备进入禁用状态,方法是设置链路控制寄存器中的禁用比特。然后该设备发送16个在TS1训练控制字段中设置了禁用链路比特的TS1有序集。当已连接的接收器接收到设置有禁用链路比特的TS1有序集时,就禁用该接收器。
进人该状态的情况有:当设备的较高层控制进入该状态,或者当设备接收到两个连续的TS1有序集,并且该有序集的TS1训练控制字段中设置了Hot复位比特。