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