CRC校验原理,参见:
参考了这里的算法实现:
https://blog.csdn.net/songdawww/article/details/52198833
特别需要关注的是,对传输的每一个字节的与CRC多项式校验完以后的校验值,要和下一个需要的校验的字节先异或,然后再与CRC多项式执行校验。当最后一个数据校验完以后,需左移一位,即获得CRC7的校验结果。
uint8_t checkCRC7(uint8_t *data, uint32_t len){
uint8_t crc = 0x00;
uint8_t crcP = 0x89;
uint8_t i, j;
for ( i = 0; i < len; i++){
crc ^= data[i];
for (j = 0; j < 8; j++){
if ( crc &0x80){
crc ^= 0x89;
}
crc = crc <<1;
}
}
crc = crc >> 1;
return crc;
}