#include "crc8.h" /** * @funtion:crc8多项式冗余校验 * @param 1:pData,计算数据源地址 * @param 2:dataLen,计算数据源长度 * @param 3:initialValue,crc结果初值 * @param 4:polynomial,多项式 * * @return :校验结果 */ uint8_t crc8( uint8_t *pData, uint16_t dataLen, uint8_t initialValue, uint8_t polynomial ) { uint8_t i; uint8_t crc; crc = initialValue; while (dataLen --) { crc ^= *pData ++; for( i = 0; i < 8; i++ ) { if(crc & 0x80) { crc <<= 1; // shift left once crc ^= polynomial; // XOR with polynomial } else { crc <<= 1; // shift left once } } } return crc; } /** * @funtion :\ * @param 1:pData,计算数据源地址 * @param 2:dataLen,计算数据源长度 * @param 3:targetCRC,对比结果CRC * * @return :对比校验结果,=1校验成功,=0校验失败 */ int cmp_crc8( uint8_t *pData, uint16_t dataLen, uint8_t targetCRC) { uint8_t crc = crc8(pData, dataLen, 0x55, 0x07); printf("cmp_crc8 crc = 0x%x\n", crc); if (crc == targetCRC) { return 1; } return 0; } /** * @funtion :\ * @param 1:pData,计算数据源地址 * @param 2:dataLen,计算数据源长度 * * @return :返回CRC结果 */ int get_crc8( uint8_t *pData, uint16_t dataLen) { return crc8(pData, dataLen, 0x55, 0x07); }