您当前的位置:五五电子网电子知识plc技术PLC入门CRC的原理和实现 正文
CRC的原理和实现

CRC的原理和实现

点击数:7915 次   录入时间:03-04 11:55:44   整理:http://www.55dianzi.com   PLC入门
  1.差错检测
----------
数据通信中,接收端需要检测在传输过程中是否发生差错,常用的技术有奇偶校验(Parity
Check),校验和(Checksum)和CRC(Cyclic Redundancy Check)。它们都是发送端对消息按照
某种算法计算出校验码,然后将校验码和消息一起发送到接收端。接收端对接收到的消息按
照相同算法得出校验码,再与接收到的校验码比较,以判断接收到消息是否正确。 奇偶校验只需要1位校验码,其计算方法也很简单。以奇检验为例,发送端只需要对所有消息
位进行异或运算,得出的值如果是0,则校验码为1,否则为0。接收端可以对消息进行相同计
算,然后比较校验码。也可以对消息连同校验码一起计算,若值是0则有差错,否则校验通过。
通常说奇偶校验可以检测出1位差错,实际上它可以检测出任何奇数位差错。校验和的思想也很简单,将传输的消息当成8位(或16/32位)整数的序列,将这些整数加起来
而得出校验码,该校验码也叫校验和。校验和被用在IP协议中,按照16位整数运算,而且其
MSB(Most Significant Bit)的进位被加到结果中。显然,奇偶校验和校验和都有明显的不足。奇偶校验不能检测出偶数位差错。对于校验和, PLC资料网
如果整数序列中有两个整数出错,一个增加了一定的值,另一个减小了相同的值,这种差错
就检测不出来。
2.CRC算法的基本原理
-------------------
CRC算法的是以GF(2)(2元素伽罗瓦域)多项式算术为数学基础的,听起来很恐怖,但实际上它
的主要特点和运算规则是很好理解的。GF(2)多项式中只有一个变量x,其系数也只有0和1,如:
    1*x^7 + 0*x^6 + 1*x^5 + 0*x^4 + 0*x^3 + 1*x^2 +1*x^1 + 1*x^0
即:
    x^7 + x^5 + x^2  + x + 1
(x^n表示x的n次幂)    GF(2)多项式中的加减用模2算术执行对应项上系数的加减,模2就是加减时不考虑进位和借位,
即:
    0 + 0 = 0    0 - 0 = 0
    0 + 1 = 1    0 - 1 = 1
    1 + 0 = 1    1 - 0 = 1
    1 + 1 = 0    1 - 1 = 0
    PLC资料网
显然,加和减是一样的效果(故在GF(2)多项式中一般不出现"-"号),都等同于异或运算。例
如P1 = x^3  + x^2 + 1,P2 = x^3  + x^1 + 1,P1 + P2为:    x^3  + x^2   + 1
  + x^3        + x + 1
    ------------------
           x^2 + xGF(2)多项式乘法和一般多项式乘法基本一样,只是在各项相加的时候按模2算术进行,例如
P1 * P2为:    (x^3 + x^2 + 1)(x^3 + x^1 + 1)
    = (x^6 + x^4 + x^3
     + x^5 + x^3 + x^2
     + x^3 + x + 1)
    = x^6 + x^5 + x^4 + x^3 + x^2 + x + 1GF(2)多项式除法也和一般多项式除法基本一样,只是在各项相减的时候按模2算术进行,例
如P3 = x^7 + x^6 + x^5 + x^2 + x,P3 / P2为:                                       x^4 + x^3           + 1

PLC


                    ------------------------------------------      
        x^3 + x + 1 )x^7 + x^6 + x^5 +             x^2 + x
                     x^7       + x^5 + x^4
                     ---------------------
                           x^6       + x^4
                           x^6       + x^4 + x^3 PLC资料网
                           ---------------------
                                             x^3 + x^2 + x
                                             x^3       + x + 1
                                             ----------------- PLC资料网
                                                   x^2     + 1
                                                  
CRC算法将长度为m位的消息对应一个GF(2)多项式M,比如对于8位消息11100110,如果先传输
MSB,则它对应的多项式为x^7 + x^6 + x^5 + x^2 + x。发送端和接收端约定一个次数为r的
GF(2)多项式G,称为生成多项式,比如x^3 + x + 1,r = 3。在消息后面加上r个0对应的多
项式为M',显然有M' = Mx^r。用M'除以G将得到一个次数等于或小于r - 1的余数多项式R,
其对应的r位数值则为校验码。如下所示:             11001100 PLC资料网
         -------------                        
    1011 )11100110000
          1011.......
          ----.......
           1010......
           1011......
           ----......          
              1110...
              1011...
              ----...
               1010.. PLC
               1011..
               ----
                  100  <---校验码                                     发送端将m位消息连同r位校验码(也就是M' + R)一起发送出去,接收端按同样的方法算出收

[1] [2] [3] [4]  下一页


本文关键字:暂无联系方式PLC入门plc技术 - PLC入门