2. SATA 物理层架构

做 SATA 协议的人都知道,物理层是整个链路的“地基”。如果物理层没搞好,上层协议再漂亮也跑不起来。我刚开始接触 SATA 时,总以为物理层就是几根差分线加上个 PLL 完事,结果被 OOB 信号和阻抗匹配坑了好几回。今天咱们就好好扒一扒这个“地基”。

一句话总结:SATA 物理层负责把链路层送来的并行数据变成串行差分信号发出去,再把接收到的差分信号恢复回并行数据,同时完成速度协商和链路初始化握手。

2.1 物理层的三层结构

SATA 物理层细分成三个子层,说白了就是各管一摊:

子层 英文缩写 主要职责 我踩过的坑
物理编码子层 PCS 8b/10b 编码/解码、弹性缓冲、OOB 序列检测 弹性缓冲深度不够导致帧边界错位
物理介质依附层 PMA 串行化/解串(SerDes)、时钟恢复(CDR)、发送预加重 CDR 锁定时间过长导致 OOB 时序失败
物理介质相关层 PMD 差分驱动器/接收器、阻抗匹配、电气特性 PCB 走线阻抗偏差导致眼图闭合

这三层之间传递的数据是带时钟信息的串行流。我习惯把 PCS 看作“翻译官”,PMA 是“快递员”,PMD 就是“路面”。任何一个环节出问题,链路都起不来。

2.2 关键硬件模块

实际芯片上,物理层由几个核心模块组成。你想想看,既然要收发数据,至少得有发送通道和接收通道吧?再加上全局控制逻辑。

  • 发送器(TX):包含串行化器(Serializer)、预加重电路(Pre-emphasis)、差分驱动器。
  • 接收器(RX):包含均衡器(Equalizer)、时钟数据恢复(CDR)、解串器(Deserializer)。
  • 锁相环(PLL):产生多相时钟,驱动 SerDes。我记得有一次 PLL 抖动超标,Gen3 速率死活过不了 compliance 测试。
  • OOB 检测器:专门负责 COMINIT/COMWAKE/COMRESET 信号的边沿检测,时序要求很苛刻。
  • 速度协商状态机:控制物理层在 1.5G/3G/6Gbps 之间切换。

个人经验:设计 OOB 检测器时,一定要留足滤波窗口。我曾经因为 glitch 被误判为 COMINIT,导致设备反复复位,折腾了两天才找到是电容耦合干扰。

2.3 物理层架构总览图

下面这张图把物理层的三层结构和数据流向画清楚了。注意看发送和接收两条路径,以及它们是怎么通过 PMD 连接到电缆的。

SATA 物理层架构(主机侧 → 设备侧) 主机 PCS 8b/10b 编码 · 弹性缓冲 主机 PMA SerDes · CDR 主机 PMD 差分驱动 · 均衡 · 预加重 TX RX SATA 电缆 / PCB 走线 差分对(A+/A- · B+/B-) 设备 PMD 差分驱动 · 均衡 · 预加重 设备 PMA SerDes · CDR 设备 PCS 8b/10b 解码 · 弹性缓冲 全局控制:PLL · OOB 检测 · 速度协商状态机 · 电源管理 说明:红色箭头表示发送路径(TX),青色箭头表示接收路径(RX)。 实际物理层可能集成 OOB 检测、预加重控制等逻辑在 PMA 或 PCS 中,依芯片设计而异。

2.4 OOB 信号与电气层标志

物理层里还有个特殊的东西 —— OOB(Out-of-Band)信号。它不是普通的数据传输,而是靠“空闲时间长短”来传递信息的。SATA 协议定义了三种 OOB 信号:

  • COMRESET:主机发出,要求设备复位。持续 6 个 Gen1 周期(约 533ns)的 IDLE,然后突发 160ns 的 D10.2。
  • COMINIT:设备发出,响应复位或主动要求链路初始化。时序和 COMRESET 一样,只是方向不同。
  • COMWAKE:双方均可发,表示“我准备好了,开始协商速度”。突发时间短一些。

我当年调试 OOB 的时候,用示波器抓差分对上的波形,发现 COMRESET 后的 IDLE 时间总是偏长。查了半天是 PMD 的驱动器在 IDLE 状态下漏电流过大,导致共模电压漂移,OOB 检测器以为还在活跃状态。解决方法是在 IDLE 时强制驱动器输出共模电平。

注意:OOB 信号的检测必须在 PMD 层做得很干净,任何错误的边沿检测都会导致状态机跑飞。建议在检测器前面加一个边沿滤波器,滤掉小于 20ns 的毛刺。

2.5 不同 SATA 世代物理层差异

从 Gen1 到 Gen3,物理层的主要变化集中在速率和信号完整性上。表格对比一下:

特性 SATA 1.0 (Gen1) SATA 2.0 (Gen2) SATA 3.0 (Gen3) 我遇到的痛点
单通道速率 1.5 Gbps 3.0 Gbps 6.0 Gbps Gen2 到 Gen3 眼图质量断崖下降
编码方式 8b/10b 8b/10b 8b/10b 都一样,但 Gen3 对抖动更敏感
预加重 可选,1 阶 推荐,1 阶 必须,2 阶可调 预加重系数配错会导致远端过冲
均衡 无要求 可选 CTLE 强制 CTLE + DFE DFE 系数更新慢导致长尾
OOB 时序 Gen1 单位 Gen2 单位 Gen3 单位 切换速度时要重新校准 OOB 时间窗口
通道损耗容限 ~10dB @ 750MHz ~12dB @ 1.5GHz ~18dB @ 3.0GHz 超过容限就得用重计时器

2.6 阻抗匹配与端接

最后聊一个硬件工程师的噩梦 —— 阻抗匹配。SATA 的差分特性阻抗要求 100Ω ±15%(差分),单端对地 50Ω。实际上我测过很多市售硬盘,PCB 走线阻抗往往在 90~105Ω 之间。如果主机侧和设备侧阻抗偏差太大,反射就会吃掉眼图。

我曾经在调试一个 Gen3 项目时,设备端 PMD 内部端接设计成 50Ω 对地,但主机侧是用交流耦合 + 片内端接 100Ω 差分。结果反射系数高达 0.2,眼图高度只剩 300mV。解决办法是把设备侧端接改为 100Ω 差分端接,并且在靠近 connector 处加了一对 0.1μF 的 AC 耦合电容。

一句话记牢:高速信号最怕阻抗不连续。差分对内的两根线等长误差要控制在 5mil 以内,从 PHY 到连接器的整个通道要仿真一次再投板。

2.7 小结本章关键点

  • 物理层分三层:PCS(编码)、PMA(串并转换)、PMD(电气接口)。
  • OOB 信号靠空闲时间编码,务必滤除毛刺。
  • 不同世代速率翻倍,信号完整性的要求指数级上升。
  • 阻抗匹配和端接是物理层稳定性最后的“守门员”。