px4fmu-v4pro : Add support for ICM20602

This commit is contained in:
Kevin Lopez Alvarez 2017-05-18 11:05:07 +02:00 committed by Lorenz Meier
parent 74b0e485e7
commit 588a8d3841
3 changed files with 31 additions and 17 deletions

View File

@ -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

View File

@ -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

View File

@ -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