首页 > 达思技术 > 技术文章
技术宅:硬盘数据恢复技术之SATA协议分析(三)
来源:达思服务器数据恢复公司    阅读:2620    发布时间:2016/4/1 19:01:28

技术宅:硬盘数据恢复技术之SATA协议分析(三)

 

上一篇文章中,对SATA协议的物理层做了简要的分析,物理层是SATA的基础,是处理串行传输信号的最前端,物理层之后就是链路层,下面对链路层做简要的分析和描述。

数据链路层位于物理层和传输层之间,其根本任务是信道编码,维持链路的通畅。与物理层类似,数据链路层也分为发送和接收两部分,由数据链路层控制状态机模块进行协调与控制。数据链路层只负责按协议规定的格式接收和发送帧信息,不需要关注帧信息的具体内容。数据链路层根据传输层的控制信号发送原语和接收物理层的原语并转换为相应的控制信号报告给传输层以完成握手、流量控制等信息交互,通过采用CRC校验、数据加/解扰、8B/10B 编码等机制提供数据的可靠传输。

SATA协议规定链路层的主要功能是负责把传输层传递的信息帧进行编码,校验,扰码,封装帧边界,对物理层传递的信息帧进行解码,校验,扰码,解析出帧的有效数据。链路层主要通过控制原语的传递来控制信息帧的整个传输过程,保证该传输过程的有效性并进行相应的流量控制。

数据链路层结构框图如图1

1 数据链路层结构图

链路层的CRC生成和校验模块、加扰和解扰模块、8b/10b编码和解码模块用于对传输数据的处理,保证数据传输的可靠性;原语生成和探测模块用于产生发送原语和检测接收原语;FIFO模块用于缓存输入输出的数据。

数据的收发过程为:

当收到传输层发来的帧传输请求后,数据链路层完成的操作如下:

1、与对方数据链路层协商,避免发生帧传输冲突;若出现冲突,设备端优先传输;

2、从传输层接收有效数据并进行封装(添加SOFPCRCEOFP等);

3、计算有效数据的CRC校验值;

4、发送帧信息给物理层,根据己方FIFO和对方数据链路层状态进行流量控制;

5、接收对方数据链路层的反馈信息,向传输层报告当前传输状态;

6、对数据进行加扰、8B/10B 编码操作。

当接收物理层传回数据时,数据链路层完成的操作如下:

1、通知对方数据链路层已经准备好接收帧信息;

2、从物理层接收已经过编码处理的数据;

310B/8B 解码并去除封装(SOFPCRCEOFP等);

4、对接收到的数据进行CRC 校验;

5、根据己方FIFO和对方数据链路层状态进行流量控制;

6、对比接收到的和计算所得的CRC校验值;

7、向对方的数据链路层和己方传输层报告当前传输状态;

8、对数据进行解扰。

链路层在传输层指令控制下选择要发送的原语或数据帧,每次处理一个DWORD 数据,如果所处理的DWORD 数据是帧封装头SOFStart Of Frame)和帧封装尾EOFEnd Of Frame)中间的数据,对于从传输层接收到的数据帧,链路层首先进行CRC 计算,得到CRC生成码,CRC 生成码作为帧内容的最后一个DWORD,将数据帧送入扰码模块对数据加扰,发送EOF原语作为数据发送结束标志,最后经过8b/10b 编码,将数据变成适合物理层传输的码型并传送至物理层。在传输的过程中,链路层通过在数据包上插入原语来进行流量控制,完成数据传输后,链路层等待物理层的应答,并把流量控制信息传递至传输层。

       对于从物理层接收的数据,链路层首先进行8b/10b解码,然后将数据送入解扰器,同时探测原语,判断原语信息,将解扰后的数据进行CRC校验,检测当前接收到的数据CRC与计算CRC 是否一致,若正确,则将数据发送到传输层,若不正确,则通过错误机制上报传输层和数据发送方。

