SATA3协议

一、简介。

SATA协议是由PATA协议发展而来的,主要为了克服并行接口时序对齐的问题,以及提升速度。

SATA和USB、TCP/IP有很多共通的地方,比如:速度协商、8b/10b编码、协议模型等。

而不同的是,SATA专门为硬盘而设计的,所以有很多硬盘专用的命令。

这里主要参考了《Serial ATA International Organization Serial ATA Revision 3.5》和《The Essential Guide to Serial ATA and SATA Express》。

二、协议模型概述。

SATA协议模型与TCP/IP类似,一共分为4层,分别是:物理层、链路层、传输层、应用层。

其中,应用层在一些资料也叫命令层。显然,协议分层是将其功能进行划分,其目的是更易于理解协议以及实现协议。

各层功能如下:

物理层:实现硬盘与主机的物理连接,对高速差分信号进行时钟恢复、数据恢复等。

链路层:使用校验、加扰等技术保证原始数据的准确传输。

传输层:对数据的功能、数量进行分类,实现不同的传输方式。

应用层:对硬盘的特性设计不同的应用场合的命令。

三、物理层。

3.1 电气连接。

SATA由两对差分进行互连,其中GND可以对差分对进行包地,提高信噪比。

从差分对的电气特性可以看出,是LVDS电平。

SATA在物理层是全双工的,但是在命令层又是host发了命令,device作出回应,这又是半双工的。但是只用一对差分作双向口传输,速度还做不了这么快,比如USB2.0的480Mb/s。而且使用两对差分,才能使host和device各自的pll进入锁定状态。

3.2 CDR(时钟数据恢复)。

由于SATA线上一般有隔直电容,以及需要使用PLL进行时钟数据恢复,所以不能传过多的连续0或连续1的信号。最好是若干个0101…这种翻转信号。但是只发翻转信号所携带的信息太少,于是有了8b/10b编码,来保证发送的数据是01平衡的,也称DC平衡。

SATA发送只有一对差分线,只包含数据,没有时钟。而数字电路需要有时钟去采样数据才能恢复出数据。所以在接收时,将DC平衡的数据送进PLL,PLL锁定后会输出一路时钟,而且这个时钟是与数据严格同步的。再使用这个时钟去采样数据,便能恢复出原来的数据了,如下图所示。

如果接收到的数据是连0或连1的情况,PLL无法锁定,就无法产生出同步的时钟,会导致通信失败。

3.3 OOB(带外信号)。

OOB(带外信号),一般是指在工作频段范围以外的信号。

对于SATA Gen3来说,刚上电时,先用1.5G的频率发送OOB,经速度协商之后,才会转到6G,那么相对6G来说,1.5G就是带外信号。所以速度协商是从最高速度开始尝试,失败就会降速再尝试,但是在发送最高速度之前,是走1.5G的OOB信号的。

UI(Unit Interval)就是发送一个0或1的周期,用的是1.5G的频率,周期为666.7ps。

OOB实际上是规定了差分对上翻转信号时长和空闲等待时长的一种信号。一共有三种、COMRESET、COMINIT、COMWAKE。

这里COMRESET与COMINIT是一样的,区别在于COMRESET是host发出,COMINIT为device发出。106.7ns就是翻转信号,320ns是空闲时长。

OOB初始化流程如下图所示。

3.4 速度协商。

速度协商是在OOB初始化之后进行的,也就是device发完COMWAKE之后。

速度协商流程(如下图所示):

1、host以最低速度发送D10.2。

2、device以最高速度发送2048个ALIGN。

3、host检测到ALIGN,再用检测到的速度来发送ALIGN。

4、deivce检测到ALIGN,并发判断non-ALIGN。

5、host发送non-ALIGN。

注意:这里D10.2为8b/10b编码,ALIGN和non-ALIGN为原语,后面再叙述。

3.5 上电流程。

上电流程分为以下几步:

1、host和device都还没上电。

2、供电,host的TX和RX差分对处于隐性电平(共模电压),即不发信号。

3、host发送COMRESET。

4、当host上电复位完成,host让差分对处于隐性电平。

5、当device检测到COMRESET,它会发送COMINIT,如果device启动较慢,它可以随时发出COMINIT。

6、host校准然后发送COMWAKE。

7、device检测到COMWAKE后校准,再发送6个突发的COMWAKE,再以最高速度发送ALIGN原语(最多2048个),如果host没有回应,那么再降速发送ALIGN原语(最多2048个),如果以最低速度发送2048个ALIGN原语,host都没有回应就进入error状态。

在SATA GEN1中2048个ALIGN原语一共54.6us。

