Added CRC8 generating function
This commit is contained in:
parent
4833a4fb99
commit
9b6c86454b
22
fw/Core/Inc/crc8.h
Normal file
22
fw/Core/Inc/crc8.h
Normal file
@ -0,0 +1,22 @@
|
|||||||
|
/*
|
||||||
|
* crc.h
|
||||||
|
*
|
||||||
|
* Created on: Jun 9, 2021
|
||||||
|
* Author: user
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef INC_CRC8_H_
|
||||||
|
#define INC_CRC8_H_
|
||||||
|
|
||||||
|
#include "stdint.h"
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Definitions & macros
|
||||||
|
*/
|
||||||
|
|
||||||
|
#define CRC8_POLYNOMIAL 0x31
|
||||||
|
#define CRC8_INIT 0xFF
|
||||||
|
|
||||||
|
uint8_t crc8_calculate(const uint8_t *data, uint16_t count);
|
||||||
|
|
||||||
|
#endif /* INC_CRC8_H_ */
|
28
fw/Core/Src/crc8.c
Normal file
28
fw/Core/Src/crc8.c
Normal file
@ -0,0 +1,28 @@
|
|||||||
|
/*
|
||||||
|
* crc.c
|
||||||
|
*
|
||||||
|
* Created on: Jun 9, 2021
|
||||||
|
* Author: user
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "crc8.h"
|
||||||
|
|
||||||
|
/* Stolen from Sensirion SCD4x datasheet, section 3.11 */
|
||||||
|
uint8_t crc8_calculate(const uint8_t *data, uint16_t count)
|
||||||
|
{
|
||||||
|
uint16_t current_byte;
|
||||||
|
uint8_t crc = CRC8_INIT;
|
||||||
|
uint8_t crc_bit;
|
||||||
|
/* calculates 8-Bit checksum with given polynomial */
|
||||||
|
for (current_byte = 0; current_byte < count; ++current_byte) {
|
||||||
|
crc ^= (data[current_byte]);
|
||||||
|
for(crc_bit = 8; crc_bit > 0; --crc_bit) {
|
||||||
|
if (crc & 0x80) {
|
||||||
|
crc =(crc << 1) ^ CRC8_POLYNOMIAL;
|
||||||
|
} else {
|
||||||
|
crc = (crc << 1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return crc;
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user