8B/10B编码:为了增强数据传输过程中差分信号的抗干扰能力,SATA规范采用了 8b/10b编码机制。采用8b/10b 编码机制主要是保证数据传输的有效性和抗干扰性。采用8b/10b 编码机制,能使发送的“0”、“1频率保持基本一致,并且连续的“1”或“0”不超过 5 位,即每 5 个连续的“1”或“0”后必须插入一位“0”或“1”,从而保证信号 DC 平衡。因为在高速的串行数据传输中,如果比特流中逻辑0或逻辑1

有连续多个数据信息位没有发生状态跳变时,数据信息之间的跳变信号将会受到影响减弱而出错,而直流平衡技术则解决了这个问题。

8B/10B 编码的基本思想是将一个8 位数据划分为低5 位和高3 位两部分,对低5位部分进行 5B/6B 编码,对高3位两部分进行3B/4B 编码,如此分为两部分进行编码使得硬件上能更有效地对更小的子块进行编解码。通过两部分分别编码,最终8位数据被编码为 10 位数据,其原理如图2所示。编码后的10 位中所有“1”或“0”的个数不会超过 6个,并且连续的“1”或“0”的个数不会超过 4个。解码原理与编码类似,只不过是逆过程而已。

28B/10B编码原理图

8b/10b的编码过程是将一组需要连续发送的8位数据信息分解成两组数据,一组3位,一组5位,然后经过编码后分别成为一组4 位的代码和一组6位的代码,最后组成一组10位的数据发送出去。而

8b/10b解码电路的基本原理就是将接收到的10位数据分为4 位和 6 位两个部分,分别解码而将其变成3位和5位,然后将新数据用于高速串行传输。其具体编码过程如图3所示,编码数据一般都表示为 DX.Y KX.Y,其中D表示为数据代码,K表示为包含特殊信息的命令代码,X 表示输入的原始数据的低5EDCBAY 表示输入的原始数据的高3HGFSATA协议通过8b/10b编码机制,能够增加协议数据传输中的控制手段来保证数据传输的正确有效性,并且通过利用这些特殊信息的命令代码,还可以帮助数据接收端进行还原的工作,并可以在早期发现数据位的传输错误,抑制传输错误的继续产生。

3 8b/10b 编码过程

为了使编解码过程利于描述和理解,8B/10B 编码规范对所有二进制数进行了约定:用a~j表示编码后10位数据的bit0~bit9;用A~H表示编码前8 位数据的bit0~bit7并以Zxx.y 的形式命名。Z 作为控制位,当传输的是数据字符时,Z D;当传输的是控制字符时,Z Kxx 代表低 5 EDCBA 的十进制值,y 代表高3 HGF 的十进制值。表1的示例有助于理解数字和字符之间的转换关系。如表 1 中所示,当需要对BCh控制字符进行转换时,首先可以确定Z K,然后用HGFEDCBA 表示“1011 1100”,那么HGF 为“101”,EDCBA 为“11100”,BCh控制字符就可以用“K28.5”来表示了;同理,4Ah 数据字符可以用“D10.2”表示。

1 字符转换关系表

8B/10B编码过程可以分为两个阶段:

第一阶段利用5B/6B编码表,参考当前“运行不均等性”值将低5 位编码成 6 位。

第二阶段利用3B/4B编码表,参考经过第一阶段更新的“运行不均等性”值将剩下的高3位编码成4位。

“运行不均等性”(Running Disparity)是一个用正值“+”或负值“-”表示的二进制参数,它会对下一次编码结果产生影响。每完成一次编码,编码器都会根据之前编码的值计算出一个新的“运行不均等性”值,然后参与下一次编码的运算。编码运算规则如下:

1、当得到的6/4位数据中,“1”的个数大于“0”或者“000111”、“0011”,那么“运行不均等性”值为“+”;

2、当得到的6/4位数据中,“1”的个数小于“0”或者“111000”、“1100”,那么“运行不均等性”值为“-”;

3、当得到的6/4位数据中,“1”的个数等于“0”(除了以上4种情况),那么“运行不均等性”值保持不变。

