CRC校验自学笔记

学习来源:https://blog.****.net/u011854789/article/details/80206676

CRC

1、简称循环码,是一种常用的、具有检错、纠错能力的校验码。
2、循环冗余校验码由信息码n位和校验码k位构成。k位校验位拼接在n位数据位后面,n+k为循环冗余校验码的字长,又称这个校验码(n+k,n)码。
3、理论上可以证明循环冗余校验码的检错能力有以下特点:
①可检测出所有奇数位错;
②可检测出所有双比特的错;
③可检测出所有小于、等于校验位长度的突发错。

原理

1、先在要发送的帧后面附加一个数(这个就是用来校验的校验码,是二进制序列的),生成一个新帧发送给接收端。
2、到达接收端后,再把接收到的新帧除以(采用模2除法)这个选定的除数。
3、因为在发送端发送数据帧之前就已通过附加一个数,做了**“去余”处理**(也就已经能整除了),所以结果应该是没有余数。如果有余数,则表明该帧在传输过程中出现了差错。

模2除法-已知信息码,求校验码

模2加法运算为:1+1=0,0+1=1,0+0=0,无进位,无借位;
模2减法运算为:1-1=0,0-1=1,1-0=1,0-0=0,无进位,无借位
相当于二进制中的逻辑异或运算
“模2除法”与“算术除法”类似,但它既不向上位借位,也不比较除数和被除数的相同位数值的大小,只要以相同位数进行相除即可。
也就是比较后,两者对应位相同则结果为“0”,不同则结果为“1”。

CRC校验码计算示例

https://blog.****.net/qiaobt/article/details/81661345

现假设选择的CRC生成多项式为G(X) = X4 + X3 + 1,要求出二进制序列10110011的CRC校验码。
①将多项式转化为二进制序列,由G(X) = X4 + X3 + 1可知二进制一种有五位,第4位、第三位和第零位分别为1,则序列为11001。
②多项式的位数位5,则在数据帧的后面加上5-1位0,数据帧变为101100110000,然后使用模2除法除以除数11001,得到余数。
③将计算出来的CRC校验码添加在原始帧的后面,真正的数据帧为101100110100,再把这个数据帧发送到接收端。
④接收端收到数据帧后,用上面选定的除数,用模2除法除去,验证余数是否为0,如果为0,则说明数据帧没有出错。
CRC校验自学笔记
CRC校验电路图
CRC校验自学笔记