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 连接到电缆的。
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 信号靠空闲时间编码,务必滤除毛刺。
- 不同世代速率翻倍,信号完整性的要求指数级上升。
- 阻抗匹配和端接是物理层稳定性最后的“守门员”。