数据字符的5B/6B3B/4B编码表分别如表23 所示,控制字符的编码表如表4所示。表中“rd+”、“rd-”代表上一次编码完成后的“运行不均等性”值;“rd’”代表本次编码完成后“运行不均等性”值,在“rd’”列中“-rd”代表“运行不均等性”值正负变化,而“rd”代表“运行不均等性”值不变化。

2 数据字符5B/6B编码表

3 数据字符3B/4B编码表

4控制字符编码表

CRC 校验:添加 CRC校验的主要目的是降低数据传输时通信线路受到外界电磁干扰而产生误码的概率,它是通信系统中常用的一种差错校验方式,在SATA协议中采用的是CRC32校验方式。链路层计算的CRC值与从物理层发送的CRC值相比较,如果比较结果一致,则说明发送数据没有出现错误;若比较结果不一致,则需要将错误信息反馈至应用层,应用层根据错误信息进行相应处理。CRC校验计算SOFEOF之间的所有数据(不包括数据间插入的原语),以 DWORD32 位)为一个计算单位长度,如果校验数据的长度不是32 位的整数倍,则在校验数据后面补充相应位数的“0”。SATA协议规定的CRC初始值为0x52325032SOFEOF之间的校验数据长度最大为 2064DWORDs

SATA协议为了保证数据传输的正确性,采用了CRC数据校验机制(Cyclic Redundancy Check)。循环冗余校验CRC具有强大的检错能力,并在以太网链路层等多种数据传输协议的数据校验功能中得到应用。它具有检错能力强,计算开销小,易于编码器实现等优点。与奇偶校验及算术和校验等方式相比,虽然校验算法较为复杂,但是其校验性能和所需系统开销都远远优于两者。SATA协议中的CRC主要对信息帧进行串行校验计算,以信息帧起始原语(SOF)和结束原语(EOF)之间的所有有效数据位为计算对象。该校验计算的一个基本校验计算单位为32 位数据,当一个信息帧的容量没有达到DWORD的整数倍时,所缺数据位在信息帧后面补充0即可。循环冗余码CRC机制在 SATA发送端进行编码和SATA接收端接收进行校验时,根据协议规定 CRC生成多项式GX)来得到各个数据位的校验公式,K位要发送的数据信息位可对应一个(K-1)次多项式KX),R 位冗余位对应于一个(R-1)次多项式 RX),由K位数据信息位后面加上R位冗余位组成的校验信息码则对应于一个(N-1)次多项式 TXX×KX+RX)。发送端产生一个循环冗余校验数据,跟随在信息帧有效数据后发送,接收端在接收到信息帧中的校验数据后将其除以CRC生成多项式GX),如结果为零则表示数据传输正确。SATA协议采用的CRC生成多项式为:G(X)=X32+X26+X23+X22+X16+X12+X11+X10+X8+X7+X5+X4+X2+X+1

假设待发送数据有K位,校验码有R位,G(x)是产生校验码的生成多项式,校验码多项式和完整码多项式分别由P(x)C(x)表示,则待发送数据可表示为:M(x)=mk-1xk-1+mk-2xk-2+…+mixi+…+m1x+x0

上式中,系数mi取值为0 1,由于是二进制表示,x 取值为2。那么,完整码多项式为 C(2)= xRM(2)+P(2),校验码多项式P(2)2RM(2)除以 G(2)得到的余数。

 目前CRC校验方法根据生成多项式分为多种,如 CRC-4CRC-8CRC-16CRC-ITUCRC-32等。由于数据链路层以DW为最小传输单位,所以采用的生成多项式为G(X)=X32+X26+X23+X22+X16+X12+X11+X10+X8+X7+X5+X4+X2+X+1。校验时计算对象包括SOFPEOFP之间所有的FIS 数据内容,以DW为最小单位,不足整数的需要在数据末尾补“0”,计算所得的校验码放在最后一位FISEOFP之间,随帧信息一起发送出去;接收端接收时,同样需要对SOFPEOFP之间所有的FIS数据内容进行CRC运算,所得到的CRC值与原来的值比较,若相等则说明传输正确没有错误。SATA标准协议规定CRC校验的初始值为 52325032hSOFP EOFP之间最大的DW数量不能超过2064个。

