From 821865f70eef0fe1635b25fc96b10edf366911bb Mon Sep 17 00:00:00 2001 From: Bertrand Songis Date: Thu, 13 Jun 2019 19:25:20 +0200 Subject: [PATCH] Bsongis/x9 lite pwr fix (#6495) Board init sequence changed --- .../common/arm/stm32/bootloader/boot.cpp | 1 + radio/src/targets/horus/hal.h | 5 ++-- radio/src/targets/horus/pwr_driver.cpp | 23 +++++++++++-------- radio/src/targets/taranis/board.cpp | 19 ++++++++------- radio/src/targets/taranis/board_preinit.cpp | 6 ++++- radio/src/targets/taranis/pwr_driver.cpp | 14 +---------- 6 files changed, 32 insertions(+), 36 deletions(-) diff --git a/radio/src/targets/common/arm/stm32/bootloader/boot.cpp b/radio/src/targets/common/arm/stm32/bootloader/boot.cpp index 9555001f6..0663ef223 100644 --- a/radio/src/targets/common/arm/stm32/bootloader/boot.cpp +++ b/radio/src/targets/common/arm/stm32/bootloader/boot.cpp @@ -228,6 +228,7 @@ int main() #endif pwrInit(); + pwrOn(); delaysInit(); // needed for lcdInit() #if defined(DEBUG) diff --git a/radio/src/targets/horus/hal.h b/radio/src/targets/horus/hal.h index 11361676a..b94470799 100644 --- a/radio/src/targets/horus/hal.h +++ b/radio/src/targets/horus/hal.h @@ -279,9 +279,10 @@ // Power #define PWR_RCC_AHB1Periph RCC_AHB1Periph_GPIOJ -#define PWR_GPIO GPIOJ -#define PWR_SWITCH_GPIO_PIN GPIO_Pin_0 // PJ.00 +#define PWR_ON_GPIO GPIOJ #define PWR_ON_GPIO_PIN GPIO_Pin_1 // PJ.01 +#define PWR_SWITCH_GPIO GPIOJ +#define PWR_SWITCH_GPIO_PIN GPIO_Pin_0 // PJ.00 // S.Port update connector #define SPORT_MAX_BAUDRATE 250000 // < 400000 diff --git a/radio/src/targets/horus/pwr_driver.cpp b/radio/src/targets/horus/pwr_driver.cpp index 7c7dab489..71ee994e4 100644 --- a/radio/src/targets/horus/pwr_driver.cpp +++ b/radio/src/targets/horus/pwr_driver.cpp @@ -28,37 +28,40 @@ uint32_t powerupReason __NOINIT; // Stores power up reason beyond initializati void pwrInit() { GPIO_InitTypeDef GPIO_InitStructure; - // Init Module PWR + GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz; GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP; + + // Internal module PWR GPIO_ResetBits(INTMODULE_PWR_GPIO, INTMODULE_PWR_GPIO_PIN); GPIO_InitStructure.GPIO_Pin = INTMODULE_PWR_GPIO_PIN; GPIO_Init(INTMODULE_PWR_GPIO, &GPIO_InitStructure); + // External module PWR GPIO_ResetBits(EXTMODULE_PWR_GPIO, EXTMODULE_PWR_GPIO_PIN); GPIO_InitStructure.GPIO_Pin = EXTMODULE_PWR_GPIO_PIN; GPIO_Init(EXTMODULE_PWR_GPIO, &GPIO_InitStructure); GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN; - // Init PWR SWITCH PIN + // PWR SWITCH GPIO_InitStructure.GPIO_Pin = PWR_SWITCH_GPIO_PIN; - GPIO_Init(PWR_GPIO, &GPIO_InitStructure); + GPIO_Init(PWR_SWITCH_GPIO, &GPIO_InitStructure); - // Init PCBREV PIN + // PCBREV // TODO to be removed on X10? GPIO_ResetBits(PCBREV_GPIO, PCBREV_GPIO_PIN); GPIO_InitStructure.GPIO_Pin = PCBREV_GPIO_PIN; GPIO_Init(PCBREV_GPIO, &GPIO_InitStructure); - // Init SD-DETECT PIN + // SD-DETECT PIN GPIO_ResetBits(SD_PRESENT_GPIO, SD_PRESENT_GPIO_PIN); GPIO_InitStructure.GPIO_Pin = SD_PRESENT_GPIO_PIN; GPIO_Init(SD_PRESENT_GPIO, &GPIO_InitStructure); - // Init TRAINER DETECT PIN + // TRAINER DETECT PIN GPIO_InitStructure.GPIO_Pin = TRAINER_DETECT_GPIO_PIN; GPIO_Init(TRAINER_DETECT_GPIO, &GPIO_InitStructure); @@ -73,9 +76,9 @@ void pwrOn() GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz; GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP; - GPIO_Init(PWR_GPIO, &GPIO_InitStructure); + GPIO_Init(PWR_ON_GPIO, &GPIO_InitStructure); - GPIO_SetBits(PWR_GPIO, PWR_ON_GPIO_PIN); + GPIO_SetBits(PWR_ON_GPIO, PWR_ON_GPIO_PIN); shutdownRequest = NO_SHUTDOWN_REQUEST; shutdownReason = DIRTY_SHUTDOWN; @@ -100,12 +103,12 @@ void pwrOff() shutdownRequest = SHUTDOWN_REQUEST; shutdownReason = NORMAL_POWER_OFF; - GPIO_ResetBits(PWR_GPIO, PWR_ON_GPIO_PIN); + GPIO_ResetBits(PWR_ON_GPIO, PWR_ON_GPIO_PIN); } uint32_t pwrPressed() { - return GPIO_ReadInputDataBit(PWR_GPIO, PWR_SWITCH_GPIO_PIN) == Bit_RESET; + return GPIO_ReadInputDataBit(PWR_ON_GPIO, PWR_SWITCH_GPIO_PIN) == Bit_RESET; } void pwrResetHandler() diff --git a/radio/src/targets/taranis/board.cpp b/radio/src/targets/taranis/board.cpp index b8f408b3c..f5704f08b 100644 --- a/radio/src/targets/taranis/board.cpp +++ b/radio/src/targets/taranis/board.cpp @@ -192,10 +192,7 @@ void boardInit() bluetoothInit(BLUETOOTH_DEFAULT_BAUDRATE, true); #endif -#if !defined(PCBX9E) - // some X9E boards need that the pwrInit() is moved a little bit later pwrInit(); -#endif #if defined(STATUS_LEDS) ledInit(); @@ -247,7 +244,7 @@ void boardInit() #if defined(PWR_BUTTON_PRESS) if (!WAS_RESET_BY_WATCHDOG_OR_SOFTWARE()) { lcdClear(); -#if defined(PCBX9E) +#if LCD_DEPTH > 1 lcdDrawBitmap(76, 2, bmp_lock, 0, 60); #else lcdDrawFilledRect(LCD_W / 2 - 18, LCD_H / 2 - 3, 6, 6, SOLID, 0); @@ -263,7 +260,7 @@ void boardInit() if (duration < PWR_PRESS_DURATION_MIN) { unsigned index = duration / (PWR_PRESS_DURATION_MIN / 4); lcdClear(); -#if defined(PCBX9E) +#if LCD_DEPTH > 1 lcdDrawBitmap(76, 2, bmp_startup, index*60, 60); #else for(uint8_t i= 0; i < 4; i++) { @@ -280,7 +277,7 @@ void boardInit() else { if (pwr_on != 1) { pwr_on = 1; - pwrInit(); + pwrOn(); backlightInit(); haptic.play(15, 3, PLAY_NOW); } @@ -293,15 +290,17 @@ void boardInit() } } else { - pwrInit(); + pwrOn(); backlightInit(); } +#else // defined(PWR_BUTTON_PRESS) + pwrOn(); + backlightInit(); +#endif + #if defined(TOPLCD_GPIO) toplcdInit(); #endif -#else // defined(PWR_BUTTON_PRESS) - backlightInit(); -#endif if (HAS_SPORT_UPDATE_CONNECTOR()) { sportUpdateInit(); diff --git a/radio/src/targets/taranis/board_preinit.cpp b/radio/src/targets/taranis/board_preinit.cpp index 743dff65f..116c2577d 100644 --- a/radio/src/targets/taranis/board_preinit.cpp +++ b/radio/src/targets/taranis/board_preinit.cpp @@ -22,14 +22,18 @@ void boardPreInit() { -#if defined(INTMODULE_BOOTCMD_GPIO) GPIO_InitTypeDef GPIO_InitStructure; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz; GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP; + // Board PWR kept OFF + GPIO_ResetBits(PWR_ON_GPIO, PWR_ON_GPIO_PIN); + GPIO_InitStructure.GPIO_Pin = PWR_ON_GPIO_PIN; + GPIO_Init(PWR_ON_GPIO, &GPIO_InitStructure); +#if defined(INTMODULE_BOOTCMD_GPIO) GPIO_SetBits(INTMODULE_BOOTCMD_GPIO, INTMODULE_BOOTCMD_GPIO_PIN); GPIO_InitStructure.GPIO_Pin = INTMODULE_BOOTCMD_GPIO_PIN; GPIO_Init(INTMODULE_BOOTCMD_GPIO, &GPIO_InitStructure); diff --git a/radio/src/targets/taranis/pwr_driver.cpp b/radio/src/targets/taranis/pwr_driver.cpp index ec4e5d3ac..f0e9855be 100644 --- a/radio/src/targets/taranis/pwr_driver.cpp +++ b/radio/src/targets/taranis/pwr_driver.cpp @@ -23,12 +23,11 @@ void pwrInit() { GPIO_InitTypeDef GPIO_InitStructure; - - GPIO_InitStructure.GPIO_Pin = PWR_ON_GPIO_PIN; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz; GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP; + GPIO_ResetBits(INTMODULE_PWR_GPIO, INTMODULE_PWR_GPIO_PIN); GPIO_InitStructure.GPIO_Pin = INTMODULE_PWR_GPIO_PIN; GPIO_Init(INTMODULE_PWR_GPIO, &GPIO_InitStructure); @@ -58,21 +57,10 @@ void pwrInit() GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_DOWN; GPIO_Init(PCBREV_GPIO, &GPIO_InitStructure); #endif - - pwrOn(); } void pwrOn() { - GPIO_InitTypeDef GPIO_InitStructure; - - GPIO_InitStructure.GPIO_Pin = PWR_ON_GPIO_PIN; - GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT; - GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz; - GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; - GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP; - GPIO_Init(PWR_ON_GPIO, &GPIO_InitStructure); - GPIO_SetBits(PWR_ON_GPIO, PWR_ON_GPIO_PIN); }