CRC校验总结
一.CRC校验的介绍:
1. CRC全称:Cyclic Redundancy Check(循环冗余校验)。
CRC简介:在发送端,先把数据划分为组,假定每组k个比特(发送端每次发送一个数据包,就是上面说的组,假设每个数据包长度为k个bit)。 现假定待传送的数据m=101001(k=6),CRC运算就是在数据m的后面添加供差错检测用的n位冗余码(R)(这n位冗余码是按着一定规则计算出来的校验码, 假设这个运算规则是表达式g(x)),然后构成帧发送出去,一共发送(k+n)位.在所要发送的数据后面增加n位的冗余码,虽然增大了数据传输的开销,但是可以进行差错检测。当传输可能出现差错时,付出这种代价是值得的。我们接收到数据后从数据中截取数据m和冗余码(校验码)。然后我们也对m按照运算规则(g(x))做运算,计算的结果和校验码相比较,若二者相同表示数据接收正确,否则接收的是错误数据。
冗余码的生成规则:
这n位冗余码可以用以下方法得出:
用二进制的模2运算进行2^n乘m的运算,这相当于在n后面添加n个0(也就是m<<n)。得到的(k+n)位的数除以收发双方事先商定的长度为(n+1)位的除数g(x),得出商是Q,而余数是R(正好n位,)而这个余数就作为冗余码拼接在数据M的后面发送出去。假设除数是g(x)的值是1101,则商就是Q=110101,而余数就是R=001。
除数g(x)介绍:
g(x)是一个多项式,CRC校验常用的多项式有:
CRC8=X8+X5+X4+1 (数字为X的幂,X8是8个X向乘)
CRC-CCITT=X16+X12+X5+1
CRC16=X16+X15+X5+1
CRC12=X12+X11+X3+X2+1
CRC32=X32+X26+X23+X22+X16+X12+X11+X10+X8+X7+X5+X4+X2+X1+1
…… …… 余下全文