71 lines
1.4 KiB
C
71 lines
1.4 KiB
C
/*
|
|
* Copyright (c) 2021 Leonard Pollak
|
|
*
|
|
* SPDX-License-Identifier: Apache-2.0
|
|
*/
|
|
|
|
#ifndef ZEPHYR_DRIVERS_SENSOR_SHT4X_SHT4X_H_
|
|
#define ZEPHYR_DRIVERS_SENSOR_SHT4X_SHT4X_H_
|
|
|
|
#include <zephyr/device.h>
|
|
|
|
#define SHT4X_CMD_READ_SERIAL 0x89
|
|
#define SHT4X_CMD_RESET 0x94
|
|
|
|
#define SHT4X_RESET_WAIT_MS 1
|
|
|
|
#define SHT4X_HEATER_POWER_IDX_MAX 3
|
|
#define SHT4X_HEATER_DURATION_IDX_MAX 2
|
|
|
|
/*
|
|
* CRC parameters were taken from the
|
|
* "Checksum Calculation" section of the datasheet.
|
|
*/
|
|
#define SHT4X_CRC_POLY 0x31
|
|
#define SHT4X_CRC_INIT 0xFF
|
|
|
|
struct sht4x_config {
|
|
struct i2c_dt_spec bus;
|
|
uint8_t repeatability;
|
|
};
|
|
|
|
struct sht4x_data {
|
|
uint16_t t_sample;
|
|
uint16_t rh_sample;
|
|
uint8_t heater_power;
|
|
uint8_t heater_duration;
|
|
};
|
|
|
|
static const uint8_t measure_cmd[3] = {
|
|
0xE0, 0xF6, 0xFD
|
|
};
|
|
|
|
static const uint16_t measure_wait_us[3] = {
|
|
1700, 4500, 8200
|
|
};
|
|
|
|
/*
|
|
* heater specifics
|
|
*
|
|
* power:
|
|
* High power heater pulse -> ~200 mW @3.3V
|
|
* Medium power heater pulse -> ~110 mW @3.3V
|
|
* Low power heater pulse -> ~20 mW @3.3V
|
|
*
|
|
* duration:
|
|
* Long heater pulse -> 1.1s
|
|
* Short heater pulse -> 0.11s
|
|
*/
|
|
|
|
static const int8_t heater_cmd[SHT4X_HEATER_POWER_IDX_MAX][SHT4X_HEATER_DURATION_IDX_MAX] = {
|
|
{ 0x39, 0x32 },
|
|
{ 0x2F, 0x24 },
|
|
{ 0x1E, 0x15 }
|
|
};
|
|
|
|
static const uint32_t heater_wait_ms[SHT4X_HEATER_DURATION_IDX_MAX] = {
|
|
1000, 100
|
|
};
|
|
|
|
#endif /* ZEPHYR_DRIVERS_SENSOR_SHT4X_SHT4X_H_ */
|