CRC校验

         这段时间做项目涉及到串口通信的一些东西,串口返回的数据需要进行crc的效验,这块东西原来软考的时候学过.但也只是停留在了解的层面上.完全没有真正的用过,这次要真刀真枪的干了,脑子里是一片空白,就在网上查了点资料.下面是我整理的一些资料,以及自己的一些理解.

 

一、什么是crc校验

 

        首先,照顾一下不了解的朋友,普及一下什么是crc校验:

        随着计算机技术的不断发展,在现代工业中,利用微机进行数据通讯的工业控制应用得也越来越广泛。由于传输距离、现场状况等诸多可能出现的因素影响,计算机与受控设备之间的通讯数据常会发生无法预测的错误。为了防止错误所带来的影响,一般在通讯时采取数据校验的办法,而循环冗余码校验是最常用的校验方法之一。在实际使用的各种现场总线协议中,数据帧的校验一般都采用这种检验方式。

        简单的说就是一种屏蔽数据在传输过程中出错的方法.

 

二、crc的原理:

 

        这块内容也就是书上介绍最多的东西,也是最重要的东西。 crc校验采用多项式编码方法。多项式乘除法运算过程与普通代数多项式的乘除法相同。多项式的加减法运算以2为模,加减时不进,错位,如同逻辑异或运算。

        把被处理的数据块可以看作是一个n阶的二进制多项式。采用crc校验时,发送方和接收方用同一个生成多项式g(x),并且g(x)的首位和最后一位的系数必须为1(这是规定,没有原因)。crc的处理方法是:发送方以t(x)去除g(x),得到余数作为CRC校验码加在tx)后。接受方校验时,同样以接收到的数据除以gx),以计算的校正结果是否为0为据,判断数据帧是否出错

利用生成多项式位k个数据位产出r个校验位来进行编码,其编码长度位k+rcrc的代码格式位:


         由此可知,循环冗余校验码是由两部分组成的,左边为信息码(数据)右边为校验码。若信息码占K位,则校验码占n-k位。其中,ncrc码的字长,所以又称为(nk)码校验位是由信息码产生的,校验码位越长,该代码的校验能力越强。

        上面说的有点太专业了。说白了就是两个人要传送一个数字,两人事先说好了。发送来的数据能整除一个数g,这样发送发发送的时候为了保证这个数能整除k需要加上某个数r,接收方接到数据以后需要验证数据是否能整除这个数g,如果不能一定是在传送过程中出现了错误。


、crc的算法实现

    crc校验码的编码方法是用待发送的二进制数据t(x)除以生成多项式g(x),将最后的余数作为CRC校验码。其实现步骤如下:

  1. 设待发送的数据块是m位的二进制多项式t(x),生成多项式为r阶的g(x)。在数据块的末尾添加r个0,数据块的长度增加到m+r位,对应的二进制多项式为xrt(x)
  1. 用生成多项式去除 g(x),求得余数为阶数为r-1的二进制多项式y(x)。此二进制多项式y(x)就是t(x)经过生成多项式g(x)编码的CRC校验码。
  1. 用 以模2的方式加上y(x),得到二进制多项式 。就是包含了CRC校验码的待发送字符串。

 

例如:信息字段代码为: 1011001;对应m(x)=x6+x4+x3+1 

      假设生成多项式为:g(x)=x4+x3+1;则对应g(x)的代码为: 11001

      x4m(x)=x10+x8+x7+x4 对应的代码记为:10110010000

采用多项式除法:  得余数为:1010     (即校验字段为:1010

发送方:发出的传输字段为:  1 0 1 1 0 0 1 1 0 10

                          信息字段       校验字段

接收方:使用相同的生成码进行校验:接收到的字段/生成码(二进制除法)如果能够除尽,则正确。


四、总结:

          对一个新事物的学习,往往是要进过反复的学习。我们需要做的就只是积累,积极,总结提高!!!


  • 6
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 35
    评论
评论 35
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值