PCIe 协议概述与 TS1/TS2 的作用
各位同学,欢迎来到《TS1与TS2协议解码分析教程》。我是你们的讲师,一个在高速数字设计里摸爬滚打了十几年的工程师。咱们这门课,说白了就是要把 PCIe 链路训练中最关键的两个家伙——TS1 和 TS2 有序集,给彻底搞明白。
今天先开个头,聊聊 PCIe 协议的大致长相,以及为什么非要有链路训练这回事。我个人觉得,这部分是地基,地基不牢,后面解码 TS1/TS2 的时候,你很容易一头雾水。
为什么需要链路训练?
想象一下,你把一张显卡插到主板上。物理上,金手指确实接触上了。但是,电气上呢?
- 时钟频率:双方该跑 2.5 GT/s 还是 5 GT/s?甚至是 16 GT/s?
- 极性:有没有谁把差分对的 P 和 N 画反了?这种低级错误,我就在一块原型板上见过。
- 链路宽度:插槽是 x16,但显卡可能只有 x8。怎么协商只用那 8 条通道?
- 去加重与均衡:高速信号跑起来会衰减,两端得商量好怎么补偿。
你可以想想看,这些参数如果靠人手动去配,那是天方夜谭。所以 PCIe 协议设计了一套自动协商机制——就是链路训练。它在上电复位后,或者链路出错需要恢复时,自动把这些事情都谈妥。TS1 和 TS2 有序集,就是谈判桌上递过去的那份「提案书」。
PCIe 的体系结构
要理解 TS1/TS2,先得知道它们是在哪一层跑的。PCIe 的体系结构分三层:
| 层次 | 主要职责 | 和 TS1/TS2 的关系 |
|---|---|---|
| 事务层 | 处理读写请求、完成包等高层事务。 | 基本不沾边。TS1/TS2 是链路层的事。 |
| 数据链路层 | 保证数据可靠传输,做 CRC 校验、ACK/NAK 重传。 | 也不直接处理。它只负责把数据包交给物理层。 |
| 物理层 | 负责比特流的发送接收、串并转换、电气特性。 | TS1/TS2 就住在这儿! 它们属于物理层的管理有序集。 |
物理层又分几块。其中有个重要的概念叫 LTSSM(链路训练和状态机)。它就是链路的交警,指挥着链路在 Detect、Polling、Configuration、L0、Recovery 这些状态之间切换。
核心观点:TS1 和 TS2 是 LTSSM 状态机渡让时使用的「信令令牌」,是物理层专属的握手消息。
TS1 与 TS2 的核心角色
简单来说,TS1 是「初次见面,请多关照」的自我介绍。TS2 是「好,基本条件达成,我们确认最终细节」的二次握手。我把它们的核心用途总结为下面这张思维导图:
个人经验: 我曾在调试一个 Gen4 固态硬盘时,发现链路怎么也上不了 L0 状态。抓了协议分析仪一看,原来 TS2 里面携带的速率协商 ID 没有对齐。方向对了,数据才能跑起来!
TS1/TS2 在恢复流程中的价值
链路正常工作时,如果检测到位错误太多(通过 CRC 校验失败或者接收器溢出),LTSSM 就会进入 Recovery 状态。这时候,TS1 和 TS2 又会被派上用场。
- Recovery.RcvrLock: 你会看到链路两端开始发送 TS1 有序集,重新寻找位锁定。
- Recovery.Equalization: 如果速率发生了变更,这里会发送 TS2 来携带最终的协商信息。
这种情况下,TS1 扮演的是「紧急呼叫」:我们出问题了,请重新同步!而 TS2 则是「危情解除确认」:新参数已经生效,我们可以愉快地继续了。
避坑指南:别搞混 TS1 和 TS2
我曾经犯过一个错误。在分析一个 x16 链路训练失败的案例时,我盯着逻辑分析仪里的 TS1 流看了半天,始终没找到问题。后来才发现,链路宽度协商在 TS1 阶段只是「提议」,到了 TS2 阶段才是「确认」。我一直在看的 TS1 其实没问题,但在 TS2 里,有一对 lane 因为走线不等长导致信号质量差,没有回应正确的 TS2 有序集。你看,没有抓 TS2,你怎么找得到?
注意: 千万不要以为链路训练是个一蹴而就的过程。它包含多次状态迁移和重试。当你看 TS1/TS2 解码波形时,如果看到一轮又一轮的重复发送,大概率是时序或者电气特性有偏差。
小结
这一节我们盖了个帽子。PCIe 不是一根线那么简单,它内部有复杂的状态机来保证健壮性。TS1/TS2 作为物理层的信令核心,承担着链路初始化、速率协商、宽度协商以及在链路恢复阶段重新建立连接的重任。无论你是做设备研发还是故障排查,只要你遇到链路训练的问题,最终绕不开 TS1 和 TS2 的细节。
记住我说的话:没有 TS1,就没有握手;没有 TS2,就没有确认。 后面几章,我们再具体拆解它们每一个域段的含义,让你做工程师也能像做侦探一样一丝不苟!