Merge pull request #3502 from martinbudden/bf_gyro_spi_detect2

Gyro SPI detect function now returns gyro type
This commit is contained in:
Martin Budden 2017-07-12 15:54:13 +01:00 committed by GitHub
commit 43d8657e5e
9 changed files with 40 additions and 33 deletions

View File

@ -240,6 +240,9 @@ static bool detectSPISensorsAndUpdateDetectionResult(gyroDev_t *gyro)
{
UNUSED(gyro); // since there are FCs which have gyro on I2C but other devices on SPI
uint8_t sensor = MPU_NONE;
UNUSED(sensor);
#ifdef USE_GYRO_SPI_MPU6000
#ifdef MPU6000_SPI_INSTANCE
spiBusSetInstance(&gyro->bus, MPU6000_SPI_INSTANCE);
@ -247,8 +250,9 @@ static bool detectSPISensorsAndUpdateDetectionResult(gyroDev_t *gyro)
#ifdef MPU6000_CS_PIN
gyro->bus.spi.csnPin = gyro->bus.spi.csnPin == IO_NONE ? IOGetByTag(IO_TAG(MPU6000_CS_PIN)) : gyro->bus.spi.csnPin;
#endif
if (mpu6000SpiDetect(&gyro->bus)) {
gyro->mpuDetectionResult.sensor = MPU_60x0_SPI;
sensor = mpu6000SpiDetect(&gyro->bus);
if (sensor != MPU_NONE) {
gyro->mpuDetectionResult.sensor = sensor;
gyro->mpuConfiguration.gyroReadXRegister = MPU_RA_GYRO_XOUT_H;
gyro->mpuConfiguration.readFn = spiReadRegisterBuffer;
gyro->mpuConfiguration.writeFn = spiWriteRegister;
@ -263,10 +267,10 @@ static bool detectSPISensorsAndUpdateDetectionResult(gyroDev_t *gyro)
#ifdef MPU6500_CS_PIN
gyro->bus.spi.csnPin = gyro->bus.spi.csnPin == IO_NONE ? IOGetByTag(IO_TAG(MPU6500_CS_PIN)) : gyro->bus.spi.csnPin;
#endif
const uint8_t mpu6500Sensor = mpu6500SpiDetect(&gyro->bus);
sensor = mpu6500SpiDetect(&gyro->bus);
// some targets using MPU_9250_SPI, ICM_20608_SPI or ICM_20602_SPI state sensor is MPU_65xx_SPI
if (mpu6500Sensor != MPU_NONE) {
gyro->mpuDetectionResult.sensor = mpu6500Sensor;
if (sensor != MPU_NONE) {
gyro->mpuDetectionResult.sensor = sensor;
gyro->mpuConfiguration.gyroReadXRegister = MPU_RA_GYRO_XOUT_H;
gyro->mpuConfiguration.readFn = spiReadRegisterBuffer;
gyro->mpuConfiguration.writeFn = spiWriteRegister;
@ -281,8 +285,9 @@ static bool detectSPISensorsAndUpdateDetectionResult(gyroDev_t *gyro)
#ifdef MPU9250_CS_PIN
gyro->bus.spi.csnPin = gyro->bus.spi.csnPin == IO_NONE ? IOGetByTag(IO_TAG(MPU9250_CS_PIN)) : gyro->bus.spi.csnPin;
#endif
if (mpu9250SpiDetect(&gyro->bus)) {
gyro->mpuDetectionResult.sensor = MPU_9250_SPI;
sensor = mpu9250SpiDetect(&gyro->bus);
if (sensor != MPU_NONE) {
gyro->mpuDetectionResult.sensor = sensor;
gyro->mpuConfiguration.gyroReadXRegister = MPU_RA_GYRO_XOUT_H;
gyro->mpuConfiguration.readFn = spiReadRegisterBuffer;
gyro->mpuConfiguration.writeFn = spiWriteRegister;
@ -298,8 +303,9 @@ static bool detectSPISensorsAndUpdateDetectionResult(gyroDev_t *gyro)
#ifdef ICM20689_CS_PIN
gyro->bus.spi.csnPin = gyro->bus.spi.csnPin == IO_NONE ? IOGetByTag(IO_TAG(ICM20689_CS_PIN)) : gyro->bus.spi.csnPin;
#endif
if (icm20689SpiDetect(&gyro->bus)) {
gyro->mpuDetectionResult.sensor = ICM_20689_SPI;
sensor = icm20689SpiDetect(&gyro->bus);
if (sensor != MPU_NONE) {
gyro->mpuDetectionResult.sensor = sensor;
gyro->mpuConfiguration.gyroReadXRegister = MPU_RA_GYRO_XOUT_H;
gyro->mpuConfiguration.readFn = spiReadRegisterBuffer;
gyro->mpuConfiguration.writeFn = spiWriteRegister;
@ -314,8 +320,9 @@ static bool detectSPISensorsAndUpdateDetectionResult(gyroDev_t *gyro)
#ifdef BMI160_CS_PIN
gyro->bus.spi.csnPin = gyro->bus.spi.csnPin == IO_NONE ? IOGetByTag(IO_TAG(BMI160_CS_PIN)) : gyro->bus.spi.csnPin;
#endif
if (bmi160Detect(&gyro->bus)) {
gyro->mpuDetectionResult.sensor = BMI_160_SPI;
sensor = bmi160Detect(&gyro->bus);
if (sensor != MPU_NONE) {
gyro->mpuDetectionResult.sensor = sensor;
gyro->mpuConfiguration.readFn = spiReadRegisterBuffer;
gyro->mpuConfiguration.writeFn = spiWriteRegister;
return true;

View File

@ -93,10 +93,10 @@ static int32_t BMI160_do_foc(const busDevice_t *bus);
static int32_t BMI160_WriteReg(const busDevice_t *bus, uint8_t reg, uint8_t data);
bool bmi160Detect(const busDevice_t *bus)
uint8_t bmi160Detect(const busDevice_t *bus)
{
if (BMI160Detected) {
return true;
return BMI_160_SPI;
}
IOInit(bus->spi.csnPin, OWNER_MPU_CS, 0);
@ -111,11 +111,11 @@ bool bmi160Detect(const busDevice_t *bus)
/* Check the chip ID */
if (spiReadRegister(bus, BMI160_REG_CHIPID) != 0xd1) {
return false;
return MPU_NONE;
}
BMI160Detected = true;
return true;
return BMI_160_SPI;
}
@ -381,7 +381,7 @@ void bmi160SpiAccInit(accDev_t *acc)
bool bmi160SpiAccDetect(accDev_t *acc)
{
if (!bmi160Detect(acc->bus.spi.csnPin)) {
if (bmi160Detect(acc->bus.spi.csnPin) == MPU_NONE) {
return false;
}
@ -394,7 +394,7 @@ bool bmi160SpiAccDetect(accDev_t *acc)
bool bmi160SpiGyroDetect(gyroDev_t *gyro)
{
if (!bmi160Detect(gyro->bus.spi.csnPin)) {
if (bmi160Detect(gyro->bus.spi.csnPin) == MPU_NONE) {
return false;
}

View File

@ -68,6 +68,6 @@ enum bmi160_gyro_range {
BMI160_RANGE_2000DPS = 0x00,
};
bool bmi160Detect(const busDevice_t *bus);
uint8_t bmi160Detect(const busDevice_t *bus);
bool bmi160SpiAccDetect(accDev_t *acc);
bool bmi160SpiGyroDetect(gyroDev_t *gyro);

View File

@ -53,7 +53,7 @@ static void icm20689SpiInit(const busDevice_t *bus)
hardwareInitialised = true;
}
bool icm20689SpiDetect(const busDevice_t *bus)
uint8_t icm20689SpiDetect(const busDevice_t *bus)
{
icm20689SpiInit(bus);
@ -69,13 +69,13 @@ bool icm20689SpiDetect(const busDevice_t *bus)
break;
}
if (!attemptsRemaining) {
return false;
return MPU_NONE;
}
} while (attemptsRemaining--);
spiSetDivisor(bus->spi.instance, SPI_CLOCK_STANDARD);
return true;
return ICM_20689_SPI;
}

View File

@ -27,7 +27,7 @@ bool icm20689GyroDetect(gyroDev_t *gyro);
void icm20689AccInit(accDev_t *acc);
void icm20689GyroInit(gyroDev_t *gyro);
bool icm20689SpiDetect(const busDevice_t *bus);
uint8_t icm20689SpiDetect(const busDevice_t *bus);
bool icm20689SpiAccDetect(accDev_t *acc);
bool icm20689SpiGyroDetect(gyroDev_t *gyro);

View File

@ -125,7 +125,7 @@ void mpu6000SpiAccInit(accDev_t *acc)
acc->acc_1G = 512 * 8;
}
bool mpu6000SpiDetect(const busDevice_t *bus)
uint8_t mpu6000SpiDetect(const busDevice_t *bus)
{
IOInit(bus->spi.csnPin, OWNER_MPU_CS, 0);
IOConfigGPIO(bus->spi.csnPin, SPI_IO_CS_CFG);
@ -144,7 +144,7 @@ bool mpu6000SpiDetect(const busDevice_t *bus)
break;
}
if (!attemptsRemaining) {
return false;
return MPU_NONE;
}
} while (attemptsRemaining--);
@ -166,10 +166,10 @@ bool mpu6000SpiDetect(const busDevice_t *bus)
case MPU6000_REV_D8:
case MPU6000_REV_D9:
case MPU6000_REV_D10:
return true;
return MPU_60x0_SPI;
}
return false;
return MPU_NONE;
}
static void mpu6000AccAndGyroInit(gyroDev_t *gyro)

View File

@ -17,7 +17,7 @@
// RF = Register Flag
#define MPU_RF_DATA_RDY_EN (1 << 0)
bool mpu6000SpiDetect(const busDevice_t *bus);
uint8_t mpu6000SpiDetect(const busDevice_t *bus);
bool mpu6000SpiAccDetect(accDev_t *acc);
bool mpu6000SpiGyroDetect(gyroDev_t *gyro);

View File

@ -96,8 +96,8 @@ void mpu9250SpiGyroInit(gyroDev_t *gyro)
mpuGyroRead(gyro);
if ((((int8_t)gyro->gyroADCRaw[1]) == -1 && ((int8_t)gyro->gyroADCRaw[0]) == -1) || spiGetErrorCounter(MPU9250_SPI_INSTANCE) != 0) {
spiResetErrorCounter(MPU9250_SPI_INSTANCE);
if ((((int8_t)gyro->gyroADCRaw[1]) == -1 && ((int8_t)gyro->gyroADCRaw[0]) == -1) || spiGetErrorCounter(gyro->bus.spi.instance) != 0) {
spiResetErrorCounter(gyro->bus.spi.instance);
failureMode(FAILURE_GYRO_INIT_FAILED);
}
}
@ -166,7 +166,7 @@ static void mpu9250AccAndGyroInit(gyroDev_t *gyro) {
mpuSpi9250InitDone = true; //init done
}
bool mpu9250SpiDetect(const busDevice_t *bus)
uint8_t mpu9250SpiDetect(const busDevice_t *bus)
{
IOInit(bus->spi.csnPin, OWNER_MPU_CS, 0);
IOConfigGPIO(bus->spi.csnPin, SPI_IO_CS_CFG);
@ -182,13 +182,13 @@ bool mpu9250SpiDetect(const busDevice_t *bus)
break;
}
if (!attemptsRemaining) {
return false;
return MPU_NONE;
}
} while (attemptsRemaining--);
spiSetDivisor(bus->spi.instance, SPI_CLOCK_FAST);
return true;
return MPU_9250_SPI;
}
bool mpu9250SpiAccDetect(accDev_t *acc)

View File

@ -28,7 +28,7 @@
void mpu9250SpiResetGyro(void);
bool mpu9250SpiDetect(const busDevice_t *bus);
uint8_t mpu9250SpiDetect(const busDevice_t *bus);
bool mpu9250SpiAccDetect(accDev_t *acc);
bool mpu9250SpiGyroDetect(gyroDev_t *gyro);