1. SATA接口概述与历史发展
大家好,我是老张,做存储接口协议十几年了。今天聊聊SATA——这个在PC、笔记本、NAS里随处可见的硬盘接口。你可能每天都在用,但它的设计思想和历史演变,很多人未必清楚。
1.1 为什么需要SATA?
90年代末,并行ATA(也就是IDE)遇到了瓶颈。我曾经在一家主板厂做过项目,当时为了把PATA线缆在机箱里走顺,恨不得把线折成U形——那根80芯的排线又宽又硬,还特别容易受干扰。
说白了,并行传输有三大硬伤:
- 信号串扰:并行线太多,高频下互相干扰
- 线缆笨重:80芯排线,弯折半径大,散热差
- 速度上限:PATA/133到133MB/s之后再也上不去了
所以业界需要一种新的接口:串行、点对点、支持热插拔、线缆细软。SATA就是为这个目的诞生的。
核心转变:从并行到串行,不是简单改个线数,是整个传输架构的重写。
1.2 SATA发展简史
SATA的标准化组织是SATA-IO(Serial ATA International Organization)。我记得2001年第一版规范出来的时候,大家都觉得速度翻倍很厉害——从133MB/s直接跳到150MB/s。
下面这张表,是我自己整理的SATA版本演进,你记一下关键数字就行:
| 版本 | 发布年份 | 速率(Gbps) | 实际吞吐(MB/s) | 主要改进 |
|---|---|---|---|---|
| SATA 1.0 | 2001 | 1.5 | 150 | 基本协议,NCQ可选 |
| SATA 2.0 | 2004 | 3.0 | 300 | NCQ强制,eSATA支持 |
| SATA 3.0 | 2009 | 6.0 | 600 | AHCI优化,SSD适配 |
| SATA 3.1 | 2011 | 6.0 | 600 | mSATA,零功耗ODD |
| SATA 3.2 | 2013 | 6.0 | 600 | SATA Express,M.2接口 |
你可能会问:怎么3.0之后带宽再没翻倍?嗯,因为瓶颈已经从接口转到闪存控制器和NAND本身了。再说,NVMe的PCIe方案更适合高速SSD,SATA就守住了“够用就好”的定位。
1.3 SATA接口的核心特点
我个人习惯把SATA特点总结成四个词:串行、点对点、热插拔、低成本。
- 串行传输:一对差分线发,一对差分线收。没有时钟线,靠时钟恢复。码率1.5/3/6 Gbps。
- 点对点:每个端口只连一个设备,不用像SCSI那样做端接终结。布线简单多了。
- 热插拔:7脚+15脚电源+地平面,最先接触的是地针,然后是电源,最后才是信号。我之前调试热插拔时,因为没处理好电源去耦,一插就复位——后来发现是电容位置不对。
- 低成本:7根信号线(4根数据+3根地),线缆直径只有PATA的1/5。整个收发器用CMOS工艺就能做。
避坑提醒:eSATA(外置SATA)线缆长度可以到2米,但必须使用屏蔽线缆。我遇到过客户用普通内接线当外接线,结果USB3.0的干扰耦合进来,眼图没眼看。
1.4 SATA协议层次速览
光讲历史不够,咱们得知道SATA分几层。这张图我画了好多次,每次讲课都会拿出来:
常见误解:有人以为SATA只有PHY和链路两层。其实应用层里包含了完整的ATA命令集——比如IDENTIFY DEVICE、READ DMA、SET FEATURES等。PHY层只负责比特流的收发,不理解命令是什么。
1.5 为什么PHY层值得单独讲?
很多人学SATA只关注读写性能、NCQ队列数,但实际项目里翻车最多的往往是PHY层。我曾经调一个平台,SATA链路反复协商失败,最后发现是参考时钟的扩频参数设错了。PHY层的OOB序列特性、信号眼图、电压摆幅、预加重……任何一个参数不对,上层跑得再完美也白搭。
- OOB信号:设备插入时通过COMRESET/COMINIT/COMWAKE完成初始协商
- 时钟恢复:SATA没有独立的时钟线,必须从数据流里恢复时钟
- 信号完整性:6Gbps下的损耗、串扰、回损都是硬骨头
- 电源序列:热插拔时电源和地的接触时序决定能否存活
所以说,PHY是SATA的根基。后面的章节,我会把每一块掰开讲——OOB、8b/10b编码、扩频时钟、接收均衡,一个都不少。
个人经验:如果你在做SSD主控或硬盘桥接芯片,我建议把PHY层的文档打印出来贴墙上。当年我在实验室花了三周才定位到一个COMINIT超时的问题,原因竟是有个电容的ESR偏大导致电源毛刺。PHY的事儿,往往小处见鬼。
好了,这章就到这儿。记住SATA不是“旧技术”——它在消费级和工业级存储里依然广泛存在,很多嵌入式系统还在用SATA SSD。理解它是理解整个存储接口体系的第一步。