目录
一、Link层概述
链路层负责帧的发送与接收:根据传输层的控制信号发送原语,并接收来自物理层的原语(这些原语将被转换为传输层的控制信号)。链路层无需识别帧的具体内容。主机与设备的链路层状态机基本相似,但当主机与设备同时请求传输所有权时,设备将获得优先权。
当传输层需要发送一个帧时,链路层需要提供的功能:
- 与对端链路层进行协商,当主机与设备同时请求传输时,解决冲突仲裁问题
- 对传输层的数据封装帧格式(SOFp、CRC、EOFp)
- 以Dword的形式从传输层接收数据
- 为传输层数据计算CRC
- 传输帧
- 根据FIFO或者对端链路层的请求实现流控机制
- 从对等链路层接收帧接收确认
- 向传输层报告链路层/物理层传输状态(正确 or 错误)
- 进行8b/10b编码
- 对Dword数据进行加扰,减小电磁干扰的影响
当传输层接收一个帧时,链路层需要提供的功能:
- 向对等链路层确认准备好接收一个帧
- 从物理层接收编码之后的数据
- 从8b/10b的字符流中进行解码,并对齐Dword数据
- 去除帧的帧格式(SOFp、CRC、EOFp)
- 为接收到的数据计算CRC
- 根据FIFO或者对端链路层的请求实现流控机制
- 将计算出的CRC与帧中的CRC进行对比
- 向传输层报告链路层/物理层传输状态(正确 or 错误)
- 将接收到的数据进行解扰
二、8b/10b编码
编码原理可以参考之前的文章:8b/10b编码
在GT收发器中已经实现8b/10b的编码功能,因此可以直接使用。
三、发送概述
串行线路上的信息以8b/10b编码字符序列形式传输,其最小通信单元为双字(Dword)。每个双字的内容经过分组处理,用于提供底层控制信息或实现主机与连接设备间的数据传输。
原语:原语由单个Dword组成,是主机与设备之间最简单的通信单元。主要被用来传输实时状态信息,传输控制信息、协调主机与设备之间的通信。原语的第一个字节是一个特殊的字节,且原语是一个常量。
帧:一个帧包含多个Dword,并且总是起始于SOFp,跟随一个FIS(Frame Information Structure),接着是一个CRC,最后是一个EOFp。允许在SOFp与EOFp之间插入流控原语去限制数据流以达到速度匹配的目的。
四、原语
原语含义
除了ALIGNp原语使用K28.5作为原语的起始控制字符,其余的原语使用K28.3作为原语的起始控制字符。ALIGNp原语是唯一一个拥有逗号字符的原语。控制字符之后是其余三个被编码的字符,以组成完整的原语。
ALIGNP is chosen to have neutral disparity so that it may be inserted into the stream without affecting the disparity of previously encoded characters. Disparity at the end of ALIGNP is the same as the ending disparity of the last character transmitted before ALIGNP.
ALIGNp原语的特殊之处:
ALIGNp被设计为具有中性差异值,因此可插入数据流中而不会影响先前编码字符的差异值。ALIGNp结束时的差异值与插入ALIGNp前最后一个传输字符的结束差异值相同。
特殊原语
- DMATp:目前关于此原语的使用没有一个统一的规范,但在实现上应该能够正常接收DMATp原语,但应该避免主动发送DMATp信号。
- CONTp:主要是为了打断重复原语的出现,减小电磁干扰的影响。任何重复的原语都可以通过使用CONTp来暗示重复。接收方应该忽略CONTp之后的所有数据(不包含ALIGNp原语),直到收到原始数据。发送CONTP原语后,发送方可传输任意数据字符序列(但不得包含任何原语)。接收方在收到CONTP时,将持续默认重复最后一个有效原语,直至接收到下一个有效原语为止。
1、为了避免传输错误,所有的重复的原语在发送CONTp原语之前至少应该重复两次。
2、以下的原语可能跟随CONTp原语:
HOLDp, HOLDAp, PMREQ_Pp,PMREQ_Sp,R_ERRp,R_IPp,R_OKp,R_RDYp,SYNCp,WTRMp,X_RDYp.
3、为确保从LS3:L_SendAlign状态或LPM8:L_WakeUp2状态进入L1:L_IDLE状态后(参见第9.6.2节和第9.6.5节)的主从设备同步可靠性,在以下任一条件满足前,禁止在从LS3:L_SendAlign状态或LPM8:L_WakeUp2状态转换至L1:L_IDLE状态后使用CONTP原语:
已传输至少10个非ALIGNP原语;
检测到接收到的原语既非SYNCP也非ALIGNP。
4、CONTp原语之后跟随的数据必须是线性反馈移位寄存器(指定多项式)产生的数据。
用于生成CONTP后数据的线性反馈移位寄存器(LFSR),必须在检测到COMINIT或COMRESET事件时重置为初始值。
- ALIGNp:链路层应该忽略ALIGNp原语,而物理层可自主接收处理ALIGNp原语。
流控信令延迟
-
新序列的强制要求
每次新发起HOLDP/HOLDAP握手序列时(即全新的一次流量控制交互),从接收端发送HOLDP到收到发送端回复HOLDAP的全程延迟必须≤20个双字传输周期。这是硬性时序要求。 -
同一序列内的例外情况
若在一个持续的握手序列中,接收端需要重复发送HOLDP信号(例如因持续流量控制需求),这些后续的HOLDP信号不受20双字延迟限制。仅首个HOLDP触发的新序列需要满足该要求。
接收FIFO需要预留出流控延迟所需要的空间要求。
为什么需要在20个Dword时间内,下图说明了每一步的具体转换时间
线缆长度对于延时的影响:
在3.0Gbps的速率下,长度为1m的线缆不需要考虑延时,但是当线缆的长度达到8m,就需要考虑线缆带来的延时(3 Dword)。
五、加扰
在SATA中有两个加扰器:
- 数据载荷加扰器:仅处理有效载荷(SOF至EOF之间)
- 重复原语抑制加扰器:处理控制通道数据(如使用CONTp原语抑制重复原语)
原语不进行加扰,并且不能推进数据载荷线性反馈移位寄存器