diff --git a/boards/mro/ctrl-zero-f7/default.cmake b/boards/mro/ctrl-zero-f7/default.cmake index 59a1617c68..dd9135c078 100644 --- a/boards/mro/ctrl-zero-f7/default.cmake +++ b/boards/mro/ctrl-zero-f7/default.cmake @@ -29,7 +29,7 @@ px4_add_board( gps #heater #imu # all available imu drivers - #imu/bmi088 + imu/bmi088 imu/mpu6000 imu/icm20948 irlock diff --git a/boards/mro/ctrl-zero-f7/init/rc.board_sensors b/boards/mro/ctrl-zero-f7/init/rc.board_sensors index b4e844839e..6910c01254 100644 --- a/boards/mro/ctrl-zero-f7/init/rc.board_sensors +++ b/boards/mro/ctrl-zero-f7/init/rc.board_sensors @@ -11,8 +11,11 @@ mpu6000 -R 10 -s -T 20602 start # Internal ICM-20689 #icm20689 -R 10 20689 start -# Internal BMI088 -bmi088 start +# Internal SPI bus BMI088 accel +bmi088 -A -R 10 start + +# Internal SPI bus BMI088 gyro +bmi088 -G -R 10 start # Interal DPS310 (barometer) dps310 start diff --git a/boards/mro/ctrl-zero-f7/nuttx-config/nsh/defconfig b/boards/mro/ctrl-zero-f7/nuttx-config/nsh/defconfig index 2001d41319..3473d92292 100644 --- a/boards/mro/ctrl-zero-f7/nuttx-config/nsh/defconfig +++ b/boards/mro/ctrl-zero-f7/nuttx-config/nsh/defconfig @@ -215,7 +215,6 @@ CONFIG_UART4_RXDMA=y CONFIG_UART4_TXBUFSIZE=1500 CONFIG_UART7_BAUD=57600 CONFIG_UART7_RXBUFSIZE=600 -CONFIG_UART7_RXDMA=y CONFIG_UART7_SERIAL_CONSOLE=y CONFIG_UART7_TXBUFSIZE=1500 CONFIG_UART8_BAUD=57600 diff --git a/boards/mro/ctrl-zero-f7/src/board_config.h b/boards/mro/ctrl-zero-f7/src/board_config.h index 7f86e5d4bc..774dc4cfbd 100644 --- a/boards/mro/ctrl-zero-f7/src/board_config.h +++ b/boards/mro/ctrl-zero-f7/src/board_config.h @@ -81,6 +81,10 @@ #define GPIO_SPI1_CS1_ICM20602 /* PC2 */ (GPIO_OUTPUT|GPIO_PUSHPULL|GPIO_SPEED_2MHz|GPIO_OUTPUT_SET|GPIO_PORTC|GPIO_PIN2) #define GPIO_SPI1_CS2_ICM20948 /* PE15 */ (GPIO_OUTPUT|GPIO_PUSHPULL|GPIO_SPEED_2MHz|GPIO_OUTPUT_SET|GPIO_PORTE|GPIO_PIN15) +/* Define the SPI1 Data Ready interrupts */ +#define GPIO_SPI1_DRDY1_ICM20602 /* PD15 */ (GPIO_INPUT|GPIO_FLOAT|GPIO_EXTI|GPIO_PORTD|GPIO_PIN15) +#define GPIO_SPI1_DRDY2_ICM20948 /* PE12 */ (GPIO_INPUT|GPIO_FLOAT|GPIO_EXTI|GPIO_PORTE|GPIO_PIN12) + /* SPI 2 CS */ #define GPIO_SPI2_CS1_FRAM /* PD10 */ (GPIO_OUTPUT|GPIO_PUSHPULL|GPIO_SPEED_2MHz|GPIO_OUTPUT_SET|GPIO_PORTD|GPIO_PIN10) #define GPIO_SPI2_CS2_BARO /* PD7 */ (GPIO_OUTPUT|GPIO_PUSHPULL|GPIO_SPEED_2MHz|GPIO_OUTPUT_SET|GPIO_PORTD|GPIO_PIN7) @@ -253,7 +257,7 @@ #define GPIO_OTGFS_VBUS /* PA9 */ (GPIO_INPUT|GPIO_PULLDOWN|GPIO_SPEED_100MHz|GPIO_PORTA|GPIO_PIN9) /* High-resolution timer */ -#define HRT_TIMER 8 /* use timer8 for the HRT */ +#define HRT_TIMER 3 /* use timer3 for the HRT */ #define HRT_TIMER_CHANNEL 3 /* use capture/compare channel 3 */ #define HRT_PPM_CHANNEL /* T3C2 */ 2 /* use capture/compare channel 1 */ @@ -328,10 +332,6 @@ GPIO_VDD_3V3_SPEKTRUM_POWER_EN, \ GPIO_TONE_ALARM_IDLE, \ GPIO_SAFETY_SWITCH_IN, \ - GPIO_DRDY_BMI088_INT1_ACCEL, \ - GPIO_DRDY_BMI088_INT2_ACCEL, \ - GPIO_DRDY_BMI088_INT3_GYRO, \ - GPIO_DRDY_BMI088_INT4_GYRO, \ } #define BOARD_ENABLE_CONSOLE_BUFFER diff --git a/boards/mro/ctrl-zero-f7/src/spi.cpp b/boards/mro/ctrl-zero-f7/src/spi.cpp index 895184c588..92d306f1f1 100644 --- a/boards/mro/ctrl-zero-f7/src/spi.cpp +++ b/boards/mro/ctrl-zero-f7/src/spi.cpp @@ -203,6 +203,9 @@ __EXPORT void board_spi_reset(int ms) stm32_configgpio(_PIN_OFF(GPIO_SPI1_SCK)); stm32_configgpio(_PIN_OFF(GPIO_SPI1_MISO)); stm32_configgpio(_PIN_OFF(GPIO_SPI1_MOSI)); + stm32_configgpio(_PIN_OFF(GPIO_SPI1_DRDY1_ICM20602)); + stm32_configgpio(_PIN_OFF(GPIO_SPI1_DRDY2_ICM20948)); + // SPI5 for (auto cs : spi5selects_gpio) { @@ -242,6 +245,9 @@ __EXPORT void board_spi_reset(int ms) stm32_configgpio(GPIO_SPI1_SCK); stm32_configgpio(GPIO_SPI1_MISO); stm32_configgpio(GPIO_SPI1_MOSI); + stm32_configgpio(GPIO_SPI1_DRDY1_ICM20602); + stm32_configgpio(GPIO_SPI1_DRDY2_ICM20948); + // SPI5 for (auto cs : spi5selects_gpio) { diff --git a/src/drivers/imu/bmi088/bmi088_main.cpp b/src/drivers/imu/bmi088/bmi088_main.cpp index fe4e1a74ee..129b65a2f4 100644 --- a/src/drivers/imu/bmi088/bmi088_main.cpp +++ b/src/drivers/imu/bmi088/bmi088_main.cpp @@ -90,7 +90,11 @@ start(bool external_bus, enum Rotation rotation, enum sensor_type sensor) #endif } else { +#if defined(PX4_SPI_BUS_SENSORS3) && defined(PX4_SPIDEV_BMI088_ACC) *g_dev_acc_ptr = new BMI088_accel(PX4_SPI_BUS_SENSORS3, path_accel, PX4_SPIDEV_BMI088_ACC, rotation); +#elif defined(PX4_SPI_BUS_5) && defined(PX4_SPIDEV_BMI088_ACC) + *g_dev_acc_ptr = new BMI088_accel(PX4_SPI_BUS_5, path_accel, PX4_SPIDEV_BMI088_ACC, rotation); +#endif } if (*g_dev_acc_ptr == nullptr) { @@ -120,7 +124,11 @@ start(bool external_bus, enum Rotation rotation, enum sensor_type sensor) #endif } else { +#if defined(PX4_SPI_BUS_SENSORS3) && defined(PX4_SPIDEV_BMI088_GYR) *g_dev_gyr_ptr = new BMI088_gyro(PX4_SPI_BUS_SENSORS3, path_gyro, PX4_SPIDEV_BMI088_GYR, rotation); +#elif defined(PX4_SPI_BUS_5) && defined(PX4_SPIDEV_BMI088_GYR) + *g_dev_gyr_ptr = new BMI088_gyro(PX4_SPI_BUS_5, path_gyro, PX4_SPIDEV_BMI088_GYR, rotation); +#endif } if (*g_dev_gyr_ptr == nullptr) {