diff --git a/src/drivers/boards/px4fmu-v2/board_config.h b/src/drivers/boards/px4fmu-v2/board_config.h index a9a9267481..96a2fa59ee 100644 --- a/src/drivers/boards/px4fmu-v2/board_config.h +++ b/src/drivers/boards/px4fmu-v2/board_config.h @@ -49,8 +49,10 @@ /* Run time Hardware detection */ #define BOARD_HAS_SIMPLE_HW_VERSIONING 1 +#define HW_VER_PA8 (GPIO_INPUT|GPIO_PULLUP|GPIO_PORTA|GPIO_PIN8) #define HW_VER_PB4 (GPIO_INPUT|GPIO_PULLUP|GPIO_PORTB|GPIO_PIN4) #define HW_VER_PB12 (GPIO_INPUT|GPIO_PULLUP|GPIO_PORTB|GPIO_PIN12) +#define HW_VER_PA8_INIT (GPIO_VDD_5V_PERIPH_EN) #define HW_VER_PB4_INIT (GPIO_SPI1_EXTI_DRDY_PB4) #define HW_VER_PB12_INIT (GPIO_INPUT|GPIO_FLOAT|GPIO_PORTB|GPIO_PIN12) #define HW_VER_FMUV2_STATE 0x8 /* PB12:PU:1 PB12:PD:0 PB4:PU:0 PB4PD:0 */ diff --git a/src/drivers/boards/px4fmu-v2/init.c b/src/drivers/boards/px4fmu-v2/init.c index f02e7478e9..02da879e38 100644 --- a/src/drivers/boards/px4fmu-v2/init.c +++ b/src/drivers/boards/px4fmu-v2/init.c @@ -407,18 +407,45 @@ __EXPORT int board_app_initialize(uintptr_t arg) hw_type[2] = '0'; /* Has CAN2 transceiver Remove pull up */ + stm32_configgpio(GPIO_CAN2_RX); break; case HW_VER_FMUV2MINI_STATE: - hw_type[2] = 'M'; + + /* Detection for a Pixhack3 */ + + stm32_configgpio(HW_VER_PA8); + up_udelay(10); + bool isph3 = stm32_gpioread(HW_VER_PA8); + stm32_configgpio(HW_VER_PA8_INIT); + + + if (isph3) { + + /* Pixhack3 looks like a FMuV3 Cube */ + + hw_version = HW_VER_FMUV3_STATE; + hw_type[1]++; + hw_type[2] = '0'; + message("\nPixhack V3 detected, forcing to fmu-v3"); + + } else { + + /* It is a mini */ + + hw_type[2] = 'M'; + } + break; default: - // questionable px4fmu-v2 hardware, try forcing regular FMUv2 (not much else we can do) - message("bad version detected, forcing to fmu-v2\n"); - hw_version = 0x8; + + /* questionable px4fmu-v2 hardware, try forcing regular FMUv2 (not much else we can do) */ + + message("\nbad version detected, forcing to fmu-v2"); + hw_version = HW_VER_FMUV2_STATE; break; }