CRC-8(PEC)是具有多项式的CRC-8 X8+X2+X1+1。
X8+X2+X1+1 = 2^8+2^2+2^1+1 = 0x107 = 1 0000 0111
例如:0XB4经过CRC-8(PEC)后得到0X05,以下是换算过程
1011 0100 0000 0000 (0XB4<<8)
^ 1000 0011 1xxx xxxx (0x107)
0011 0111 1000 0000
^ 10 0000 111x xxxx
0001 0111 0110 0000
^ 1 0000 0111 xxxx
0000 0111 0001 0000
^ 100 0001 11xx
0000 0011 0000 1100
^ 10 0000 111x
0000 0001 0000 0010
^ 1 0000 0111
0000 0000 0000 0101 = 0x05
源代码实现:
static uint8_t PEC_Calculation(uint8_t *dat , uint8_t len)
{
uint8_t i;
uint8_t crc=0;
while( len-- )
{
crc ^= *dat++;
for( i=0 ; i<8 ; i++ )
{
if( crc&0x80 ) {
crc = (crc<<1)^0x07;
} else {
crc = (crc<<1);
}
}
}
return crc;
}