[导读]什么是CRC校验?CRC即循环冗余校验码(Cyclic Redundancy Check):是数据通信领域中最常用的一种查错校验码,其特征是信息字段和校验字段的长度可以任意选定。奇偶校验虽然简单,但是漏检率太高,而CRC则要低的多,所以大多数都是使用CRC来校验。CRC也称为多项式码。
什么是CRC校验?
CRC即循环冗余校验码(Cyclic Redundancy Check):是数据通信领域中最常用的一种查错校验码,其特征是信息字段和校验字段的长度可以任意选定。奇偶校验虽然简单,但是漏检率太高,而CRC则要低的多,所以大多数都是使用CRC来校验。CRC也称为多项式码。
循环冗余检查(CRC)是一种数据传输检错功能,对数据进行多项式计算,并将得到的结果附在帧的后面,接收设备也执行类似的算法,进而可以保证在软件层次上数据传输的正确性和完整性。
CRC-16校验码的应用
根据Modbus协议,常规485通讯的信息发送形式如下:
地址 | 功能码 | 数据信息 | 校验码 |
---|---|---|---|
1byte | 1byte | N byte | 2byte |
其中2 Byte的校验码一般就是采用CRC16。
我们之前的网文《485型风速和风向变送器数据包解析》中介绍的通讯协议就是16位CRC码。
CRC-16校验码计算方法
1. 计算法
此方法缺点是计算量大,有时不方便使用在单片机中。
unsigned int calccrc(unsigned char crcbuf, unsigned int crc)
{
unsigned char i;
crc = crc ^ crcbuf;
for (i = 0; i < 8; i++)
{
unsigned char chk;
chk = crc & 1;
crc = crc >> 1;
crc = crc & 0x7fff;
if (chk == 1)
crc = crc ^ 0xa001;
crc = crc & 0xffff;
}