From 588a8d384120ba28780e345efe7761d5bdd0aada Mon Sep 17 00:00:00 2001 From: Kevin Lopez Alvarez Date: Thu, 18 May 2017 11:05:07 +0200 Subject: [PATCH] px4fmu-v4pro : Add support for ICM20602 --- ROMFS/px4fmu_common/init.d/rc.sensors | 5 +++ .../boards/px4fmu-v4pro/board_config.h | 9 ++--- src/drivers/boards/px4fmu-v4pro/px4fmu_spi.c | 34 ++++++++++++------- 3 files changed, 31 insertions(+), 17 deletions(-) diff --git a/ROMFS/px4fmu_common/init.d/rc.sensors b/ROMFS/px4fmu_common/init.d/rc.sensors index 3cc80b1cd8..217c4efd91 100644 --- a/ROMFS/px4fmu_common/init.d/rc.sensors +++ b/ROMFS/px4fmu_common/init.d/rc.sensors @@ -347,6 +347,11 @@ then if mpu6000 -R 2 -T 20608 start then fi + + # Internal SPI bus ICM-20602 + if mpu6000 -R 2 -T 20602 start + then + fi # Internal SPI bus mpu9250 if mpu9250 -R 2 start diff --git a/src/drivers/boards/px4fmu-v4pro/board_config.h b/src/drivers/boards/px4fmu-v4pro/board_config.h index 03ce0cf628..431bffd4cd 100644 --- a/src/drivers/boards/px4fmu-v4pro/board_config.h +++ b/src/drivers/boards/px4fmu-v4pro/board_config.h @@ -98,7 +98,7 @@ __BEGIN_DECLS #define GPIO_SPI_CS_MPU9250 (GPIO_OUTPUT|GPIO_PUSHPULL|GPIO_SPEED_2MHz|GPIO_OUTPUT_SET|GPIO_PORTC|GPIO_PIN2) #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_ICM_2060X (GPIO_OUTPUT|GPIO_PUSHPULL|GPIO_SPEED_2MHz|GPIO_OUTPUT_SET|GPIO_PORTC|GPIO_PIN15) #define GPIO_SPI_CS_TEMPCAL_EEPROM (GPIO_OUTPUT|GPIO_PUSHPULL|GPIO_SPEED_2MHz|GPIO_OUTPUT_SET|GPIO_PORTH|GPIO_PIN5) /* SPI Bus 2 Memory */ @@ -124,7 +124,7 @@ __BEGIN_DECLS #define GPIO_DRDY_MPU9250 (GPIO_INPUT|GPIO_FLOAT|GPIO_EXTI|GPIO_PORTD|GPIO_PIN15) #define GPIO_DRDY_LIS3MDL (GPIO_INPUT|GPIO_FLOAT|GPIO_EXTI|GPIO_PORTE|GPIO_PIN12) -#define GPIO_DRDY_ICM_20608_G (GPIO_INPUT|GPIO_FLOAT|GPIO_EXTI|GPIO_PORTC|GPIO_PIN14) +#define GPIO_DRDY_ICM_2060X (GPIO_INPUT|GPIO_FLOAT|GPIO_EXTI|GPIO_PORTC|GPIO_PIN14) /* @@ -137,12 +137,12 @@ __BEGIN_DECLS #define GPIO_SPI_CS_OFF_MPU9250 _PIN_OFF(GPIO_SPI_CS_MPU9250) #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_ICM_2060X _PIN_OFF(GPIO_SPI_CS_ICM_2060X) #define GPIO_SPI_CS_OFF_TEMPCAL_EEPROM _PIN_OFF(GPIO_SPI_CS_OFF_TEMPCAL_EEPROM) #define GPIO_DRDY_OFF_MPU9250 _PIN_OFF(GPIO_DRDY_MPU9250) #define GPIO_DRDY_OFF_LIS3MDL _PIN_OFF(GPIO_DRDY_LIS3MDL) -#define GPIO_DRDY_OFF_ICM_20608_G _PIN_OFF(GPIO_DRDY_ICM_20608_G) +#define GPIO_DRDY_OFF_ICM_2060X _PIN_OFF(GPIO_DRDY_ICM_2060X) /* SPI1 off */ @@ -172,6 +172,7 @@ __BEGIN_DECLS #define PX4_SPIDEV_EXT1 11 #define PX4_SPIDEV_EEPROM 12 #define PX4_SPIDEV_ICM_20608 13 +#define PX4_SPIDEV_ICM_20602 14 /* I2C busses */ #define PX4_I2C_BUS_ONBOARD 1 diff --git a/src/drivers/boards/px4fmu-v4pro/px4fmu_spi.c b/src/drivers/boards/px4fmu-v4pro/px4fmu_spi.c index 4293a6ee7c..9a4196412a 100644 --- a/src/drivers/boards/px4fmu-v4pro/px4fmu_spi.c +++ b/src/drivers/boards/px4fmu-v4pro/px4fmu_spi.c @@ -75,12 +75,12 @@ __EXPORT void stm32_spiinitialize(void) stm32_configgpio(GPIO_SPI_CS_MPU9250); stm32_configgpio(GPIO_SPI_CS_LIS3MDL); stm32_configgpio(GPIO_SPI_CS_MS5611); - stm32_configgpio(GPIO_SPI_CS_ICM_20608_G); + stm32_configgpio(GPIO_SPI_CS_ICM_2060X); stm32_configgpio(GPIO_SPI_CS_TEMPCAL_EEPROM); stm32_configgpio(GPIO_DRDY_MPU9250); stm32_configgpio(GPIO_DRDY_LIS3MDL); - stm32_configgpio(GPIO_DRDY_ICM_20608_G); + stm32_configgpio(GPIO_DRDY_ICM_2060X); #endif #ifdef CONFIG_STM32_SPI2 @@ -100,12 +100,20 @@ __EXPORT void stm32_spi1select(FAR struct spi_dev_s *dev, enum spi_dev_e devid, /* SPI select is active low, so write !selected to select the device */ switch (devid) { + case PX4_SPIDEV_ICM: + /* Intended fallthrough */ + + case PX4_SPIDEV_ICM_20602: + /* Intended fallthrough */ + + case PX4_SPIDEV_ICM_20608: + /* Making sure the other peripherals are not selected */ stm32_gpiowrite(GPIO_SPI_CS_MPU9250, 1); stm32_gpiowrite(GPIO_SPI_CS_LIS3MDL, 1); stm32_gpiowrite(GPIO_SPI_CS_MS5611, 1); - stm32_gpiowrite(GPIO_SPI_CS_ICM_20608_G, !selected); + stm32_gpiowrite(GPIO_SPI_CS_ICM_2060X, !selected); stm32_gpiowrite(GPIO_SPI_CS_TEMPCAL_EEPROM, 1); break; @@ -114,7 +122,7 @@ __EXPORT void stm32_spi1select(FAR struct spi_dev_s *dev, enum spi_dev_e devid, stm32_gpiowrite(GPIO_SPI_CS_MPU9250, 1); stm32_gpiowrite(GPIO_SPI_CS_LIS3MDL, 1); stm32_gpiowrite(GPIO_SPI_CS_MS5611, !selected); - stm32_gpiowrite(GPIO_SPI_CS_ICM_20608_G, 1); + stm32_gpiowrite(GPIO_SPI_CS_ICM_2060X, 1); stm32_gpiowrite(GPIO_SPI_CS_TEMPCAL_EEPROM, 1); break; @@ -123,7 +131,7 @@ __EXPORT void stm32_spi1select(FAR struct spi_dev_s *dev, enum spi_dev_e devid, stm32_gpiowrite(GPIO_SPI_CS_MPU9250, 1); stm32_gpiowrite(GPIO_SPI_CS_LIS3MDL, !selected); stm32_gpiowrite(GPIO_SPI_CS_MS5611, 1); - stm32_gpiowrite(GPIO_SPI_CS_ICM_20608_G, 1); + stm32_gpiowrite(GPIO_SPI_CS_ICM_2060X, 1); stm32_gpiowrite(GPIO_SPI_CS_TEMPCAL_EEPROM, 1); break; @@ -132,7 +140,7 @@ __EXPORT void stm32_spi1select(FAR struct spi_dev_s *dev, enum spi_dev_e devid, stm32_gpiowrite(GPIO_SPI_CS_MPU9250, !selected); stm32_gpiowrite(GPIO_SPI_CS_LIS3MDL, 1); stm32_gpiowrite(GPIO_SPI_CS_MS5611, 1); - stm32_gpiowrite(GPIO_SPI_CS_ICM_20608_G, 1); + stm32_gpiowrite(GPIO_SPI_CS_ICM_2060X, 1); stm32_gpiowrite(GPIO_SPI_CS_TEMPCAL_EEPROM, 1); break; @@ -141,7 +149,7 @@ __EXPORT void stm32_spi1select(FAR struct spi_dev_s *dev, enum spi_dev_e devid, stm32_gpiowrite(GPIO_SPI_CS_MPU9250, 1); stm32_gpiowrite(GPIO_SPI_CS_LIS3MDL, 1); stm32_gpiowrite(GPIO_SPI_CS_MS5611, 1); - stm32_gpiowrite(GPIO_SPI_CS_ICM_20608_G, 1); + stm32_gpiowrite(GPIO_SPI_CS_ICM_2060X, 1); stm32_gpiowrite(GPIO_SPI_CS_TEMPCAL_EEPROM, !selected); break; @@ -217,13 +225,13 @@ __EXPORT void board_spi_reset(int ms) stm32_configgpio(GPIO_SPI_CS_OFF_MPU9250); stm32_configgpio(GPIO_SPI_CS_OFF_LIS3MDL); stm32_configgpio(GPIO_SPI_CS_OFF_MS5611); - stm32_configgpio(GPIO_SPI_CS_OFF_ICM_20608_G); + stm32_configgpio(GPIO_SPI_CS_OFF_ICM_2060X); stm32_configgpio(GPIO_SPI_CS_TEMPCAL_EEPROM); stm32_gpiowrite(GPIO_SPI_CS_OFF_MPU9250, 0); stm32_gpiowrite(GPIO_SPI_CS_OFF_LIS3MDL, 0); stm32_gpiowrite(GPIO_SPI_CS_OFF_MS5611, 0); - stm32_gpiowrite(GPIO_SPI_CS_OFF_ICM_20608_G, 0); + stm32_gpiowrite(GPIO_SPI_CS_OFF_ICM_2060X, 0); stm32_gpiowrite(GPIO_SPI_CS_TEMPCAL_EEPROM, 0); stm32_configgpio(GPIO_SPI1_SCK_OFF); @@ -236,11 +244,11 @@ __EXPORT void board_spi_reset(int ms) stm32_configgpio(GPIO_DRDY_OFF_MPU9250); stm32_configgpio(GPIO_DRDY_OFF_LIS3MDL); - stm32_configgpio(GPIO_DRDY_OFF_ICM_20608_G); + stm32_configgpio(GPIO_DRDY_OFF_ICM_2060X); stm32_gpiowrite(GPIO_DRDY_OFF_MPU9250, 0); stm32_gpiowrite(GPIO_DRDY_OFF_LIS3MDL, 0); - stm32_gpiowrite(GPIO_DRDY_OFF_ICM_20608_G, 0); + stm32_gpiowrite(GPIO_DRDY_OFF_ICM_2060X, 0); /* set the sensor rail off */ stm32_configgpio(GPIO_VDD_3V3_SENSORS_EN); @@ -263,7 +271,7 @@ __EXPORT void board_spi_reset(int ms) stm32_configgpio(GPIO_SPI_CS_MPU9250); stm32_configgpio(GPIO_SPI_CS_LIS3MDL); stm32_configgpio(GPIO_SPI_CS_MS5611); - stm32_configgpio(GPIO_SPI_CS_ICM_20608_G); + stm32_configgpio(GPIO_SPI_CS_ICM_2060X); stm32_configgpio(GPIO_SPI_CS_TEMPCAL_EEPROM); stm32_configgpio(GPIO_SPI1_SCK); @@ -273,7 +281,7 @@ __EXPORT void board_spi_reset(int ms) /* bring up the EXTI pins again */ stm32_configgpio(GPIO_DRDY_MPU9250); stm32_configgpio(GPIO_DRDY_LIS3MDL); - stm32_configgpio(GPIO_DRDY_ICM_20608_G); + stm32_configgpio(GPIO_DRDY_ICM_2060X); #endif