diff --git a/ROMFS/px4fmu_common/init.d/rc.sensors b/ROMFS/px4fmu_common/init.d/rc.sensors index 44e3948b78..7c165476fd 100644 --- a/ROMFS/px4fmu_common/init.d/rc.sensors +++ b/ROMFS/px4fmu_common/init.d/rc.sensors @@ -187,6 +187,11 @@ then if mpu9250 -R 2 start then fi + + # Internal SPI bus BMI160 + if bmi160 start + then + fi fi if ver hwcmp PX4FMU_V1 diff --git a/src/drivers/boards/px4fmu-v4/board_config.h b/src/drivers/boards/px4fmu-v4/board_config.h index e01538df88..8309cb264f 100644 --- a/src/drivers/boards/px4fmu-v4/board_config.h +++ b/src/drivers/boards/px4fmu-v4/board_config.h @@ -84,6 +84,7 @@ #define GPIO_SPI_CS_LIS3MDL (GPIO_OUTPUT|GPIO_PUSHPULL|GPIO_SPEED_2MHz|GPIO_OUTPUT_SET|GPIO_PORTE|GPIO_PIN15) #define GPIO_SPI_CS_MS5611 (GPIO_OUTPUT|GPIO_PUSHPULL|GPIO_SPEED_2MHz|GPIO_OUTPUT_SET|GPIO_PORTD|GPIO_PIN7) #define GPIO_SPI_CS_ICM_20608_G (GPIO_OUTPUT|GPIO_PUSHPULL|GPIO_SPEED_2MHz|GPIO_OUTPUT_SET|GPIO_PORTC|GPIO_PIN15) +#define GPIO_SPI_CS_BMI160 (GPIO_OUTPUT|GPIO_PUSHPULL|GPIO_SPEED_2MHz|GPIO_OUTPUT_SET|GPIO_PORTC|GPIO_PIN2) #define GPIO_SPI_CS_FRAM (GPIO_OUTPUT|GPIO_PUSHPULL|GPIO_SPEED_2MHz|GPIO_OUTPUT_SET|GPIO_PORTD|GPIO_PIN10) @@ -106,6 +107,7 @@ #define GPIO_SPI_CS_OFF_LIS3MDL _PIN_OFF(GPIO_SPI_CS_LIS3MDL) #define GPIO_SPI_CS_OFF_MS5611 _PIN_OFF(GPIO_SPI_CS_MS5611) #define GPIO_SPI_CS_OFF_ICM_20608_G _PIN_OFF(GPIO_SPI_CS_ICM_20608_G) +#define GPIO_SPI_CS_OFF_BMI160 _PIN_OFF(GPIO_SPI_CS_BMI160) #define GPIO_DRDY_OFF_MPU9250 _PIN_OFF(GPIO_DRDY_MPU9250) #define GPIO_DRDY_OFF_HMC5983 _PIN_OFF(GPIO_DRDY_HMC5983) diff --git a/src/drivers/boards/px4fmu-v4/px4fmu_spi.c b/src/drivers/boards/px4fmu-v4/px4fmu_spi.c index b1776bd953..5fedf8e0a5 100644 --- a/src/drivers/boards/px4fmu-v4/px4fmu_spi.c +++ b/src/drivers/boards/px4fmu-v4/px4fmu_spi.c @@ -76,6 +76,7 @@ __EXPORT void stm32_spiinitialize(void) px4_arch_configgpio(GPIO_SPI_CS_HMC5983); px4_arch_configgpio(GPIO_SPI_CS_MS5611); px4_arch_configgpio(GPIO_SPI_CS_ICM_20608_G); + px4_arch_configgpio(GPIO_SPI_CS_BMI160); /* De-activate all peripherals, * required for some peripheral @@ -85,6 +86,7 @@ __EXPORT void stm32_spiinitialize(void) px4_arch_gpiowrite(GPIO_SPI_CS_HMC5983, 1); px4_arch_gpiowrite(GPIO_SPI_CS_MS5611, 1); px4_arch_gpiowrite(GPIO_SPI_CS_ICM_20608_G, 1); + px4_arch_gpiowrite(GPIO_SPI_CS_BMI160, 1); px4_arch_configgpio(GPIO_DRDY_MPU9250); px4_arch_configgpio(GPIO_DRDY_HMC5983); @@ -105,6 +107,7 @@ __EXPORT void stm32_spi1select(FAR struct spi_dev_s *dev, enum spi_dev_e devid, switch (devid) { case PX4_SPIDEV_ICM: /* Making sure the other peripherals are not selected */ + px4_arch_gpiowrite(GPIO_SPI_CS_BMI160, 1); px4_arch_gpiowrite(GPIO_SPI_CS_MPU9250, 1); px4_arch_gpiowrite(GPIO_SPI_CS_HMC5983, 1); px4_arch_gpiowrite(GPIO_SPI_CS_MS5611, 1); @@ -117,6 +120,7 @@ __EXPORT void stm32_spi1select(FAR struct spi_dev_s *dev, enum spi_dev_e devid, case PX4_SPIDEV_BARO: /* Making sure the other peripherals are not selected */ + px4_arch_gpiowrite(GPIO_SPI_CS_BMI160, 1); px4_arch_gpiowrite(GPIO_SPI_CS_MPU9250, 1); px4_arch_gpiowrite(GPIO_SPI_CS_HMC5983, 1); px4_arch_gpiowrite(GPIO_SPI_CS_MS5611, !selected); @@ -125,6 +129,7 @@ __EXPORT void stm32_spi1select(FAR struct spi_dev_s *dev, enum spi_dev_e devid, case PX4_SPIDEV_HMC: /* Making sure the other peripherals are not selected */ + px4_arch_gpiowrite(GPIO_SPI_CS_BMI160, 1); px4_arch_gpiowrite(GPIO_SPI_CS_MPU9250, 1); px4_arch_gpiowrite(GPIO_SPI_CS_HMC5983, !selected); px4_arch_gpiowrite(GPIO_SPI_CS_MS5611, 1); @@ -133,12 +138,22 @@ __EXPORT void stm32_spi1select(FAR struct spi_dev_s *dev, enum spi_dev_e devid, case PX4_SPIDEV_MPU: /* Making sure the other peripherals are not selected */ + px4_arch_gpiowrite(GPIO_SPI_CS_BMI160, 1); px4_arch_gpiowrite(GPIO_SPI_CS_MPU9250, !selected); px4_arch_gpiowrite(GPIO_SPI_CS_HMC5983, 1); px4_arch_gpiowrite(GPIO_SPI_CS_MS5611, 1); px4_arch_gpiowrite(GPIO_SPI_CS_ICM_20608_G, 1); break; + case PX4_SPIDEV_BMI: + /* Making sure the other peripherals are not selected */ + px4_arch_gpiowrite(GPIO_SPI_CS_MPU9250, 1); + px4_arch_gpiowrite(GPIO_SPI_CS_HMC5983, 1); + px4_arch_gpiowrite(GPIO_SPI_CS_MS5611, 1); + px4_arch_gpiowrite(GPIO_SPI_CS_ICM_20608_G, 1); + px4_arch_gpiowrite(GPIO_SPI_CS_BMI160, !selected); + break; + default: break; } @@ -187,11 +202,13 @@ __EXPORT void board_spi_reset(int ms) px4_arch_configgpio(GPIO_SPI_CS_OFF_HMC5983); px4_arch_configgpio(GPIO_SPI_CS_OFF_MS5611); px4_arch_configgpio(GPIO_SPI_CS_OFF_ICM_20608_G); + px4_arch_configgpio(GPIO_SPI_CS_OFF_BMI160); px4_arch_gpiowrite(GPIO_SPI_CS_OFF_MPU9250, 0); px4_arch_gpiowrite(GPIO_SPI_CS_OFF_HMC5983, 0); px4_arch_gpiowrite(GPIO_SPI_CS_OFF_MS5611, 0); px4_arch_gpiowrite(GPIO_SPI_CS_OFF_ICM_20608_G, 0); + px4_arch_gpiowrite(GPIO_SPI_CS_OFF_BMI160, 0); px4_arch_configgpio(GPIO_SPI1_SCK_OFF); px4_arch_configgpio(GPIO_SPI1_MISO_OFF); @@ -231,6 +248,7 @@ __EXPORT void board_spi_reset(int ms) px4_arch_configgpio(GPIO_SPI_CS_HMC5983); px4_arch_configgpio(GPIO_SPI_CS_MS5611); px4_arch_configgpio(GPIO_SPI_CS_ICM_20608_G); + px4_arch_configgpio(GPIO_SPI_CS_BMI160); /* De-activate all peripherals, * required for some peripheral @@ -240,6 +258,7 @@ __EXPORT void board_spi_reset(int ms) px4_arch_gpiowrite(GPIO_SPI_CS_HMC5983, 1); px4_arch_gpiowrite(GPIO_SPI_CS_MS5611, 1); px4_arch_gpiowrite(GPIO_SPI_CS_ICM_20608_G, 1); + px4_arch_gpiowrite(GPIO_SPI_CS_BMI160, 1); px4_arch_configgpio(GPIO_SPI1_SCK); px4_arch_configgpio(GPIO_SPI1_MISO);