8、host检测到COMWAKE,以最低速度发送D10.2;host检测到ALIGN原语,pll锁定,再以相同速度发送ALIGN原语。不管device发送什么速度,host的pll必须在54.6us内进入锁定。host从检测到COMWAGE到接收到第一个ALIGN原语之间,允许最少873.8us的时间;如果在这个时间段内没有检测到ALIGN原语,host重新进入上电流程,不停重复,直到应用层叫停。

在SATA GEN1中32768个DWORD一共873.8us。

9、device检测到ALIGN原语,pll锁定,再发送SYNC原语,指示已经就绪了。

10、一旦接收到3个连续的non-ALIGN原语,说明已经可以正常通信了。

3.6 BIST(内建自测试)。

BIST(Built-In Self-Test)需要发送BIST ACTIVATE FIS,FIS为传输层的内容。
BIST主要有三种回环测试,用于验证收发数据是否有问题,类似TCP/IP中的ping的功能。

三种回环测试中,只有Far-End Retimed这一种是强制要求的。

四、链路层。

4.1 8b/10b编码。

在SATA中原语和帧都是以DWORD为最小单位,即32bit,最后经8b/10b编码,实际发送40bit的数据,即每8b编码为10b。

为了解决01平衡的问题,引入8b/10b编码。

8b/10b编码输入为9b,输出为10b。那么解码时,输入为10b,输出为9b。

9b中,8b为原始数据,第9b为Z,Z可以是D或者K。D为数据码,K为控制码。

通过K和D,就可以将原始的数据,和控制码(原语),进行区分了。

8b/10b编码都是查表来实现的,它将8b拆分为5b和3b,其中5b编码为6b,3b编码为4b;而这5b的寻址范围为0~31,3b的寻址范围为0~7;如:K28.5,28为5b的地址,5为3b的址。

因为完全01平衡的码太少了,所以会有0多或1多的情形;rd+为正极性,0多的情形;rd-为负极性,1多的情形;两种情形搭配使用,可以使01平衡。

D码和K码都是共用一张表。所以把下图中Dx改为Kx,D0~D31改为K0~K31,即为K码表。

K28.5也称comma,即逗号。

8b/10b的编码效率是比较低,只有8/10=80%。所以在一些高速接口上,如:PCIE会用128b/130b编码,其编码效率高达98.46%。

4.2 原语。

在SATA中一个原语的大小为DWORD,即32bit。

原语和普通的数据,区别在于第一个字节为K码,其它为D码。而普通数据均为D码。

原语的作用:

ALIGN,用于字节对齐,总是成对发送。由于在SATA的差分对上只能传输串行的数据,而在8b/10b编码后为并行数据,所以需要串并转换,而这时,如果串行数据少了一位或多位,那么并行出来的数据就不对,而且前面错了,就会导致后面全错,这时字节对齐的作用就很关键,可以说ALIGN是最重要的原语。

SOF、EOF,用于一帧数据的前面和后面,标志一帧数据的起始和结束。

HOLD、HOLDA,用于暂停数据的发送或接收。

SYNC,同步,只要空闲时就发,可以让CDR的PLL一直保持在锁定状态,所以在速度协商之后SATA上没有不发东西的时候。

CONT,只要相同的原语(上图中带*号的)发送超过2个,就以CONT来代替,可以减少EMI。

原语可以在帧的前、后面,部分原语也可以在帧的中间。原语的作用是控制数据的收发、状态反馈等。

4.3 CRC校验。

SATA使用的CRC校验为CRC32,生成多项式为:

这里初始值为0x52325032。CRC的数学原理为伽罗华有限域,可以参考抽象代数。

由于使用了CRC32做校验,所以SATA最小的数据位宽为DWORD,即32bit,如果不够32bit,要补0。这也是SATA使用的CRC算法为字节流算法,每次送进CRC计算器都为32bit,通过查表可以得到结果。

4.4 加扰。

SATA为了降低EMI,使用LSFR(线性反馈移位寄存器)加扰,目的是把数据的频谱进行扩展,也称扩频,就是把能量尖峰分散开,以压低尖峰。

扩频有跳频扩频和直序扩频,这里的LSFR为直序扩频,即用一个伪随机序列将原始数据的频谱进行扩展。

LSFR的生成多项式为:

这里初始值为0xFFFF。LSFR实际为一个循环移位寄存器,中间抽头接一些异或门,其数学原理为伽罗华有限域,可以参考抽象代数。

五、传输层。

5.1 FIS简介。

FIS(Frame Information Structures)帧信息结构,用于描述一帧信息的功能。

SATA的FIS与USB的令牌包有点类似,而FIS组成的命令则与USB事务类似。

