欢迎来到天天文库
浏览记录
ID:55250160
大小:14.12 KB
页数:6页
时间:2020-05-07
《最详细易懂的CRC-16校验原理(附源程序).docx》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、最详细易懂的CRC-16校验原理(附源程序)1、循环校验码(CRC码):是数据通信领域中最常用的一种差错校验码,其特征是信息字段和校验字段的长度可以任意选定。2、生成CRC码的基本原理:任意一个由二进制位串组成的代码都可以和一个系数仅为‘0’和‘1’取值的多项式一一对应。例如:代码对应的多项式为x6+x4+x2+x+1,而多项式为x5+x3+x2+x+1对应的代码。标准CRC生成多项式如下表: 名称 生成多项式 简记式* 标准引用 CRC-4 x4+x+1 3 ITUG.704 C
2、RC-8 x8+x5+x4+1 0x31 CRC-8 x8+x2+x1+1 0x07 CRC-8 x8+x6+x4+x3+x2+x1 0x5E CRC-12 x12+x11+x3+x+1 80F CRC-16 x16+x15+x2+1 8005 IBMSDLCCRC16-CCITT x16+x12+x5+1 1021 ISOHDLC
3、,ITUX.25,V.34/V.41/V.42,PPP-FCS CRC-32 x32+x26+x23+...+x2+x+104C11DB7ZIP,RAR,IEEE802LAN/FDDI,IEEE1394,PPP-FCS CRC-32c x32+x28+x27+...+x8+x6+11EDC6F41 SCTP3、CRC-16校验码的使用: 现选择最常用的CRC-16校验,说明它的使用方法。根据Modbus协议,常规485通讯的信息发送形式如下: 地址 功能码 数据信息 校验码 1byte 1byte nbyte 2byte CRC校验是前面几
4、段数据内容的校验值,为一个16位数据,发送时,低8位在前,高8为最后。例如:信息字段代码为:,校验字段为:1010。发送方:发出的传输字段为: 10110011010 信息字段 校验字段接收方:使用相同的计算方法计算出信息字段的校验码,对比接收到的实际校验码,如果相等及信息正确,不相等则信息错误;或者将接受到的所有信息除多项式,如果能够除尽,则信息正确。4、CRC-16校验码计算方法:常用查表法和计算法。计算方法一般都是:(1)、预置1个16位的寄存器为十六进制FFFF(即全为1),称此寄存器为CRC寄存器;(2)、把第一个8
5、位二进制数据(既通讯信息帧的第一个字节)与16位的CRC寄存器的低 8位相异或,把结果放于CRC寄存器,高八位数据不变;(3)、把CRC寄存器的内容右移一位(朝低位)用0填补最高位,并检查右移后的移出位;(4)、如果移出位为0:重复第3步(再次右移一位);如果移出位为1,CRC寄存器与多 项式A001(1010 0000 0000 0001)进行异或;(5)、重复步骤3和4,直到右移8次,这样整个8位数据全部进行了处理;(6)、重复步骤2到步骤5,进行通讯信息帧下一个字节的处理;(7)、将该通讯信息帧所有字节按上述步骤计算完成后,得到的16位CRC寄存器的高、低
6、字节进行交换;(8)、最后得到的CRC寄存器内容即为:CRC码。以上计算步骤中的多项式A001是8005按位颠倒后的结果。查表法是将移位异或的计算结果做成了一个表,就是将0~256放入一个长度为16位的寄存器中的低八位,高八位填充0,然后将该寄存器与多项式0XA001按照上述3、4步骤,直到八位全部移出,最后寄存器中的值就是表格中的数据,高八位、低八位分别单独一个表。 5、提供两个经典的程序示例(皆验证通过)(1) C查表法版本: 特点:速度快,语句少,但表格占用一定的程序空间。 *pucFrame为待校验数据首地址,usLen为待校验数据长度。返回值为校验结果。USHOR
7、TusMBCRC16(UCHAR*pucFrame,USHORTusLen){ UCHARucCRCHi=0xFF; UCHARucCRCLo=0xFF; intiIndex; while(usLen--) { iIndex=ucCRCLo^*(pucFrame++); ucCRCLo=(UCHAR)(ucCRCHi^aucCRCHi[iIndex]); ucCRCHi=auc
此文档下载收益归作者所有