Commit 1201c240 authored by Jordan Yates's avatar Jordan Yates Committed by Benjamin Cabé
Browse files

sensor: bme280: wait for sampling period before checking

Wait until the typical time that the sample would be ready before
starting to poll the status register.

Signed-off-by: default avatarJordan Yates <jordan@embeint.com>
parent bdb04dbf
Loading
Loading
Loading
Loading
+14 −1
Changes for drivers/sensor/bosch/bme280/bme280.c: 14 added lines, 1 removed line.
Original line number Diff line number Diff line
@@ -33,6 +33,13 @@ LOG_MODULE_REGISTER(BME280, CONFIG_SENSOR_LOG_LEVEL);
 */
#define BME280_MEASUREMENT_TIMEOUT_MS 150

/* Equation 9.1, with the fractional parts rounded down */
#define BME280_EXPECTED_SAMPLE_TIME_MS                                                             \
	1 + BME280_TEMP_SAMPLE_TIME + BME280_PRESS_SAMPLE_TIME + BME280_HUMIDITY_SAMPLE_TIME

BUILD_ASSERT(BME280_EXPECTED_SAMPLE_TIME_MS < BME280_MEASUREMENT_TIMEOUT_MS,
	     "Expected duration over timeout duration");

struct bme280_config {
	union bme280_bus bus;
	const struct bme280_bus_io *bus_io;
@@ -154,6 +161,7 @@ int bme280_sample_fetch_helper(const struct device *dev,
	struct bme280_data *dev_data = dev->data;
	uint8_t buf[8];
	int32_t adc_press, adc_temp, adc_humidity;
	uint32_t poll_timeout;
	int size = 6;
	int ret;

@@ -173,9 +181,14 @@ int bme280_sample_fetch_helper(const struct device *dev,
	if (ret < 0) {
		return ret;
	}
	/* Wait until the expected measurement time elapses */
	k_sleep(K_MSEC(BME280_EXPECTED_SAMPLE_TIME_MS));
	poll_timeout = BME280_MEASUREMENT_TIMEOUT_MS - BME280_EXPECTED_SAMPLE_TIME_MS;
#else
	poll_timeout = BME280_MEASUREMENT_TIMEOUT_MS;
#endif

	ret = bme280_wait_until_ready(dev, K_MSEC(BME280_MEASUREMENT_TIMEOUT_MS));
	ret = bme280_wait_until_ready(dev, K_MSEC(poll_timeout));
	if (ret < 0) {
		return ret;
	}
+15 −0
Changes for drivers/sensor/bosch/bme280/bme280.h: 15 added lines, 0 removed lines.
Original line number Diff line number Diff line
@@ -82,38 +82,53 @@ extern const struct bme280_bus_io bme280_bus_io_i2c;

#if defined CONFIG_BME280_TEMP_OVER_1X
#define BME280_TEMP_OVER        (1 << 5)
#define BME280_TEMP_SAMPLE_TIME 2
#elif defined CONFIG_BME280_TEMP_OVER_2X
#define BME280_TEMP_OVER        (2 << 5)
#define BME280_TEMP_SAMPLE_TIME 4
#elif defined CONFIG_BME280_TEMP_OVER_4X
#define BME280_TEMP_OVER        (3 << 5)
#define BME280_TEMP_SAMPLE_TIME 8
#elif defined CONFIG_BME280_TEMP_OVER_8X
#define BME280_TEMP_OVER        (4 << 5)
#define BME280_TEMP_SAMPLE_TIME 16
#elif defined CONFIG_BME280_TEMP_OVER_16X
#define BME280_TEMP_OVER        (5 << 5)
#define BME280_TEMP_SAMPLE_TIME 32
#endif

#if defined CONFIG_BME280_PRESS_OVER_1X
#define BME280_PRESS_OVER        (1 << 2)
#define BME280_PRESS_SAMPLE_TIME 2
#elif defined CONFIG_BME280_PRESS_OVER_2X
#define BME280_PRESS_OVER        (2 << 2)
#define BME280_PRESS_SAMPLE_TIME 4
#elif defined CONFIG_BME280_PRESS_OVER_4X
#define BME280_PRESS_OVER        (3 << 2)
#define BME280_PRESS_SAMPLE_TIME 8
#elif defined CONFIG_BME280_PRESS_OVER_8X
#define BME280_PRESS_OVER        (4 << 2)
#define BME280_PRESS_SAMPLE_TIME 16
#elif defined CONFIG_BME280_PRESS_OVER_16X
#define BME280_PRESS_OVER        (5 << 2)
#define BME280_PRESS_SAMPLE_TIME 32
#endif

#if defined CONFIG_BME280_HUMIDITY_OVER_1X
#define BME280_HUMIDITY_OVER        1
#define BME280_HUMIDITY_SAMPLE_TIME 2
#elif defined CONFIG_BME280_HUMIDITY_OVER_2X
#define BME280_HUMIDITY_OVER        2
#define BME280_HUMIDITY_SAMPLE_TIME 4
#elif defined CONFIG_BME280_HUMIDITY_OVER_4X
#define BME280_HUMIDITY_OVER        3
#define BME280_HUMIDITY_SAMPLE_TIME 8
#elif defined CONFIG_BME280_HUMIDITY_OVER_8X
#define BME280_HUMIDITY_OVER        4
#define BME280_HUMIDITY_SAMPLE_TIME 16
#elif defined CONFIG_BME280_HUMIDITY_OVER_16X
#define BME280_HUMIDITY_OVER        5
#define BME280_HUMIDITY_SAMPLE_TIME 32
#endif

#if defined CONFIG_BME280_STANDBY_05MS