4. Polling状态(轮询):Polling.Active子状态、Polling.Compliance子状态、发送TS1/TS2训练序列

Polling状态是PCIe链路训练状态机中继Detect(检测)之后的第二个主要状态。当链路两端成功检测到对端存在后,即进入Polling状态。该状态的核心目标是:建立比特锁定、符号锁定,并完成初始的链路宽度协商与速率协商准备。Polling状态包含两个关键子状态:Polling.Active(主动轮询)和Polling.Compliance(合规性测试)。

关键概念: Polling状态是链路从“物理存在”迈向“逻辑通信”的第一步。在此阶段,链路两端开始交换训练序列(TS1/TS2),以同步时钟、对齐数据,并为后续的速率协商(Configuration状态)奠定基础。

4.1 Polling.Active子状态:主动轮询与链路初始化

Polling.Active是Polling状态的主要工作模式。进入此子状态后,端口开始执行以下关键操作:

  1. 发送TS1训练序列: 端口在链路的每个活动通道(Lane)上连续发送TS1有序集。TS1包含链路状态信息、速率标识符和训练控制位。
  2. 等待比特锁定与符号锁定: 接收端必须从接收到的串行数据流中恢复时钟(CDR),实现比特锁定,然后识别出10位符号边界,实现符号锁定。
  3. 接收并识别TS1: 成功锁定后,接收端开始解析收到的TS1序列,确认对端也处于Polling状态。
  4. 切换至发送TS2: 当端口连续收到8个有效的TS1序列后,停止发送TS1,转而开始发送TS2训练序列。TS2标志着链路准备进入下一阶段。
  5. 退出Polling.Active: 当端口连续收到8个有效的TS2序列后,即认为链路两端已达成一致,退出Polling.Active,进入Configuration(配置)状态。
设计要点: TS1和TS2序列的交换过程是“握手”的体现。从TS1切换到TS2的时机由硬件状态机自动控制,无需软件干预。如果长时间无法收到有效的TS1或TS2,状态机会超时并可能回退到Detect状态或进入Recovery状态。

Polling.Active状态机流程(SVG)

Polling.Active 子状态机流程 Polling.Active 子状态机流程 进入 Polling.Active 发送 TS1 序列 等待比特/符号锁定 收到8个有效TS1 发送 TS2 序列 关键判定条件 • 连续收到8个TS1 • 连续收到8个TS2 • 超时回退机制

4.2 Polling.Compliance子状态:合规性测试模式

Polling.Compliance是一个特殊的测试子状态,主要用于信号完整性测试和一致性验证。它并非链路正常训练过程中的必经之路,而是由特定条件触发的测试模式。

特性 Polling.Active Polling.Compliance
触发条件 Detect状态完成后自动进入 检测到对端未就绪或进入测试模式
发送内容 TS1 → TS2 训练序列 固定的Compliance Pattern(合规性码型)
主要目的 链路初始化与速率协商 信号质量测试与眼图测量
退出条件 收到8个TS2后进入Configuration 超时或收到退出命令
对端响应 必须响应TS1/TS2 通常不响应,仅发送测试码型
硬件设计注意: Polling.Compliance模式通常用于实验室测试和认证。在正常产品中,该模式不应被意外触发。设计时需确保Compliance模式的进入条件严格受控,避免影响正常链路训练。

4.3 TS1/TS2训练序列:结构与功能

TS1和TS2是PCIe链路训练中最核心的有序集(Ordered Set)。它们由特定的符号序列组成,用于在链路两端传递状态信息和控制指令。

TS1/TS2序列结构

一个标准的TS1或TS2序列由16个符号组成,每个符号为10位(8b/10b编码后)。其基本结构如下:

TS1/TS2 序列格式(16个符号):
符号0: COM (K28.5) - 逗号字符,用于符号对齐
符号1: 链路编号 (Link Number)
符号2: 通道编号 (Lane Number)
符号3: 速率标识符 (Rate ID) - 指示支持的速率
符号4: 训练控制 (Training Control) - 包含各种控制位
符号5-15: 保留/特定数据

TS1与TS2的关键区别

特征 TS1 TS2
使用阶段 Polling.Active 初始阶段 Polling.Active 结束阶段
控制位含义 指示链路正在初始化 指示链路准备进入下一状态
速率协商 携带本端支持的速率信息 确认已协商的速率
链路宽度 用于发现和协商宽度 确认最终宽度

TS1/TS2在Polling状态中的交互(SVG)

TS1/TS2 在Polling状态中的交互 TS1/TS2 在Polling状态中的交互 设备A (上游) 设备B (下游) TS1 (速率标识, 链路号) TS1 (速率标识, 链路号) 双方收到8个TS1 TS2 (确认速率与宽度) TS2 (确认速率与宽度)

4.4 Polling状态中的速率协商准备

虽然正式的速率协商发生在后续的Configuration状态,但Polling状态已经为速率协商做好了关键准备:

  • 速率标识符交换: 在TS1序列中,每个端口会通过速率标识符(Rate ID)字段广播自己支持的速率集合(Gen1、Gen2、Gen3等)。
  • 公共速率发现: 链路两端通过交换TS1,可以初步了解对端支持的速率范围,为后续的速率选择提供依据。
  • 初始速率设定: 在Polling阶段,所有链路都默认以Gen1(2.5 GT/s)的速率运行。这是PCIe协议的基本规则,确保所有设备都能在最低速率下完成初始握手。
速率协商原则: 在Polling阶段,链路只进行“能力宣告”,不进行“速率切换”。所有速率切换操作(包括从Gen1升级到更高Gen)都必须在Configuration状态或Recovery状态中完成。Polling阶段始终运行在Gen1速率。

4.5 Polling状态超时与错误处理

Polling状态并非无限等待。协议定义了严格的超时机制,以防止链路挂死:

超时场景 超时时间 状态机行为
Polling.Active 中无法收到TS1 24 ms 回退到 Detect 状态,重新开始链路检测
Polling.Active 中无法收到TS2 24 ms 回退到 Detect 状态
Polling.Compliance 模式 无固定超时(由测试设备控制) 持续发送Compliance Pattern
调试建议: 如果链路反复卡在Polling状态,应首先检查:1) 物理层CDR是否锁定;2) 对端是否也在发送TS1;3) 链路是否存在信号完整性问题导致TS1/TS2符号错误。使用逻辑分析仪或PCIe协议分析仪捕获训练序列是定位问题的有效手段。

4.6 本章小结

Polling状态是PCIe链路训练中承上启下的关键阶段。通过Polling.Active子状态,链路完成了从物理层同步到逻辑层握手的过渡;通过TS1/TS2训练序列的交换,链路两端建立了基本的通信协议,并为后续的速率协商和链路宽度配置做好了准备。Polling.Compliance子状态则为硬件测试提供了标准化的信号质量验证手段。理解Polling状态的细节,对于诊断链路训练故障和设计可靠的PCIe系统至关重要。