diff --git a/src/drivers/differential_pressure/auav/AUAV.cpp b/src/drivers/differential_pressure/auav/AUAV.cpp index 2533399a35..66f8a3b46b 100644 --- a/src/drivers/differential_pressure/auav/AUAV.cpp +++ b/src/drivers/differential_pressure/auav/AUAV.cpp @@ -65,6 +65,7 @@ AUAV::AUAV(const I2CSPIDriverConfig &config) : _sample_perf(perf_alloc(PC_ELAPSED, MODULE_NAME": read")), _comms_errors(perf_alloc(PC_COUNT, MODULE_NAME": comms errors")) { + I2C::_retries = 5; } AUAV::~AUAV() @@ -130,15 +131,21 @@ int AUAV::init() int AUAV::probe() { - uint8_t res_data = 0; - int status = transfer(nullptr, 0, &res_data, sizeof(res_data)); + uint8_t res_data; - /* Check that the sensor is active. Reported in bit 6 of the status byte */ - if ((res_data & 0x40) == 0) { - status = PX4_ERROR; + for (unsigned i = 0; i < 10; i++) { + res_data = 0; + int status = transfer(nullptr, 0, &res_data, 1); + + /* Check that the sensor is active. Reported in bit 6 of the status byte */ + if (status == PX4_OK && (res_data & 0x40)) { + return PX4_OK; + } + + px4_usleep(10'000); } - return status; + return PX4_ERROR; } void AUAV::handle_state_read_calibdata() diff --git a/src/drivers/differential_pressure/auav/AUAV_Absolute.hpp b/src/drivers/differential_pressure/auav/AUAV_Absolute.hpp index 624ef27079..603649a783 100644 --- a/src/drivers/differential_pressure/auav/AUAV_Absolute.hpp +++ b/src/drivers/differential_pressure/auav/AUAV_Absolute.hpp @@ -51,6 +51,8 @@ static constexpr uint8_t EEPROM_ABS_ES = 0x38; /* Measurement rate is 50Hz */ static constexpr unsigned ABS_MEAS_RATE = 50; static constexpr int64_t ABS_CONVERSION_INTERVAL = (1000000 / ABS_MEAS_RATE); /* microseconds */ +/* reading too fast can yield all zero data -> incorrect sensor reading */ +static_assert(ABS_CONVERSION_INTERVAL >= 7000, "Conversion interval is too fast"); /* Conversions */ static constexpr float MBAR_TO_PA = 100.0f; diff --git a/src/drivers/differential_pressure/auav/AUAV_Differential.hpp b/src/drivers/differential_pressure/auav/AUAV_Differential.hpp index 412066a6ac..168fb322b6 100644 --- a/src/drivers/differential_pressure/auav/AUAV_Differential.hpp +++ b/src/drivers/differential_pressure/auav/AUAV_Differential.hpp @@ -51,6 +51,8 @@ static constexpr uint8_t EEPROM_DIFF_ES = 0x34; /* Measurement rate is 100Hz */ static constexpr unsigned DIFF_MEAS_RATE = 100; static constexpr int64_t DIFF_CONVERSION_INTERVAL = (1000000 / DIFF_MEAS_RATE); /* microseconds */ +/* reading too fast can yield all zero data -> incorrect sensor reading */ +static_assert(DIFF_CONVERSION_INTERVAL >= 7000, "Conversion interval is too fast"); /* Conversions */ static constexpr float INH_TO_PA = 249.08f;