串行物理层:数据包、控制符号及PCS与PMA层解析
1. 数据包相关特性
1.1 数据包长度填充
通常,路径宽度为32位的整数倍。若由规格组合定义的数据包长度(包括CRC)为16位的奇数倍,会在数据包末尾追加值为0(0x0000)的16位填充,使填充后的数据包长度为32位的整数倍。
1.2 数据包保护
1.2.1 CRC添加规则
串行物理层为每个数据包添加16位CRC码用于错误检测。该代码覆盖整个数据包,但ackID字段和rsvd字段的一位除外,在CRC计算时,这部分视为零。这种结构允许数据包在整个架构中传输时,ackID可逐链路更改,而无需为每个链路重新计算CRC。由于每个链路上的ackID是为后续传输的每个数据包顺序分配的,因此ackID字段中的错误很容易被检测到。
CRC以两种方式追加到数据包:
- 对于不包括CRC的长度为80字节或更短的数据包,在逻辑字段末尾追加单个CRC。
- 对于不包括CRC的长度大于80字节的数据包,在头80字节后添加一个CRC,并在逻辑层字段末尾追加第二个CRC。第二个CRC值是第一个的延续,第一个CRC包含在运行计算中,即运行的CRC值在插入数据包的前80字节后不会重新初始化。若逻辑层字段末尾追加的CRC未使所得数据包的末尾与32位边界对齐,则在数据包后追加2字节全为逻辑0的填充,以确保CRC检查始终在32位边界进行。
1.2.2 16位数据包CRC码
使用ITU(国际电信联盟)多项式X16 + X12 + X5 + 1生成数据包的16位CRC。每个数据包开始时,CRC值初始化为0xFFFF(全为逻辑1)。在C
超级会员免费看
订阅专栏 解锁全文
4638

被折叠的 条评论
为什么被折叠?



