如果是没有CRC基础的,请先查看下CRC校验原理
- modbus-crc知识点
1.多项式是可以人为设定的,但是有国际通行标准。国标crc倒序多项式为0xA001,正序为0x8005
2.crc倒序与正序的区别在于,正序是内存数据是高位在左,低位在右即大端模式,倒序则相反。
3.modbus-crc的校验码是16位,初始值是0xffff
INT16U GetModbusCrc(INT8U *ptr, INT16U count)
{
int i, j;
INT16U crcCode, Value;
crcCode = 0xffff;//校验码初始值
Value = 0;
for (i = 0; i < count; i++)//循环计算帧数据
{
Value = ptr[i];
for (j = 0; j < 8; j++)//计算一个字节8位
{
if (((crcCode ^ Value) & 0x0001) != 0)
{
crcCode >>= 1;
crcCode ^= 0xA001;//倒序多项式
}
else
crcCode >>= 1;
Value >>= 1;
}
}
return crcCode;
}