[driver/mpu6500] wait until coming out of sleep mode to read WHO_AM_I, directly taken from #2538

This commit is contained in:
nathan 2017-03-06 22:56:41 -08:00 committed by borisbstyle
parent b9363d0d37
commit 5572cb0575
1 changed files with 28 additions and 18 deletions

View File

@ -37,6 +37,8 @@
#define DISABLE_MPU6500 IOHi(mpuSpi6500CsPin)
#define ENABLE_MPU6500 IOLo(mpuSpi6500CsPin)
#define BIT_SLEEP 0x40
static IO_t mpuSpi6500CsPin = IO_NONE;
bool mpu6500WriteRegister(uint8_t reg, uint8_t data)
@ -79,18 +81,25 @@ static void mpu6500SpiInit(void)
static uint8_t mpuDetected = MPU_NONE;
uint8_t mpu6500SpiDetect(void)
{
uint8_t tmp;
uint8_t tmp, detectRetries;
mpu6500SpiInit();
mpu6500ReadRegister(MPU_RA_WHO_AM_I, 1, &tmp);
delayMicroseconds(15);
do {
mpu6500ReadRegister(MPU_RA_PWR_MGMT_1, 1, &tmp);
delayMicroseconds(1);
detectRetries++;
} while (tmp != BIT_SLEEP && detectRetries < 30);
if (tmp == BIT_SLEEP) {
mpu6500ReadRegister(MPU_RA_WHO_AM_I, 1, &tmp);
delayMicroseconds(15);
switch (tmp) {
case MPU6500_WHO_AM_I_CONST:
mpuDetected = MPU_65xx_SPI;
break;
case MPU9250_WHO_AM_I_CONST:
case MPU9255_WHO_AM_I_CONST:
mpuDetected = MPU_9250_SPI;
break;
case ICM20608G_WHO_AM_I_CONST:
@ -102,6 +111,7 @@ uint8_t mpu6500SpiDetect(void)
default:
mpuDetected = MPU_NONE;
}
}
return mpuDetected;
}