CRC校验

目录

前言

CRC校验原理

步骤


1.前言

一个完整的数据帧通常有下部分:

数据帧
帧头数据校验位帧尾

校验位是为了在数据传输过程中出错时能及时检出,在数据传输过程中,无论传输系统的设计再怎么完美,差错总会存在,这种差错可能会导致在链路上传输的一个或者多个帧被破坏(出现比特差错,0变为1,或者1变为0),从而接受方接收到错误的数据。为尽量提高接受方收到数据的正确率,在接收方接收数据之前需要对数据进行差错检测,当且仅当检测的结果为正确时接收方才真正收下数据。通常采用一种指定的算法对原始数据进行计算,得出的一个校验值。发送方发送的数据包含经过计算的校验值,接收方用同样的校验算法对原始数据进行计算,如果计算结果和收到的校验值一致,说明数据校验正确,如果出错,这一帧丢掉重新发。

常用的校验算法有奇偶校验,累加和校验,CRC校验。还有LRC、BCC等不常用的校验算法。

1.1奇偶校验

以串口通讯的奇为例,偶校验类似:

使得数据加校验位“1”的个数是奇数个,数据“1”的个数是偶数位,则校验位是1;数据“1”的个数是奇数位,则校验位是0。

奇偶的检错能力相对比较弱,检错率为50%,但是计算简单,可用硬件实现,因而仍被广泛应用。

奇校验
数据校验位
发送方0110 1101 0
接收方0110 1101 0
错误但是没检出0101 1101 0
1.2累加和校验

校验值=所有数据之和。这种检错能力一般,对于单字节的校验和大概有1/256的失误率,传输数据的形式

数据校验位
发送方8 23 1 243
接收方8 23 1 243
错误但是没检出23 8 1243
2.CRC校验

CRC校验具备检错,纠错的能力,而奇偶只有检错能力,没有纠错能力。

CRC校验原理

在k位信息码(数据)的基础上附加上r位的校验码,总长度n=k+r,简称(n,k)码,换句话就是在数据后面加上生成的校验值,这个校验值也是二进制序列的,形成新帧,生成一个新帧发送给接收端,这个新帧要使发送端和接收端共同选定的某个特定数整除(注意,这里不是直接采用二进制除法,而是采用一种称之为“模2除法”)。到达接收端后,再把接收到的新帧除以(同样采用“模2除法”)这个选定的除数。因为在发送端发送数据帧之前就已通过附加一个数,做了“去余”处理(也就已经能整除了),所以结果应该是没有余数。如果有余数,则表明该帧在传输过程中出现了差错

模2除法:就是没有进位和借位的异或。

CRC校验在电子通信领域非常常用,可以说有通信存在的地方,就有CRC校验:

  • 美信(MAXIM)的芯片DS2401/DS18B20,都是使用的CRC-8/MAXIM模型
  • SD卡或MMC使用的是CRC-7/MMC模型
  • Modbus通信使用的是CRC-16/MODBUS参数模型
  • USB协议中使用的CRC-5/USB和CRC-16/USB模型
  • STM32自带的硬件CRC计算模块使用的是CRC-32模型
  • 常用的21个标准CRC参数模型:

CRC校验步骤:

CRC校验中有两个关键点,一是预先确定一个发送送端和接收端都用来作为除数的二进制比特串(或多项式),可以随机选择,也可以使用国际标准,但是最高位和最低位必须为1;二是把原始帧与上面计算出的除数进行模2除法运算,余数作为CRC校验码

CRC校验码计算示例:现假设选择的CRC生成多项式为G(X) = X4 + X3 + 1,要求出二进制序列10110011的CRC校验码。

下面是具体的计算过程:

①选择一种CRC模型,将多项式转化为二进制序列,由G(X) = X4 + X3 + 1可知,最高次幂是4,说明二进制一种有五位,第4位、第三位和第零位分别为1,则序列为11001

多项式的位数位5,则在数据帧的后面加上5-1位0,数据帧变为101100110000,然后使用模2除法除以除数11001,得到余数。

③将计算出来的CRC校验码添加在原始帧的后面,真正的数据帧为101100110100,再把这个数据帧发送到接收端。

④接收端收到数据帧后,用上面选定的除数,用模2除法除去,验证余数是否为0,如果为0,则说明数据帧没有出错。

算法实现参考

CRC常用参数模型及C#代码实现_c# crctable_HappyMrSpring的博客-CSDN博客

参考:百度安全验证​​​​​​icon-default.png?t=N7T8https://baijiahao.baidu.com/s?id=1608965002019598869&wfr=spider&for=pc

https://zhuanlan.zhihu.com/p/256487370icon-default.png?t=N7T8https://zhuanlan.zhihu.com/p/256487370如有侵权请联系删除,谢谢。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值