CRC計算通常會有分成 CRC8、 CRC16、 CRC12、 CRC32.
CRC8 = X^8 + X^2 + X + 1 0x07(0x107)
CRC8 = X^8 + X^5 + X^4 + 1 0x31(0x131)
CRC8 = X^8 + X^6 + X^4 + X^3 + X^2 + X 0x5E(0x15E)
Note : CRC提及的位寬(W, Width),這個位數是多項式的最高位,所以對於CRC8的W指的就是 X^8。
剛剛有提到說最高位一定是1,所以衍生一種寫法較做簡記去除最高位寫下多項式的16進制數值。
除了這樣寫下方便之外,在寫程式時也有它的用途。
0x107 --> 0x07
0x131 --> 0x31
0x15E --> 0x5E
CRC8 代碼
uint8_t crc8_calculate(uint8_t data, uint8_t crc){ int i = ;
uint8_t crc_poly = 0x07;
crc ^= data; for(i = ; i < ; i++){ if(crc & 0x80){
crc <<= ;
crc ^= crc_poly;
}
else
crc <<= ;
}
return (crc & 0xFF);
}