From 195468bf06fb37bcd6747a2400e6d296cfc279d1 Mon Sep 17 00:00:00 2001 From: David Sidrane Date: Mon, 10 Jul 2017 17:14:37 -1000 Subject: [PATCH] px4fmuv4pro: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 ~ 180 ms of power off time with 0.00 voltage applied to the sensors. --- .../boards/px4fmu-v4pro/board_config.h | 2 +- src/drivers/boards/px4fmu-v4pro/px4fmu_init.c | 21 ++++++++++++++++--- 2 files changed, 19 insertions(+), 4 deletions(-) diff --git a/src/drivers/boards/px4fmu-v4pro/board_config.h b/src/drivers/boards/px4fmu-v4pro/board_config.h index dcc3cd65e3..f7bd5c6f4b 100644 --- a/src/drivers/boards/px4fmu-v4pro/board_config.h +++ b/src/drivers/boards/px4fmu-v4pro/board_config.h @@ -235,7 +235,7 @@ __BEGIN_DECLS /* Power supply control and monitoring GPIOs */ #define GPIO_VDD_BRICK_VALID (GPIO_INPUT|GPIO_PULLUP|GPIO_PORTG|GPIO_PIN5) #define GPIO_VDD_BRICK2_VALID (GPIO_INPUT|GPIO_PULLUP|GPIO_PORTB|GPIO_PIN5) -#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_3V3_PERIPH_EN (GPIO_OUTPUT|GPIO_PUSHPULL|GPIO_SPEED_2MHz|GPIO_OUTPUT_SET|GPIO_PORTC|GPIO_PIN5) #define GPIO_VDD_5V_PERIPH_EN (GPIO_OUTPUT|GPIO_PUSHPULL|GPIO_SPEED_2MHz|GPIO_OUTPUT_CLEAR|GPIO_PORTG|GPIO_PIN10) #define GPIO_VDD_5V_HIPOWER_EN (GPIO_OUTPUT|GPIO_PUSHPULL|GPIO_SPEED_2MHz|GPIO_OUTPUT_CLEAR|GPIO_PORTF|GPIO_PIN4) diff --git a/src/drivers/boards/px4fmu-v4pro/px4fmu_init.c b/src/drivers/boards/px4fmu-v4pro/px4fmu_init.c index 72ffc43cea..826da689d9 100644 --- a/src/drivers/boards/px4fmu-v4pro/px4fmu_init.c +++ b/src/drivers/boards/px4fmu-v4pro/px4fmu_init.c @@ -172,6 +172,9 @@ stm32_boardinitialize(void) /* configure LEDs */ board_autoled_initialize(); + /* Start with Power off */ + stm32_configgpio(GPIO_VDD_3V3_SENSORS_EN); + /* configure ADC pins */ stm32_configgpio(GPIO_ADC1_IN2); /* BATT_VOLTAGE_SENS */ stm32_configgpio(GPIO_ADC1_IN3); /* BATT_CURRENT_SENS */ @@ -181,7 +184,6 @@ stm32_boardinitialize(void) /* configure power supply control/sense pins */ stm32_configgpio(GPIO_VDD_3V3_PERIPH_EN); - stm32_configgpio(GPIO_VDD_3V3_SENSORS_EN); stm32_configgpio(GPIO_VDD_5V_PERIPH_EN); stm32_configgpio(GPIO_VDD_5V_HIPOWER_EN); @@ -207,8 +209,12 @@ stm32_boardinitialize(void) stm32_configgpio(GPIO_GPIO4_OUTPUT); stm32_configgpio(GPIO_GPIO5_OUTPUT); - /* 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 + */ + stm32_usbinitialize(); @@ -262,6 +268,15 @@ __EXPORT int board_app_initialize(uintptr_t arg) # error platform is dependent on c++ both CONFIG_HAVE_CXX and CONFIG_HAVE_CXXINITIALIZE must be defined. #endif + /* Bring up the Sensor power */ + + stm32_gpiowrite(GPIO_VDD_3V3_SENSORS_EN, 1); + + /* Now it is ok to drvie the pins high + * so configure SPI CPIO */ + + stm32_spiinitialize(); + /* configure the high-resolution time/callout interface */ hrt_init();