CRC是什么?

CRC全称是:Cyclic Redundancy Check,翻译过来就是:循环冗余校验码。是在数据通信领域中一种十分常用的查错校验码,和串口通信中常用的奇偶校验是属于同一种类型的。都是进行数据查错的算法,而不具有纠错能力。

CRC的所采用的多项式是什么

数据发送方(TX)与接收方(RX)进行交换时,采用CRC进行数据检错时,确定数据在传送过程中没有发生错误。其基本实现原理是TX侧在一个将要传送的数据包后加上N位CRC校验码,RX侧接收 数据包+N位CRC校验码。而添加CRC校验码的基本原则,通过收发双方协议确定添加N位CRC校验码,就是根据原数据与多项式所对应的信息进行模2除法得到的。根据常用的多项式:g(x)=x4+x3+1,所对应的信息代码为:11001,或者多项式:g(x)=x8+x7+x6+x5+x3+1,所对应的信息代码为:111010001。这也是分别对应着常用的CRC4,CRC8所采用的常用多项式,(而CRC4,CRC8中的多项式有很多种)。收发双方也可以设定相关多相关多项式,位数,类型均可自行设定,用于双方进行数据校验。

CRC多项式的使用及其原理

对于TX将要发送的一段原数据假设为:11101101,当采用多项式为:g(x)=x4+x3+1,则多项式对应的信息字段为:11001。在原数据后面添加N个0,这个N表示的所采用的多项式的最高位幂值数据,这里也就是N=4,原数据变为:111011010000,原数据+N位o数据与多项式所对应的信息进行模2除法,对应模2除法可以自行百度学习,其实模2除法也就是异或运算。大家可以看下用例算法,可以很清楚的明白,如下:

rtcm数据的crc校验算法python代码 crc校验原理及代码_校验码

由上图计算计算得出的余数就是CRC校验码,将数据添加到原数据后,发送给接收方,接收方接收到原数据+CRC校验码,利用相同的多项式,进行同样的模2除法,若余数为0,则表示接收的数据无误。

CRC计算基本步骤总结:

  1. 选择CRC位数,也就是选择合适的多项式(g(x)=x4+x3+1),并得到多项式对应的数据字段(11001),
  2. 在原数据(11101101)后添加N位0数据(111011010000)进行模2运算,得到其余数(0011),注意添加0的个数位为4位,而多项式的信息字段为5位,这并不矛盾。
  3. 将余数添加到原数据后(111011010011),进行发送,
  4. 接收到原数据+CRC校验码,用相同的多项式数据字段进行模2除法,若余数为0,表示接收数据无误。