From 553c64925292d0fc99b46d9514eb6646472033e7 Mon Sep 17 00:00:00 2001 From: David Sidrane Date: Tue, 18 Jul 2017 17:09:50 -1000 Subject: [PATCH] px4fmu-v2:Init GPIO_VDD_3V3_SENSORS_EN off at reset Insure a 0.0 voltage initial condition on VDD_3V3_SENSORS By starting the GPIO_VDD_3V3_SENSORS_EN, low and deferring the GPIO init of the slave selects and drdy signals until board_app_initialize. We get ~ 80 ms of power off time with 0.00 voltage applied to the sensors. --- src/drivers/boards/px4fmu-v2/board_config.h | 2 +- src/drivers/boards/px4fmu-v2/px4fmu2_init.c | 25 ++++++++++++++++++--- 2 files changed, 23 insertions(+), 4 deletions(-) diff --git a/src/drivers/boards/px4fmu-v2/board_config.h b/src/drivers/boards/px4fmu-v2/board_config.h index 5eec8fdaf9..99b9d64bcb 100644 --- a/src/drivers/boards/px4fmu-v2/board_config.h +++ b/src/drivers/boards/px4fmu-v2/board_config.h @@ -188,7 +188,7 @@ #define GPIO_VDD_BRICK_VALID (GPIO_INPUT|GPIO_PULLUP|GPIO_PORTB|GPIO_PIN5) #define GPIO_VDD_SERVO_VALID (GPIO_INPUT|GPIO_PULLUP|GPIO_PORTB|GPIO_PIN7) #define GPIO_VDD_USB_VALID (GPIO_INPUT|GPIO_PULLUP|GPIO_PORTC|GPIO_PIN0) -#define GPIO_VDD_3V3_SENSORS_EN (GPIO_OUTPUT|GPIO_PUSHPULL|GPIO_SPEED_2MHz|GPIO_OUTPUT_SET|GPIO_PORTE|GPIO_PIN3) +#define GPIO_VDD_3V3_SENSORS_EN (GPIO_OUTPUT|GPIO_PUSHPULL|GPIO_SPEED_2MHz|GPIO_OUTPUT_CLEAR|GPIO_PORTE|GPIO_PIN3) #define GPIO_VDD_5V_HIPOWER_OC (GPIO_INPUT|GPIO_PULLUP|GPIO_PORTE|GPIO_PIN10) #define GPIO_VDD_5V_PERIPH_OC (GPIO_INPUT|GPIO_PULLUP|GPIO_PORTE|GPIO_PIN15) diff --git a/src/drivers/boards/px4fmu-v2/px4fmu2_init.c b/src/drivers/boards/px4fmu-v2/px4fmu2_init.c index 30ac5085b7..6bef348338 100644 --- a/src/drivers/boards/px4fmu-v2/px4fmu2_init.c +++ b/src/drivers/boards/px4fmu-v2/px4fmu2_init.c @@ -329,6 +329,10 @@ stm32_boardinitialize(void) /* configure LEDs */ board_autoled_initialize(); + /* Start with the Sensor voltage off */ + + stm32_configgpio(GPIO_VDD_3V3_SENSORS_EN); + /* configure ADC pins */ stm32_configgpio(GPIO_ADC1_IN2); /* BATT_VOLTAGE_SENS */ @@ -340,7 +344,6 @@ stm32_boardinitialize(void) /* configure power supply control/sense pins */ stm32_configgpio(GPIO_VDD_5V_PERIPH_EN); - stm32_configgpio(GPIO_VDD_3V3_SENSORS_EN); stm32_configgpio(GPIO_VDD_BRICK_VALID); stm32_configgpio(GPIO_VDD_SERVO_VALID); stm32_configgpio(GPIO_VDD_USB_VALID); @@ -348,8 +351,9 @@ stm32_boardinitialize(void) stm32_configgpio(GPIO_VDD_5V_PERIPH_OC); - /* configure SPI interfaces */ - stm32_spiinitialize(); + /* configure SPI interfaces is deferred to board_app_initialize + * to delay the sensor power up with out adding a delay + */ } @@ -385,6 +389,7 @@ static struct sdio_dev_s *sdio; __EXPORT int board_app_initialize(uintptr_t arg) { + #if defined(CONFIG_HAVE_CXX) && defined(CONFIG_HAVE_CXXINITIALIZE) /* run C++ ctors before we go any further */ @@ -422,7 +427,21 @@ __EXPORT int board_app_initialize(uintptr_t arg) #endif // BOARD_HAS_SIMPLE_HW_VERSIONING + /* Bring up the Sensor power */ + + stm32_gpiowrite(GPIO_VDD_3V3_SENSORS_EN, 1); + + /* Ensure the power is on 1 ms before we drive the GPIO pins */ + + usleep(1000); + + /* Now it is ok to drive the pins high so configure SPI GPIO */ + + stm32_spiinitialize(); + + /* configure the high-resolution time/callout interface */ + hrt_init(); param_init();