原理
假设CRC8校验slave address + data byte
传入两个字节的数据(16位)
CRC初始值及校验key查看数据手册 不同芯片有不同的要求
如(BQ76930)
The CRC polynomial is x8 + x2 + x + 1, and the initial value is 0.
因此,初始CRC=0,多项式表示 1 0000 0111 有提到的位为1 最高位不需要参与校验 结果key为0x07
步骤
1、进行两轮循环 每个循环校验8位
2、在for循环中对CRC进行8次处理,从最高位开始 如果CRC为0则左移1位。如果不为0,则CRC先左移1位,然后和key进行异或
3、每个for中都有一次字节ptr(8位)& i 相当于ptr为掩码 从高位到低位轮询 如果为1 则CRC进行异或 否则不进行操作
数据0x11 key0x07 结果0x77
代码
unsigned char CRC8(unsigned char *ptr, unsigned char len,unsigned char key)
{
unsigned char i;
unsigned char crc=0;
while(len--!=0)
{
for(i=0x80; i!=0; i/=2)
{
if((crc & 0x80) != 0)
{
crc *= 2;
crc ^= key;
}
else
crc *= 2;
if((*ptr & i)!=0)