mirror of
https://github.com/esphome/esphome.git
synced 2024-11-30 02:34:12 +01:00
Add a soft reset in setup() for bmp280 (#4329)
fixes https://github.com/esphome/issues/issues/3383
This commit is contained in:
parent
7f97f42552
commit
e1cdeb7c8f
1 changed files with 26 additions and 0 deletions
|
@ -1,4 +1,5 @@
|
||||||
#include "bmp280.h"
|
#include "bmp280.h"
|
||||||
|
#include "esphome/core/hal.h"
|
||||||
#include "esphome/core/log.h"
|
#include "esphome/core/log.h"
|
||||||
|
|
||||||
namespace esphome {
|
namespace esphome {
|
||||||
|
@ -11,8 +12,11 @@ static const uint8_t BMP280_REGISTER_CONTROL = 0xF4;
|
||||||
static const uint8_t BMP280_REGISTER_CONFIG = 0xF5;
|
static const uint8_t BMP280_REGISTER_CONFIG = 0xF5;
|
||||||
static const uint8_t BMP280_REGISTER_PRESSUREDATA = 0xF7;
|
static const uint8_t BMP280_REGISTER_PRESSUREDATA = 0xF7;
|
||||||
static const uint8_t BMP280_REGISTER_TEMPDATA = 0xFA;
|
static const uint8_t BMP280_REGISTER_TEMPDATA = 0xFA;
|
||||||
|
static const uint8_t BMP280_REGISTER_RESET = 0xE0;
|
||||||
|
|
||||||
static const uint8_t BMP280_MODE_FORCED = 0b01;
|
static const uint8_t BMP280_MODE_FORCED = 0b01;
|
||||||
|
static const uint8_t BMP280_SOFT_RESET = 0xB6;
|
||||||
|
static const uint8_t BMP280_STATUS_IM_UPDATE = 0b01;
|
||||||
|
|
||||||
inline uint16_t combine_bytes(uint8_t msb, uint8_t lsb) { return ((msb & 0xFF) << 8) | (lsb & 0xFF); }
|
inline uint16_t combine_bytes(uint8_t msb, uint8_t lsb) { return ((msb & 0xFF) << 8) | (lsb & 0xFF); }
|
||||||
|
|
||||||
|
@ -66,6 +70,28 @@ void BMP280Component::setup() {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Send a soft reset.
|
||||||
|
if (!this->write_byte(BMP280_REGISTER_RESET, BMP280_SOFT_RESET)) {
|
||||||
|
this->mark_failed();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
// Wait until the NVM data has finished loading.
|
||||||
|
uint8_t status;
|
||||||
|
uint8_t retry = 5;
|
||||||
|
do {
|
||||||
|
delay(2);
|
||||||
|
if (!this->read_byte(BMP280_REGISTER_STATUS, &status)) {
|
||||||
|
ESP_LOGW(TAG, "Error reading status register.");
|
||||||
|
this->mark_failed();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
} while ((status & BMP280_STATUS_IM_UPDATE) && (--retry));
|
||||||
|
if (status & BMP280_STATUS_IM_UPDATE) {
|
||||||
|
ESP_LOGW(TAG, "Timeout loading NVM.");
|
||||||
|
this->mark_failed();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
// Read calibration
|
// Read calibration
|
||||||
this->calibration_.t1 = this->read_u16_le_(0x88);
|
this->calibration_.t1 = this->read_u16_le_(0x88);
|
||||||
this->calibration_.t2 = this->read_s16_le_(0x8A);
|
this->calibration_.t2 = this->read_s16_le_(0x8A);
|
||||||
|
|
Loading…
Reference in a new issue