一、TS1与TS2概述:发展历史、应用场景、标准差异与基本概念

咱们搞数字信号处理或者通信协议的,肯定绕不开训练序列这个词。TS1和TS2就是两种非常经典的训练序列,在高速串行链路里扮演着“开路先锋”的角色。我最早接触这俩是在PCI Express 2.0的项目中,那时候板卡老是不稳定,查到最后发现是TS1和TS2的生成逻辑对不上规格书。嗯,从那次以后我就把这两兄弟彻底摸透了。

说白了,TS1和TS2是链路训练过程中用来建立物理连接的“握手信号”。发送端发一串已知的比特模式,接收端收到后可以估算出信道延迟、时钟偏差,甚至判定链路宽度。你想想看,没有这两套序列,高速信号根本没法可靠地对齐。

1.1 发展历史:从并行到串行,从低速率到Gbps

最早的高速总线,比如并行PCI,用的是并行时钟和数据线,不需要训练序列。但到了2000年初,串行传输成为趋势,一对差分线上既要传数据又要传时钟,接收端必须从数据流中“盲采”。这时候就需要训练序列做眼图建立、比特对齐。

PCI Express在2003年推出第一版时,就定义了TS1和TS2。我记得当时标准里TS1只有简单的连续交替位(0101…),用来做同步训练。后来随着速率提升到5Gbps(Gen2)甚至更高,TS1/TS2的格式越来越复杂,加入了速度协商、极性翻转检测等功能。现在PCIe 6.0仍然保留这两个序列,只是编码方式变成了PAM4。

另一个重要场景是SAS(串行SCSI)和SATA。SATA链路训练也用类似的名字,但细节不同。我做过一个SATA转接卡调试,发现TS2的超时参数和PCIe完全不一样,一开始以为是硬件坏了,后来查了标准才发现是协议差异。这告诉我们一个道理:别一看到TS1/TS2就想当然,得先确认是什么总线。

1.2 应用场景:哪里需要TS1/TS2?

  • PCI Express:链路训练状态机(LTSSM)的Detect、Polling、Configuration阶段都会用到TS1/TS2。尤其是Configuration阶段,TS1用来协商链路宽度和速度,TS2用来确认。
  • SATA / SAS:COMWAKE之后发送ALIGN原语(类似TS1),用于字对齐和电气参数调整。
  • USB 3.x:在LFPS(低频周期信号)之后发送TS1/TS2序列,完成LFPS训练和扩频时钟同步。
  • 光纤通道(Fibre Channel):也有类似的训练序列,但叫法不同。

避坑指南:我曾在PCIe Gen3的调试中发现,链路老是回退到Gen1。后来用示波器抓了TS1序列,发现发送端在TS1里带的速度标识位写错了——本该写Gen3,结果写成了Gen1。接收端收到后就按最低速度协商。所以检查TS1载荷非常关键。

1.3 标准差异:PCIe vs SATA 中的TS1/TS2

虽然都叫TS1/TS2,但不同标准下的编码格式、长度、作用都差很多。我整理了一张表,方便你对比:

特征 PCIe TS1/TS2 SATA TS1/TS2
符号长度 每个序列包含16个符号(8b/10b编码后的码字) 每个原语为20位(10b编码前的数据),但通常发送多次
固定部分 K28.5(逗号字符)开头,用于对齐 K28.3或K28.5开头,要看具体实现
可变部分 包含速度ID、链路宽度、TS标识符等 主要用来传递扩频时钟参数,数据量较少
重复模式 连续发送直到收到回应,或超时后降速重试 发送完固定次数后超时复位
超时设置 每个阶段有专用定时器(如Polling.Active超时为12ms) 一般硬件定制,我见过最常见的是1ms~5ms

你看,差异挺大的。实际项目中如果拿PCIe的TS1解析器去解SATA的TS1,肯定得不到正确结果。所以先确认协议规范是最重要的第一步。

1.4 基本概念:训练序列的构成与作用

TS1和TS2本质上是一个已知的比特模式,但为了抗噪声和直流平衡,通常会经过8b/10b编码(或者128b/130b)。发送端发送这些模式,接收端拿到后可以完成以下几件事:

  1. 符号对齐:利用逗号字符(如K28.5)找到码字的边界。
  2. 比特锁相:通过训练序列内的多次翻转,恢复出接收时钟。
  3. 链路参数协商:TS1序列里携带的原始数据(比如速度ID)告诉对端“我能跑多快”,接收端收到后根据自身能力回复TS2。
  4. 极性检测:如果差分线接反了(P/N反),训练序列的特殊模式能让接收端发现并自动纠正。
  5. 电气参数调整:像USB 3.x中的TS1还包含扩频时钟的偏移信息,用来匹配发送端和接收端的时钟调制。

核心记忆点:TS1是“发起者”使用的序列,TS2是“响应者”使用的序列。TS1告诉别人“我是谁、想连多快、要多大带宽”,TS2回答“我同意,我能匹配”。如果TS2没收到或内容不对,链路训练就会失败。

1.5 知识体系总览图

为了让你对整个章节有个全局印象,我画了一张TS1/TS2核心知识图。它把发展历史、应用场景、标准差异、基本概念串在一起。看懂这张图,第一章的重点就全掌握了。

TS1与TS2 知识体系总览 TS1 & TS2 发展历史 PCIe 1.0 → 6.0 应用场景 PCIe / SATA / USB 标准差异 PCIe vs SATA vs USB 基本概念 符号对齐 / 速度协商 并行总线 → 串行 8b/10b → 128b/130b 链路检测 & 初始化 速度协商 / 降速回退 编码方式不同 超时与重试策略 逗号字符对齐 极性翻转检测 核心:TS1 发起 / TS2 响应 链路训练成功的必要条件:正确的序列格式 + 合理的超时机制

说明:上图只覆盖了本章核心内容。实际项目中TS1/TS2的细节远比图中多的多,比如电气抖动容限、扩频时钟的三角波参数等。但先建立这个框架,后续章节我们会逐一深入。

1.6 一小段实战经验收尾

最后聊个真实案例。有一回我在调一款FPGA实现的PCIe EP(端点),板卡插到主机怎么都枚举不到。抓包发现链路训练一直在Polling阶段循环。用逻辑分析仪看TS1序列,发现发送端一直发正确的TS1,但接收端回的TS2里面有一个保留位被错误地置1了。主机收到后认为这个EP不支持某些功能,就发Deassert重新训练——无限循环。最终解决方案就是把FPGA状态机里那个保留位强制清零。所以你看,一个比特位就能让整条链路废掉。

本章内容就到这里。TS1和TS2的概述、发展、应用、差异、基本概念都聊透了。后面我们会深入解码每一帧,讲清楚怎么在示波器或逻辑分析仪上抓到并解析它们。