扰码器:添加扰码器的作用是为提取数据帧中的位定时信息、扩散信号频谱并保持稳定,避免电路的周期性基带信号对数据传输带来的干扰,它在发送端将发送的数据帧转换成“0”“1”发生概率近似相等、前后相互独立的伪随机码流。扰码器是由线性反馈移位寄存器和“异或门”组成,以输入的数据和线性反馈寄存器输出值的模2加为输出。SATA协议规定,线性反馈移位寄存器的初始值为0xFFFF,在 SOFEOF之间的数据,包括CRC值都需要加扰。对于原语信息则不需要加扰,在设计扰码器时要首先将操作原语和数据分开,不能影响对数据的加扰,也不能对原语进行加扰。

SATA协议为了保证时钟数据采样信号的质量,需要保持信号的稳定性和足够的比特定时信息含量,因而采用扰码机制来进一步调整连续1或连续0等信号,将传输数据扰乱形成“0”,“1”近似等概率的有效跳变信号,可以最大程度地避免连续信号在传输过程中所收的干扰。扰码的主要工作原理实际是一个伪随机数据序列的生成模块,主要利用异或门和线性反馈移位寄存器实现,SATA 协议采用扰码生成多项式方程为:G(X) = X16 + X15+X13+ X4+1当链路层对数据进行扰码时,SATA接口会先将线性反馈移位寄存器中生成的随机数据码与有效数据进行异或操作,得到扰码数据后再将其进行8b/10b编码,编码完毕后送入物理层发送出去;当链路层对数据进行解扰码操作时,SATA 接口现将数据进行8b/10b解码,然后将解码后的数据与线性反馈移位寄存器中相对应的随机码进行异或操作,最后得到帧有效数据信息。

除了 SOFP EOFP之间所有的 FIS数据内容(包括 CRC 校验值)需要加扰之外,介于 CONTP和新的原语之间重复的原语也需要进行加扰。SATA 标准协议规定线性反馈移位寄存器的初始值为FFFFh

链路层控制原语:链路层总共有18个原语,用来控制和表示串行线路的工作状态,在传输过程中也用来调整流量控制,每个控制原语长度均为 4 个字符,原语之间采用握手机制来完成状态的控制。

SATA协议链路层的控制原语主要是用来控制和维持串行链路数据传输状态的一系列信息原语。链路层数据传输过程的控制主要由 SATA主机和设备相互之间发送、接收控制原语实现的。SATA 协议通信的双方都可以向对方发送数据传输请求,并在接收到对方准备好信号后开始数据传输,主机端和设备端在链路层完全是对等关系。在数据传输过程中,当数据发送方发送数据缓冲不足时,发送HOLD 原语进行流量控制,直到数据准备好进入发送缓冲区则继续发送数据;而接收方在接收数据缓冲已满时,也同样会发送HOLD 原语进行流量控制。我们利用一个完整信息帧的详细传输过程来说明控制原语是如何对其控制的:

1. 发送方发现有数据需要传输时,则对接收方发送X_RDY 原语,来表示发送数据的请求并告知接收方准备接收。

2.  接收方接收到X_RDY原语时,开始检查自身状态,确认无误可以接收数据后,向发送方发送R_RDY,表示接收方已准备接收。

3.发送方得到接收方已准备接收信号好,开始发送数据,首先发送SOF原语,然后是若干有效数据。

4.接收方在收到SOF原语及信息帧中的有效数据时,向发送发返回 R_IP原语表示接收方正在接收。

5.发送方在该信息帧的发送过程中,发现发送缓冲区内某些数据没有准备好导致无法发送时,则向接收方传递HOLD原语让其等待进行流量控制。

 6.接收方收到HOLD原语后,进入等待状态并以HOLDA原语回复。

