42#define CHIP_NAME "TE HTU31D"
43#define MANUFACTURER_NAME "TE"
44#define SUPPLY_VOLTAGE_MIN 3.0f
45#define SUPPLY_VOLTAGE_MAX 5.5f
46#define MAX_CURRENT 0.414f
47#define TEMPERATURE_MIN -40.0f
48#define TEMPERATURE_MAX 125.0f
49#define DRIVER_VERSION 1000
54#define HTU31D_COMMAND_CONVERSION (0x1 << 6)
55#define HTU31D_COMMAND_READ_T_RH (0x00)
56#define HTU31D_COMMAND_READ_RH (0x1 << 4)
57#define HTU31D_COMMAND_RESET (0x1E)
58#define HTU31D_COMMAND_HEATER_ON (0x1 << 2)
59#define HTU31D_COMMAND_HEATER_OFF (0x1 << 1)
60#define HTU31D_COMMAND_READ_SERIAL_NUMBER (0x0A)
61#define HTU31D_COMMAND_READ_DIAGNOSTIC (1 << 3)
74static uint8_t a_htu31d_write(
htu31d_handle_t *handle, uint8_t reg, uint8_t *buf, uint16_t len)
95static uint8_t a_htu31d_read(
htu31d_handle_t *handle, uint8_t reg, uint8_t *buf, uint16_t len)
115static uint8_t a_htu31d_crc(uint8_t *buf, uint8_t len, uint32_t crc)
117 uint32_t polynom = 0x98800000UL;
118 uint32_t msb = 0x80000000UL;
119 uint32_t mask = 0xFF800000UL;
124 result = (uint32_t)buf[0] << 8;
128 result = (uint32_t)buf[0] << 16;
129 result |= (uint32_t)buf[1] << 8;
146 if ((result & msb) != 0)
148 result = ((result ^ polynom) & mask) | (result & (~mask));
154 if ((result & 0xFF) == (crc & 0xFF))
338 handle->
debug_print(
"htu31d: get serial number failed.\n");
342 if (a_htu31d_crc(buf, 3, buf[3]) != 0)
344 handle->
debug_print(
"htu31d: crc checked error.\n");
348 memcpy(number, buf,
sizeof(uint8_t) * 3);
382 handle->
debug_print(
"htu31d: get diagnostic failed.\n");
386 if (a_htu31d_crc(buf, 1, buf[1]) != 0)
388 handle->
debug_print(
"htu31d: crc checked error.\n");
392 *diagnostic = buf[1];
414 uint16_t *temperature_raw,
float *temperature_s,
415 uint16_t *humidity_raw,
float *humidity_s
434 res = a_htu31d_write(handle, prev, NULL, 0);
489 handle->
debug_print(
"htu31d: read t && rh failed.\n");
493 if (a_htu31d_crc(buf, 2, buf[2]) != 0)
495 handle->
debug_print(
"htu31d: crc checked error.\n");
499 if (a_htu31d_crc(buf + 3, 2, buf[5]) != 0)
501 handle->
debug_print(
"htu31d: crc checked error.\n");
505 *temperature_raw = ((uint16_t)buf[0] << 8) | buf[1];
506 *humidity_raw = ((uint16_t)buf[3] << 8) | buf[4];
508 *temperature_s = (float)(*temperature_raw) / 65535.0f * 165.0f - 40.0f;
509 *humidity_s = (float)(*humidity_raw) / 65535.0f * 100.0f;
546 res = a_htu31d_write(handle, prev, NULL, 0);
605 if (a_htu31d_crc(buf, 2, buf[2]) != 0)
607 handle->
debug_print(
"htu31d: crc checked error.\n");
611 *humidity_raw = ((uint16_t)buf[0] << 8) | buf[1];
612 *humidity_s = (float)(*humidity_raw) / 65535.0f * 100.0f;
642 handle->
debug_print(
"htu31d: iic_init is null.\n");
648 handle->
debug_print(
"htu31d: iic_deinit is null.\n");
654 handle->
debug_print(
"htu31d: iic_read is null.\n");
660 handle->
debug_print(
"htu31d: iic_write is null.\n");
666 handle->
debug_print(
"htu31d: delay_ms is null.\n");
680 handle->
debug_print(
"htu31d: soft reset failed.\n");
718 handle->
debug_print(
"htu31d: soft reset failed.\n");
725 handle->
debug_print(
"htu31d: iic deinit failed.\n");
862 return a_htu31d_write(handle, reg, buf, len);
889 return a_htu31d_read(handle, reg, buf, len);
#define HTU31D_COMMAND_RESET
#define HTU31D_COMMAND_READ_RH
#define HTU31D_COMMAND_HEATER_ON
#define HTU31D_COMMAND_READ_T_RH
#define HTU31D_COMMAND_CONVERSION
chip command definition
#define HTU31D_COMMAND_HEATER_OFF
#define SUPPLY_VOLTAGE_MAX
#define HTU31D_COMMAND_READ_SERIAL_NUMBER
#define HTU31D_COMMAND_READ_DIAGNOSTIC
#define MANUFACTURER_NAME
#define SUPPLY_VOLTAGE_MIN
#define CHIP_NAME
chip information definition
driver htu31d header file
uint8_t htu31d_soft_reset(htu31d_handle_t *handle)
soft reset
uint8_t htu31d_set_addr_pin(htu31d_handle_t *handle, htu31d_addr_pin_t addr_pin)
set the address pin
uint8_t htu31d_get_serial_number(htu31d_handle_t *handle, uint8_t number[3])
get the serial number
struct htu31d_info_s htu31d_info_t
htu31d information structure definition
uint8_t htu31d_deinit(htu31d_handle_t *handle)
close the chip
uint8_t htu31d_get_humidity_osr(htu31d_handle_t *handle, htu31d_humidity_osr_t *osr)
get humidity osr
htu31d_humidity_osr_t
htu31d humidity osr enumeration definition
uint8_t htu31d_read_humidity(htu31d_handle_t *handle, uint16_t *humidity_raw, float *humidity_s)
read the humidity data
htu31d_temperature_osr_t
htu31d temperature osr enumeration definition
htu31d_addr_pin_t
htu31d addr pin enumeration definition
uint8_t htu31d_init(htu31d_handle_t *handle)
initialize the chip
uint8_t htu31d_set_heater_on(htu31d_handle_t *handle)
enable heater
uint8_t htu31d_set_heater_off(htu31d_handle_t *handle)
disable heater
uint8_t htu31d_read_temperature_humidity(htu31d_handle_t *handle, uint16_t *temperature_raw, float *temperature_s, uint16_t *humidity_raw, float *humidity_s)
read the temperature and humidity data
uint8_t htu31d_info(htu31d_info_t *info)
get chip's information
uint8_t htu31d_get_temperature_osr(htu31d_handle_t *handle, htu31d_temperature_osr_t *osr)
get temperature osr
uint8_t htu31d_set_temperature_osr(htu31d_handle_t *handle, htu31d_temperature_osr_t osr)
set temperature osr
uint8_t htu31d_get_addr_pin(htu31d_handle_t *handle, htu31d_addr_pin_t *addr_pin)
get the address pin
uint8_t htu31d_get_diagnostic(htu31d_handle_t *handle, uint8_t *diagnostic)
get the diagnostic
struct htu31d_handle_s htu31d_handle_t
htu31d handle structure definition
uint8_t htu31d_set_humidity_osr(htu31d_handle_t *handle, htu31d_humidity_osr_t osr)
set humidity osr
uint8_t htu31d_set_reg(htu31d_handle_t *handle, uint8_t reg, uint8_t *buf, uint16_t len)
set the chip register
uint8_t htu31d_get_reg(htu31d_handle_t *handle, uint8_t reg, uint8_t *buf, uint16_t len)
get the chip register
void(* delay_ms)(uint32_t ms)
void(* debug_print)(const char *const fmt,...)
uint8_t(* iic_init)(void)
uint8_t(* iic_write)(uint8_t addr, uint8_t reg, uint8_t *buf, uint16_t len)
uint8_t(* iic_read)(uint8_t addr, uint8_t reg, uint8_t *buf, uint16_t len)
uint8_t(* iic_deinit)(void)
float supply_voltage_max_v
char manufacturer_name[32]
float supply_voltage_min_v