工作原理:
循环冗余校验码(CRC)的基本原理是:在K位信息码后再拼接R位的校验码,整个编码长度为N位,因此,这种编码也叫(N,K)码。对于一个给定的(N,K)码,可以证明存在一个最高次幂为N-K=R的多项式G(x)。根据G(x)可以生成K位信息的校验码,而G(x)叫做这个CRC码的生成多项式。 校验码的具体生成过程为:假设要发送的信息用多项式C(X)表示,将C(x)左移R位(可表示成C(x)*2R),这样C(x)的右边就会空出R位,这就是校验码的位置。用 C(x)*2R 除以生成多项式G(x)得到的余数就是校验码。
任意一个由二进制位串组成的代码都可以和一个系数仅为‘0’和‘1’取值的多项式一一对应。例如:代码1010111对应的多项式为x6+x4+x2+x+1,而多项式为x5+x3+x2+x+1对应的代码101111。
产生CRC的原理:
一 装载一个16位寄存器,所有数位都为1。
二 取补校验串的一个字节与16位寄存器的高位字节进行“异或”运算,运算结果放入这个16位寄存器。
三 把这个16位寄存器向右移一位。
四 若向右移出数位是1,则生成多项式1010 0000 0000 0001(A001)和这个寄存器值进行“异或”运算,若向右移出数位是0,则返回3。
五 重复三 四步,直至移出八位。
六 取补校验串的下一个字节。
七 重复二-六,直到被校验串所有字节均与16位寄存器进行“异或”运算,并移位八次。
八 这个16位寄存器的内容即2字节CRC错误校验码。
程序DEMO 1:
程序DEMO 2(未验证):