crc 通信数据校验

1. 二进制模2取余计算方法

CRC校验计算冗余码需要使用到二进制模2取余计算方法,二进制模 2 取余计算方法在计算上与普通的十进制的除法类似,只是此十进制被除数与除数仅仅是由 0 和 1组成的一个整数,例如被除数为 1100110000,除数为 11001。在计算的过程中唯一的差别是在除法运算过程中计算上下层数值相减时遵循的是二进制异或运算。(异或运算即 A+B = (~A)*B+A*( ~B),概括为 A 与 B 的值相同运算结果为 0,A 与 B 的值不同运算结果为 1)所以上下层数值相减时**1-0=10-1=11-1=00-0=0。** 最终计算结果含有整数商,以及余数,而在此运算中我们舍弃商,我们需要的是计算得到的余数用作冗余码

二进制模2取余计算.png
所以我们要的结果是**1001**

2. 循环冗余校验码计算方法

CRC 计算的基本思想是将传输的数据当做一个位数很长的整数,将这个数除以另一个数。得到的余数作为校验数据附加到原数据后面。格式如下图:
crc报文格式.png
这里的 n 位二进制数据为有效信息载荷 (即传输或存储的可用的数据信息) 根据 CRC 算法计算出 m 位冗余码,即根据该 CRC 校验多项式结合 CRC 算法从前面有效数据中提取出特征冗余码,这就是冗余的真实含义,所以实际传输或者存储的就是 n+m 位的二进制数据。

3. 理解多项式

在 CRC 校验算法中多项式如下图所示:
多项式.png
这里的最高次方 x 的 6 次方是怎么得到的呢?因为这里共有 7 位二进制数,所以从右往左排序为 0-6,所以最高次方为 6,至于 x 的值因为这里是二进制,故 x 为 2。

4. 算法处理过程

理解多项式.png
假定待发送有效数据为二进制多项式 M(x),而校验多项式 P(x) 为收发双方约定好的(即对于双方来说是已知的)。

校验处理流程.jpg
上图第三点: x 的 n 次方乘以 M(x) 中, x 的 n 次方 n 就是校验多项式的最高次幂,因为上图校验多项式的位数是 5 位,进行从右往左编号就是 0-4,所以 n=4,所以相当于 x^4 * M(x) 就相当于将 M(x) 左移 4 位给 M(x) 后面补 4个 0。
发送方校验数据计算.png
接收方校验.png

从上图可知接收方接收到数据后进行 CRC 经过计算校验余数为 0,校验通过。其实 CRC 的本质就是二进制多项式除法求取冗余码的计算过程,无论软件的查表法、移位计算法,还是纯硬件逻辑电路实现,本质都是一样的。对于数字逻辑电路利用移位计算则更具优势,因为几乎不占用 CPU 时间。详细查看此文章:https://zhuanlan.zhihu.com/p/285124407

5. 计算实例

5.1 数据发送方

设需要发送的信息为M = 1010001101,CRC8=X5+X4+X2+1 产生多项式对应的代码为 P = 110101,R=5。在M后加5个0为计算序列:101000110100000,然后对P做模2除法运算,得余数r(x)对应的代码:01110。故实际需要发送的数据是101000110101110。其中CRC校验码就为:01110。
二进制除法计算过程.png

5.1 数据接收方

当接收方收到数据后,用收到的数据对P(事先约定的)进行模2除法,若余数为0,则认为数据传输无差错;若余数不为0,则认为数据传输出现了错误,由于不知道错误发生在什么地方,因而不能进行自动纠正,一般的做法是丢弃接收的数据。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值