mirror of
https://github.com/betaflight/betaflight.git
synced 2025-07-21 15:25:36 +03:00
Restore zero i2c addr when detect failed
This commit is contained in:
parent
f00b885799
commit
c5f488ed07
3 changed files with 25 additions and 4 deletions
|
@ -169,6 +169,8 @@ bool bmp085Detect(const bmp085Config_t *config, baroDev_t *baro)
|
|||
{
|
||||
uint8_t data;
|
||||
bool ack;
|
||||
bool defaultAddressApplied = false;
|
||||
|
||||
#if defined(BARO_EOC_GPIO)
|
||||
IO_t eocIO = IO_NONE;
|
||||
#endif
|
||||
|
@ -200,6 +202,7 @@ bool bmp085Detect(const bmp085Config_t *config, baroDev_t *baro)
|
|||
if ((busdev->bustype == BUSTYPE_I2C) && (busdev->busdev_u.i2c.address == 0)) {
|
||||
// Default address for BMP085
|
||||
busdev->busdev_u.i2c.address = BMP085_I2C_ADDR;
|
||||
defaultAddressApplied = true;
|
||||
}
|
||||
|
||||
ack = bmp085ReadRegister(busdev, BMP085_CHIP_ID__REG, 1, &data); /* read Chip Id */
|
||||
|
@ -234,6 +237,10 @@ bool bmp085Detect(const bmp085Config_t *config, baroDev_t *baro)
|
|||
|
||||
BMP085_OFF;
|
||||
|
||||
if (defaultAddressApplied) {
|
||||
busdev->busdev_u.i2c.address = 0;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
|
|
|
@ -127,18 +127,23 @@ bool bmp280Detect(baroDev_t *baro)
|
|||
delay(20);
|
||||
|
||||
busDevice_t *busdev = &baro->busdev;
|
||||
bool defaultAddressApplied = false;
|
||||
|
||||
bmp280BusInit(busdev);
|
||||
|
||||
if ((busdev->bustype == BUSTYPE_I2C) && (busdev->busdev_u.i2c.address == 0)) {
|
||||
// Default address for BMP280
|
||||
busdev->busdev_u.i2c.address = BMP280_I2C_ADDR;
|
||||
defaultAddressApplied = true;
|
||||
}
|
||||
|
||||
bmp280ReadRegister(busdev, BMP280_CHIP_ID_REG, 1, &bmp280_chip_id); /* read Chip Id */
|
||||
|
||||
if (bmp280_chip_id != BMP280_DEFAULT_CHIP_ID) {
|
||||
bmp280BusDeinit(busdev);
|
||||
if (defaultAddressApplied) {
|
||||
busdev->busdev_u.i2c.address = 0;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
|
|
|
@ -122,6 +122,7 @@ bool ms5611Detect(baroDev_t *baro)
|
|||
{
|
||||
uint8_t sig;
|
||||
int i;
|
||||
bool defaultAddressApplied = false;
|
||||
|
||||
delay(10); // No idea how long the chip takes to power-up, but let's make it 10ms
|
||||
|
||||
|
@ -132,11 +133,11 @@ bool ms5611Detect(baroDev_t *baro)
|
|||
if ((busdev->bustype == BUSTYPE_I2C) && (busdev->busdev_u.i2c.address == 0)) {
|
||||
// Default address for MS5611
|
||||
busdev->busdev_u.i2c.address = MS5611_I2C_ADDR;
|
||||
defaultAddressApplied = true;
|
||||
}
|
||||
|
||||
if (!ms5611ReadCommand(busdev, CMD_PROM_RD, 1, &sig) || sig == 0xFF) {
|
||||
ms5611BusDeinit(busdev);
|
||||
return false;
|
||||
goto fail;
|
||||
}
|
||||
|
||||
ms5611_reset(busdev);
|
||||
|
@ -147,8 +148,7 @@ bool ms5611Detect(baroDev_t *baro)
|
|||
|
||||
// check crc, bail out if wrong - we are probably talking to BMP085 w/o XCLR line!
|
||||
if (ms5611_crc(ms5611_c) != 0) {
|
||||
ms5611BusDeinit(busdev);
|
||||
return false;
|
||||
goto fail;
|
||||
}
|
||||
|
||||
// TODO prom + CRC
|
||||
|
@ -161,6 +161,15 @@ bool ms5611Detect(baroDev_t *baro)
|
|||
baro->calculate = ms5611_calculate;
|
||||
|
||||
return true;
|
||||
|
||||
fail:;
|
||||
ms5611BusDeinit(busdev);
|
||||
|
||||
if (defaultAddressApplied) {
|
||||
busdev->busdev_u.i2c.address = 0;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
static void ms5611_reset(busDevice_t *busdev)
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue