[imu] Fix MPU start bugIf the MPU starts up slowly this could stop if from being initialized.Now it waits until it is detected before initialization.

[imu] Fix MPU6000 SPI start bug

If the MPU starts up slowly this could stop if from being initialized.
Now it waits until it is detected before initialization.
This commit is contained in:
Felix Ruess
2016-04-17 12:22:28 +02:00
+11 -1
View File
@@ -77,10 +77,20 @@ static void mpu60x0_spi_write_to_reg(void *mpu, uint8_t _reg, uint8_t _val)
void mpu60x0_spi_start_configure(struct Mpu60x0_Spi *mpu) void mpu60x0_spi_start_configure(struct Mpu60x0_Spi *mpu)
{ {
if (mpu->config.init_status == MPU60X0_CONF_UNINIT) { if (mpu->config.init_status == MPU60X0_CONF_UNINIT) {
// First check if we found the chip (succesfull WHO_AM_I response)
if(mpu->spi_trans.status == SPITransSuccess && mpu->rx_buf[1] == MPU60X0_WHOAMI_REPLY) {
mpu->config.init_status++; mpu->config.init_status++;
if (mpu->spi_trans.status == SPITransSuccess || mpu->spi_trans.status == SPITransDone) { mpu->spi_trans.status = SPITransDone;
mpu60x0_send_config(mpu60x0_spi_write_to_reg, (void *)mpu, &(mpu->config)); mpu60x0_send_config(mpu60x0_spi_write_to_reg, (void *)mpu, &(mpu->config));
} }
// Send WHO_AM_I to check if chip is there
else if(mpu->spi_trans.status != SPITransRunning && mpu->spi_trans.status != SPITransPending) {
mpu->spi_trans.output_length = 1;
mpu->spi_trans.input_length = 2;
mpu->tx_buf[0] = MPU60X0_REG_WHO_AM_I | MPU60X0_SPI_READ;
spi_submit(mpu->spi_p, &(mpu->spi_trans));
}
} }
} }