7.发送方的数据准备好后,则发送HOLD原语和有效数据,告之接收发继续数据传输过程。

8.接收方收到HOLD 原语和有效数据后,结束等待状态,接收数据并以R_IP表示接收状态正常。

9.发送方数据发送完毕后,进行CRC校验并将校验和加入信息帧尾部发送出去,最后发送EOF原语表示信息帧发送完毕,最后发送 WTRM原语表示等待接收方的最终验证结果。

10.接收方接收整个信息帧后进行CRC校验,校验正确后,发送 R_OK 原语表示数据发送过程无误。

11.  发送方,接收方相继进入空闲状态,发送SYNC原语,等待下一次数据传输请求。

数据链路层发送和接收帧信息以 DW 为最小传输单位,包括两种类型:原语(Primitives)和帧(Frame)。原语由 1 DW 组成,用于主机和设备之间实时状态信息、传输控制信息的交互,协调主机和设备的通信,保证数据正常传输。原语内部 4个字节都是固定不变的,包括1个控制字符和3个数据字符,除了ALIGNP的控制字符是 28.5 之外,其余的原语都采用K28.3 作为控制字符。所以说 ALIGNP是唯一拥有 comma 特征的原语。各个原语的符号功能和字符编码分别如表5所示。

5 原语功能定义

6 原语字符编码

帧:帧由多个DWs组成,通常以SOFP作为开始,以EOFP作为结束,中间包括FISCRC校验值。CRC校验值是EOFP之前最后一个非原语DW。有时为了速率匹配的目的,帧中间也会插入一些原语(CONTPHOLDPHOLDAP)用于流量控制。一帧数据的典型结构如图 4所示。

4 典型的帧结构

总体上看,链路层在物理层和传输层之间,承上启下,完成8B/10B编解码、CRC效验、加扰/解扰和原语控制等操作。通过以上的描述,基本上可以对SATA的链路层有一个清晰的认识和理解。后续文章将继续关注SATA的传输层的技术原理和细节。

  关于达思科技

     达思科技,国家级高新技术企业,天津市国家保密局涉密载体数据恢复唯一协作单位,数据恢复和取证行业著名品牌,是一家以技术研发为核心生产力的技术型企业,在国内乃至全亚洲数据恢复与取证技术领先!

     达思科技 中国数据恢复与取证专家!热线:4007000017

     更多数据恢复与取证技术、互联网请关注微信公众订阅号:woocs

微信号:woocs

长按识别二维码关注

专注数据恢复与取证技术、互联网

电话咨询:400-700-0017

投稿:woocs@qq.com



分享到:
达思公司联系方式
    • 达思北京数据恢复中心(全国总部)

    • 数据恢复服务咨询:400-700-0017

    • 数据恢复培训咨询:010-62672127

    • 达思数据恢复软件:010-62670586

    • 达思软件技术支持:010-62670165


    • 达思总部

    • 数据恢复实验室:  010-62672127

    • 数据恢复实训室:  010-62672381

    • 电子取证实验室:  13522681842

    • 软件销售QQ:  151208

    • 远程协助QQ:  12869803

    • 邮件联系:sos@dstchina.cn

    • 邮件支持:support@dstchina.cn

    • 24小时免费电话:400-700-0017

    • 24小时监督电话:13671390603

网站首页 | 北京数据恢复 | 数据恢复公司 | 硬盘数据恢复 | 服务器数据恢复 | raid数据恢复 | 数据库数据恢复 | 达思科技官网

Copyright2007-2019 达思凯瑞技术(北京)有限公司 达思数据恢复软件技术交流QQ超级群:120161291
北京数据恢复中心:北京市海淀区中关村东路66号世纪科贸大厦B座11层1102室 电话:010-62672125,400-700-0017 13522681842
ICP备案号:
京ICP备09028603号-49
ICP备案号: - 技术支持:千助科技

用QQ扫一扫

加入达思QQ群