3. Polling 状态深入分析
Polling 状态是 PCIe 链路训练状态机(LTSSM)中连接建立的关键阶段。在 Detect 状态完成物理连接检测后,链路进入 Polling 状态,其核心目标是:确认接收通道完好、建立位锁定、完成符号锁定,并协商初始链路速度。Polling 状态由三个子状态构成:Polling.Active、Polling.Compliance 和 Polling.Speed。本章将逐一剖析每个子状态的目的、操作流程及常见失败原因。
3.1 Polling 状态的目的与整体流程
Polling 状态的主要目的可归纳为以下四点:
- 位锁定(Bit Lock):接收器从串行数据流中恢复时钟,并识别出正确的位边界。
- 符号锁定(Symbol Lock):在 8b/10b 或 128b/130b 编码的码流中,找到符号(Symbol)或数据块(Block)的起始边界。
- 速度协商:通过发送特定的训练序列(TS1/TS2),在 Polling.Speed 子状态中确定链路的工作速率。
- 电气空闲退出确认:确保发送端已从电气空闲状态退出,并开始发送有效信号。
实战提示: Polling 状态失败是链路训练中最常见的故障点之一。逻辑分析仪抓取到的 LTSSM 状态跳转记录中,若反复出现 Polling → Detect 的回退,通常意味着信号完整性或时钟恢复存在问题。
3.2 Polling.Active 子状态
Polling.Active 是 Polling 状态的入口子状态。当链路从 Detect.Quiet 或 Detect.Active 进入 Polling 后,首先进入 Polling.Active。该子状态的核心任务是完成接收器的初始化同步。
3.2.1 操作流程
- 发送 TS1 有序集:端口开始连续发送 TS1 训练序列,TS1 中包含链路编号、通道编号和训练控制信息。
- 位锁定:接收器利用 TS1 中的特定码型(如 COM 符号)恢复时钟,并调整采样相位,实现位锁定。
- 符号锁定:在 8b/10b 编码下,接收器通过识别 COM 符号(K28.5)的 10 位码型,确定符号边界。
- TS1 接收确认:当接收器成功锁定并正确解码连续的 TS1 序列后,认为链路对端已准备就绪。
- 状态跳转:成功完成上述步骤后,链路进入 Polling.Speed 子状态。
3.2.2 关键参数与超时
| 参数 | 规范值 | 说明 |
|---|---|---|
| Polling.Active 超时 | 48 ms(典型) | 若在此时间内未完成位锁定和符号锁定,链路回退至 Detect |
| TS1 发送间隔 | 连续发送 | 每个符号周期发送一个 TS1 有序集 |
| COM 符号码型 | K28.5(8b/10b) | 用于符号锁定和位对齐 |
| 接收器锁定要求 | 连续 2 个 TS1 无误 | 部分实现要求连续 4 个 TS1 无误才视为锁定成功 |
常见失败原因:
- 信号幅度不足:发送端差分电压低于接收器灵敏度阈值(通常为 175 mV 峰峰值)。
- 时钟抖动过大:总抖动(TJ)超过 0.6 UI(单位间隔)时,位锁定无法稳定。
- 交流耦合电容异常:电容值偏离 75 nF ~ 200 nF 范围,导致低频分量衰减。
- 阻抗不连续:PCB 走线阻抗偏离 85Ω ± 15% 时,反射信号干扰 COM 符号识别。
3.3 Polling.Compliance 子状态
Polling.Compliance 是一个特殊的测试子状态,用于信号合规性测试。当链路进入该子状态时,发送端会输出特定的测试码型,以便使用示波器或误码率测试仪(BERT)测量信号质量。该子状态通常由测试夹具或特定配置触发,在正常链路训练中不会进入。
3.3.1 进入条件
- 硬件触发:通过置位 Compliance 进入位(通常为 PERST# 信号配合特定 GPIO 电平)。
- 软件触发:通过配置空间中的链路控制寄存器(Link Control Register)的“Compliance 模式”位触发。
- 自动进入:某些测试设备在 Detect 状态检测到特殊码型后,强制链路进入 Compliance 模式。
3.3.2 测试码型与测量项目
| 码型名称 | 码型内容 | 测量项目 |
|---|---|---|
| CP0 | 全 0 码型(D0.0) | 直流电平、共模电压 |
| CP1 | 全 1 码型(D10.2) | 高频抖动、上升/下降时间 |
| CP2 | 交替 0/1 码型 | 眼图模板、确定性抖动 |
| CP3 | PRBS 伪随机码型 | 总抖动、误码率 |
合规性测试标准: 根据 PCIe Base Spec Rev 5.0,Gen3 及以上的合规性测试要求发送端在 Compliance 模式下输出 CP0~CP3 码型,接收端眼图模板的垂直开口需大于 25 mV,水平开口需大于 0.3 UI。
3.4 Polling.Speed 子状态
Polling.Speed 是 Polling 状态的最后一个子状态,负责链路速度的初始协商。在 Polling.Active 完成位锁定和符号锁定后,链路进入 Polling.Speed,通过交换 TS1 和 TS2 有序集来确定双方共同支持的最高速率。
3.4.1 速度协商机制
速度协商遵循“先共同、后最高”的原则:
- 初始速度:链路以 Gen1(2.5 GT/s)速率进入 Polling.Speed,这是所有 PCIe 设备必须支持的基础速率。
- 发送 TS2 有序集:双方开始发送 TS2 有序集,TS2 中包含“速度标识(Speed ID)”字段,用于指示设备支持的最高速率。
- 速度匹配:接收端解析对端 TS2 中的 Speed ID,与自身支持的最高速率取交集。
- 速度切换:若双方支持更高的速率(如 Gen2 5 GT/s 或 Gen3 8 GT/s),则链路在 TS2 交换完成后切换到该速率。
- 进入 Configuration:速度协商完成后,链路进入 Configuration.Linkwidth 子状态,开始链路宽度协商。
3.4.2 Speed ID 编码
| Speed ID 值 | 对应速率 | 编码方式 |
|---|---|---|
| 0001b | 2.5 GT/s(Gen1) | 所有设备必须支持 |
| 0010b | 5.0 GT/s(Gen2) | 可选支持 |
| 0100b | 8.0 GT/s(Gen3) | 可选支持 |
| 1000b | 16.0 GT/s(Gen4) | 可选支持 |
| 多位同时置位 | 表示支持多种速率 | 例如 0011b 表示支持 Gen1 和 Gen2 |
Polling.Speed 失败典型场景:
- 速度不匹配:一端仅支持 Gen1,另一端强制要求 Gen3,导致协商失败。
- TS2 解码错误:由于信号质量差,接收端无法正确解析 TS2 中的 Speed ID 字段。
- 速度切换失败:双方协商出 Gen3 速率,但发送端在切换 PLL 频率时失锁,导致链路中断。
- 电气空闲错误:在速度切换过程中,发送端错误地进入了电气空闲状态,导致接收端误判为链路断开。
3.5 本章小结
Polling 状态是 PCIe 链路训练中从物理连接到协议握手的关键过渡阶段。三个子状态各有侧重:
- Polling.Active:解决“能否收到信号”的问题,核心是位锁定和符号锁定。
- Polling.Compliance:解决“信号质量是否达标”的问题,用于合规性测试。
- Polling.Speed:解决“以多快速度通信”的问题,完成初始速度协商。