最近使用到一款芯片有用到8位的CRC校验,才有这篇文章。希望能给各位网友有一定的帮助!有了CRC的存在可以让数据的准确效率提高。关于CRC的基础我这不在过多的赘述,网上已经有很多的资料。
CRC计算步骤描述:
多项式:x8+x2+x+1(0x07)
初始值:0x41
1、预置一个8位的寄存器并且赋初始值,称此寄存器为CRC寄存器
2、把第一个数据(8位)与CRC寄存器相异或运算,结果存放于CRC寄存器中
3、判断CRC寄存器的最高位(MSB);1:对CRC寄存器进行左移一位并异或上多项式;0:对CRC寄存器进行左移一位
4、重复步骤3,进行8次数据左移,这样整个8位数据全部进行了处理
5、重复步骤2至4,进行数据下一个数据处理
6、将数据的所有字节按上述步骤计算完成后,得到的CRC寄存器内容即为CRC校验码
以下是C语言代码
unsigned char CRC8 (unsigned char *Buf, unsigned char Len)
{
unsigned char i, j = 0;
unsigned char CRC = 0x41;
while(Len-- != 0)
{
CRC ^= *(Buf + j); // 数据与CRC寄存器相异或,结果存放于CRC寄存器
for(i = 0x80; i > 0; i >>= 1)
{
if(CRC & 0x80) // CRC寄存器左移1位并且与多项式进行异或
{
CRC <<= 1;
CRC ^= 0x07;
}
else // CRC寄存器左移1位
CRC <<= 1;
}
j++;
}
return CRC;
}
若有错误希望各位能够能评论,谢谢!