CRC校验原理与程序设计——(RS485总线系统应用之1)
1.1 CRC的基本概念:
CRC是英文Cyclical Redundancy Check的缩写,翻译成中文通常称作循环冗余校验或简称为CRC校验。它是数据传输领域中最常用的一种差错校验方法,其特点是传输数据和CRC校验值的长度可以任意选定。在当今手机、计算机和数码产品普及的信息数字化时代,CRC校验无处不在。CRC分为多种标准,例如:CRC -12码通常用来传送6-bit字符串。CRC-16及CRC-CCITT码则用是来传送8-bit字符,其中CRC-16多为美国采用,而CRC-CCITT多为欧洲国家所采用。而CRC-32码大都被应用在Point-to-Point的同步传输中。更多的CRC校验标准类型参见附表:CRC校验标准类型。
1.2 CRC校验的基本原理:
V(x)=A(x)g(x)=xRm(x) + r(x);
其中: m(x)为被校验数据的K-1次多项式
2. CRC校验码的计算步骤:
例如:有一个要发送的7位二进制数1011001;对应的m(x)=x6+ x4+ x3+ 1。设CRC校验码取4位并设g(x)=x4+ x + 1,则该多项式对应的值是10011。根据CRC规则,为保证被除数够除,首先需将要发送的数扩大2R即24倍(左移4位),得到10110010000,对应的xRm(x)=x10+ x8+ x7+ x4。
10110010000
10011
=00101010000
=00001100000
=00000101100
=00000001010
3. CRC校验的程序设计
下面以最常用的CRC-16-IBM校验标准为例来说明CRC校验码的生成过程。 因为CRC-16码由两个字节构成,所以首先要准备一个16位的CRC寄存器,并将每一位都置1。具体的计算步骤为:
① 设置CRC寄存器,并给其赋值FFFFH。
② 将被校验数据的第一个字节(8Bit)与CRC寄存器的低8位进行异或,结果存CRC寄存器。
③CRC寄存器的值向右移一位,最高位(MSB)补零,检查移出的最低位(LSB)是否为1。
④ 如果LSB为0,重复第三步;若LSB为1,CRC寄存器与CRC16多项式值A001H相异或。
⑤ 重复第③与第④步,直到该字节的8次移位全部完成。
⑥ 如果被校验数据有多个字节,则重复第②至第⑤步直到所有数据全部处理完。
⑦ 最终CRC寄存器的内容即为CRC值。
3.1用查表法求CRC函数的程序
3.1.1用VC编写的程序
unsigned short CRC16(puchMsg, usDataLen)
unsigned char * puchMsg ;
unsigned short usDataLen ;
{
CRC校验RS485总 相关文章:
- Windows CE 进程、线程和内存管理(11-09)
- RedHatLinux新手入门教程(5)(11-12)
- uClinux介绍(11-09)
- openwebmailV1.60安装教学(11-12)
- Linux嵌入式系统开发平台选型探讨(11-09)
- Windows CE 进程、线程和内存管理(二)(11-09)