PCIe Link初始化和Training相关配置寄存器
许多与链路初始化和训练相关的配置寄存器在前一篇文章描述其内容时已经展示过,但在这里总结一下。
Link Capabilities Register
链路功能寄存器如图 14-68 所示,其每个位字段将在后面的小节中描述。

Max Link Speed [3:0]
这表示此端口的最大链路速度,并以指针的形式给出,指向链路功能 2 寄存器中“支持的链路速度向量”中与最大链路速度对应的位位置。定义的编码如下:
• 0001b ‐ 支持的链路速度vector字段位 0
• 0010b ‐ 支持的链路速度vector字段位 1
• 0011b ‐ 支持的链路速度vector字段位 2
• 0100b ‐ 支持的链路速度vector字段位 3
• 0101b ‐ 支持的链路速度vector字段位 4
• 0110b ‐ 支持的链路速度vector字段位 5
• 0111b ‐ 支持的链路速度vector字段位 6
所有其他编码均保留。共享上行端口的多功能设备必须在所有功能中在此字段中报告相同的值。此寄存器为只读寄存器。
Maximum Link Width[9:4]
此字段指示 PCI Express 链路的最大宽度。定义的值如下:
Link Capabilities 2 Register
链路功能寄存器如图 14-68 所示,其中显示了链路功能寄存器中的最大链路速度字段指向的“支持链路速度”向量。该字段的值如下:

Link Status Register
链路状态寄存器如图 14‐70 所示。
Current Link Speed[3:0]
此只读字段指示当前链路速度。当链路首次训练至 L0 时,速度始终为 2.5 GT/s。之后,如果有更高的常用支持速度可用,LTSSM(Link Training and Status State Machine) 将进入恢复模式并尝试更改为该速度。此字段的值与链路功能寄存器中显示的最大链路速度编码相同:
• 0001b - 支持的链路速度Vector字段位 0
• 0010b - 支持的链路速度Vector字段位 1
• 0011b - 支持的链路速度Vector字段位 2
• 0100b - 支持的链路速度Vector字段位 3
• 0101b - 支持的链路速度Vector字段位 4
• 0110b - 支持的链路速度Vector字段位 5
• 0111b - 支持的链路速度Vector字段位 6
所有其他编码均保留。
请注意,当链路未启动 (LinkUp = 0b) 时,此字段的值未定义。
Negotiated Link Width[9:4]
此字段指示链路宽度协商的结果。有七种可能的宽度,所有其他编码均保留。定义的编码如下:
• 00 0001b:代表 x1。
• 00 0010b:代表 x2。
• 00 0100b:代表 x4。
• 00 1000b:代表 x8。
• 00 1100b:代表 x12。
• 01 0000b:代表 x16。
• 10 0000b:代表 x32。
所有其他编码均保留。请注意,当链路未启动(LinkUp = 0b)时,此字段的值未定义。
Undefined[10]
此位目前未定义,在早期规范版本中,当发生链路训练错误时,硬件会将其置位。当 LTSSM 成功进入 L0 状态时,该位会被清除。规范规定,软件可以向此位写入任意值,但必须忽略从该位读取的任何值。
Link Training[11]
此只读位指示 LTSSM 正在训练中。从技术角度来看,这意味着 LTSSM 处于配置或恢复状态,或者“重新训练链路”位已写入 1b,但链路训练尚未开始。当 LTSSM 退出配置或恢复状态时,此位由硬件清零。由于在链路训练过程中,此位必须对软件可见,因此它仅对面向下游的端口有意义。因此,此位不适用,并保留用于端点、桥接上游端口和switch上游端口。对于这些端口,此位必须硬连线为 0b。

Link Control Register
链路控制寄存器如图 14-71 所示,其中有三个字段值得我们关注。
Link Disable
Retrain Link
Extended Synch
由于会影响训练,此位用于在两种情况下大幅延长所需时间,目的是帮助速度较慢的外部测试或分析硬件在恢复正常通信之前与链路同步。其中一种情况是退出 L0 状态时,设置此位会强制在进入 L0 状态之前传输 4096 个 FTS。另一种情况是在进入 Recovery.RcvrCfg 状态之前的恢复状态下,会强制传输 1024 个 TS1。

本文来自博客园,作者:闹闹爸爸,转载请注明原文链接:https://www.cnblogs.com/wanglouxiaozi/p/18958099

浙公网安备 33010602011771号