crc校验在哪一层

crc校验在哪一层,第1张

crc校验在数据帧。

因为数据帧每经一跳前,都必须修改源和目的mac和其他的可选字段项目,例如分段等.CRC到最后才根据这些新修改内容进行一次计算。

已知信息位为1100,生成多项式G(x) = x3+x+1,求CRC码。

M(x) = 1100 M(x)*x3 = 1100000 G(x) = 1011。

M(x)*x3 / G(x) = 1110 + 010 /1011 R(x) = 010。

CRC码为: M(x)*x 3+R(x)=1100000+010 =1100010。

相关区别:

包(Packet)是TCP/IP协议通信传输中的数据单位,一般也称“数据包”。

TCP/IP协议是工作在OSI模型第三层(网络层)、第四层(传输层)上的,帧工作在第二层(数据链路层)。上一层的内容由下一层的内容来传输,所以在局域网中,“包”是包含在“帧”里的。所谓数据帧(Data frame)。

就是数据链路层的协议数据单元,它包括三部分:帧头,数据部分,帧尾。其中,帧头和帧尾包含一些必要的控制信息,比如同步信息、地址信息、差错控制信息等;数据部分则包含网络层传下来的数据,比如IP数据包。

串口通讯中,发送的是字符串或者说是字节数组。接收或发送的总字节数已知,一般最后一个或两个字节为CRC校验字节。你可以做一个子函数,以该字节数组作为函数变量,返回值为CRC校验字节。对于发送数据,将返回的校验字节放在发送字节的最后,然后发送即可;对于接收数据校验,则将子函数返回的校验字节与接收到的校验字节比较,相等即校验通过,不相等则校验失败。

CRC校验码的获取有两种方法,可以用查表法,也可以用多项式法计算。

请参考我先前的回答,如下

CRC-16码由两个字节构成,在开始时CRC寄存器的每一位都预置为1,然后把CRC寄存器与8-bit的数据进行异或(异或:二进制运算 相同为0,不同为1;0^0=00^1=11^0=11^1=0), 之后对CRC寄存器从高到低进行移位,在最高位(MSB)的位置补零,而最低位(LSB,移位后已经被移出CRC寄存器)如果为1,则把寄存器与预定义的多项式码进行异或,否则如果LSB为零,则无需进行异或。重复上述的由高至低的移位8次,第一个8-bit数据处理完毕,用此时CRC寄存器的值与下一个8-bit数据异或并进行如前一个数据似的8次移位。所有的字符处理完成后CRC寄存器内的值即为最终的CRC值。

1.设置CRC寄存器,并给其赋值FFFF(hex)。

2.将数据的第一个8-bit字符与16位CRC寄存器的低8位进行异或,并把结果存入CRC寄存器。 3.CRC寄存器向右移一位,MSB补零,移出并检查LSB。

4.如果LSB为0,重复第三步;若LSB为1,CRC寄存器与多项式码相异或。

5.重复第3与第4步直到8次移位全部完成。此时一个8-bit数据处理完毕。

6.重复第2至第5步直到所有数据全部处理完成。

7.最终CRC寄存器的内容即为CRC值。

CRC(16位)多项式为 X16+X15+X2+1,其对应校验二进制位列为1 1000 0000 0000 0101。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/bake/11787956.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-18
下一篇 2023-05-18

发表评论

登录后才能评论

评论列表(0条)

保存