文章目录
- 系列文章目录
- 前言
- 一、故事前传
- 二、SATA Link Layer 加扰/解扰解析
- 二、SATA Link Layer CRC解析
- 总结
前言
一、故事前传
我们之前说到Link layer的结构,link layer的作用大致可以包括以下几点:
Frame flow control
CRC的生成与检测
对数据与控制字符的Scrmable/Descramble
8b/10b编解码(已解析,详细见历史文章)
将传输层进来的数据转为Frame
二、加扰(Scramble)/解扰(Descramble)
资料在进行8b/10b 编码之前,必须先行资料加扰(Scramble)的处理,目的是為了降低EMI(Electromagnetic Interference,电磁干扰)。
实现方式是由LFSR(Linear Feedback Shift Register)的方式来实践;
基本原理是将资料的8 位元与LFSR 寄存器的16 位元输出做XOR 的处理。
规定LFSR的初始值為0xFFFF,
LFSR必须在SOF标志前就要被初始化,
在SOF与EOF之间的资料,包括CRC值都需要加扰。
对于控制基元Primitive是不需要加扰的 。
SATA协议中资料处理流程如下 :
-
对于一个资料包,在SOF后的资料就必须计算其CRC值,同时这个资料必须和扰码器的输出进行XOR操作,操作结果送往8B/10B编码器编码;
-
反之,在接收方,资料先通过10B/8B解码,再与扰码器的输出结果进行XOR操作,最后计算资料的CRC值。
三、CRC(Cyclic Redundancy Check)循环冗余校验码
CRC的计算范围包括SOF和EOF之间的所有资料(即不包括控制基元),以Dword(32-bit)为单位,如果资料的内容不是Dword的整数倍,需要在资料包的后面用'0’来补充。
协议规定CRC的初始值為0x52325032,
SOF和EOF之间的所有资料不能超过2064个Dwords。