SATA主要支持以下8种FIS。

H>D,D>H为单向传输,H<>D为双向传输。

5.2 Host to Device FIS。

ICC:同步命令完成。host向device发送的一个时间限制,用于指示该命令要在多长时间内完成。

PM Port:端口复用地址。

c:命令位。1:命令寄存器,0:控制寄存器。

Command:影子寄存器中的Command寄存器。

Device:影子寄存器中的Device寄存器。

5.3 Device to Host FIS。

i:中断位。反映了device的中断线。

Status:状态。

        bit7:device忙。

        bit6:device就绪。

        bit5:device故障 / 流错误。

        bit4:延迟写错误。

        bit3:数据请求。

        bit2:对齐错误 / 废弃该位。

        bit1:检测数据可用 / 废弃该位。

        bit0:检查条件或检查出错 / 废弃该位。

Error:错误。

        bit7:CRC错误。

        bit6:数据不正确。

        bit5:废弃该位。

        bit4:找不到ID号。

        bit3:废弃该位。

        bit2:中止。

        bit1:媒体末尾。

        bit0:非法长度 / 命令完成超时 / 媒体错误 / 尝试移除分区 / NV Cache空间不足 / LBA剩余范围不足。

5.4 Set Device Bits FIS。

5.5 PIO Setup FIS。

d:方向。0=输出(写),1=输入(读)。

E_Status:在后续的Data FIS,状态寄存器的新值。

Transfer Count:保存后续Data FIS要传输的字节数,应该为偶数。

5.6 DMA Activate FIS。

host向device使用DMA写操作时,device向host发DMA Activate FIS,用于指示DMA已被激活。

有的写操作,也不发送DMA Activate FIS。

5.7 DMA Setup FIS。

a:自动激活DMA,写操作时该位指示不发送DMA Activate FIS,读操作时该位为0。

d:方向。1=device向host传输(读操作),0=host向deivce传输(写操作)。

a:自动激活DMA,写操作时该位指示不发送DMA Activate FIS,读操作时该位为0。

TAG:DMA Buffer ID Low的低5位,用于指示正在传输数据的TAG命令所对应的TAG值。

i:中断,该位为0。

5.8 Data FIS。

Data FIS中数据长度可变,为1~2048个dword(双字),由前面CRC小节所述,必须为dword的整数倍,不足1个dword则补零。

注意:Data FIS不会重传,因为发送buffer和接收buffer均为2048个dword,由于要发送的数据可能超过2048个dword,而buffer有限,没法重传。而其它FIS均可以重传。

5.9 BIST Activate FIS。

T:远端传输模式。

A:忽略对齐原语。

S:忽略扰码。

L:远端重新调整回环。

F:无端模拟前端。

P:传输原语位

R:预留。

V:厂家唯一模式。

5.10 FPDMA FIS。

First-Party DMA,第一方DMA。device通过PRD Table来控制DMA的传输,无需host的干预可以完成DMA的命令,同时device能根据DMA的区域对命令进行重新排序,以提高效率;而host的FPDMA也类似。

5.11 NCQ。

NCQ(Native Command Queuing)原生命令队列。NCQ可以一次执行32条命令,这里称为批处理命令。

NCQ用于提升硬盘的性能,主要有以下几个方面的改进:

1、Race-Free Status Return Mechanism,无需握手即可随时返回状态。目的是简化命令流程。

2、Interrupt Aggregation,不必每条命令都产生一个中断,而是全部处理完,再产生一个总的中断。目的是批处理命令及简化命令流程。

3、First-Party DMA (FPDMA),通过PRD Table来控制DMA的传输,无需对方的干预可以完成DMA的命令,同时能根据DMA的区域对命令进行重新排序,以提高效率。

5.12 命令的处理流程。

由FIS组成了各种命令,以下是各种命令的处理流程。

5.13 PRD Table。

PRD(Physical Region Descriptors)物理区域描述符,是一个数据结构。

在DMA传输过程中,host只给了数据,并没有给device指明要传到哪一块区域中,而这时就需要PRD Table,来指明DMA要传到device哪一块buffer上。

六、应用层。

6.1 简介。

在传输层更多的是讲述传输数据的流程,但是一个硬盘除了读写数据以外,还有其它功能。

6.2 命令代码。

6.3 功耗管理。

6.4 安全。

6.5 SMART。

SMART(Self-Monitoring Analysis Reporting Technology)自监测分析及报告技术。

6.6 日志。

七、端口复用。

这里的端口复用就和USB-HUB一样,如下图所示。通过FIS的PM port来区分不同的端口地址。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值