Merge branch 'sht4x_minimal' of gitlab.com:HDIoT/smart_household/wired_sensors/iaq_wired_sensor into sht4x_minimal
This commit is contained in:
commit
ec5992d368
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_ */
|
@ -10,7 +10,9 @@
|
||||
|
||||
#include "stdint.h"
|
||||
#include "stm32l0xx_ll_i2c.h"
|
||||
#include "stm32l0xx_ll_utils.h"
|
||||
#include "i2c.h"
|
||||
#include "crc8.h"
|
||||
|
||||
/*
|
||||
* Defines & macros
|
||||
@ -24,6 +26,7 @@
|
||||
|
||||
#define SHT4X_OK 0
|
||||
#define SHT4X_ERROR -1 // generic error
|
||||
#define SHT4X_CRC8_ERROR -2 // checksum failed
|
||||
|
||||
/*
|
||||
* Data types
|
||||
|
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;
|
||||
}
|
@ -34,6 +34,7 @@ int8_t sht4x_measure(int *temperature, int *relative_humidity)
|
||||
if (result != I2C_OK) {
|
||||
return SHT4X_ERROR;
|
||||
}
|
||||
// TODO checksum
|
||||
// Convert to T and RH; taken directly from pseudocode in SHT4x datasheet, page 3
|
||||
uint32_t t_ticks = (buffer[0] << 8) + buffer[1];
|
||||
uint32_t rh_ticks = (buffer[3] << 8) + buffer[4];
|
||||
|
Loading…
Reference in New Issue
Block a user