From 89bb25efc1663d27c9b28bb2ceaa05edb24f1927 Mon Sep 17 00:00:00 2001 From: Yoshihiro TSUBOI Date: Tue, 29 Jan 2019 16:28:30 +0900 Subject: [PATCH] [Wio BG96] Fix onboard modem initialization Fix for issue #9450 by adding turning off the modem power at startup, so that modem is sure to be in the initial state. --- .../TARGET_WIO_BG96/ONBOARD_QUECTEL_BG96.cpp | 1 + .../TARGET_WIO_BG96/onboard_modem_api.c | 46 ++++++++++++------- 2 files changed, 30 insertions(+), 17 deletions(-) diff --git a/targets/TARGET_STM/TARGET_STM32F4/TARGET_STM32F439xI/TARGET_WIO_BG96/ONBOARD_QUECTEL_BG96.cpp b/targets/TARGET_STM/TARGET_STM32F4/TARGET_STM32F439xI/TARGET_WIO_BG96/ONBOARD_QUECTEL_BG96.cpp index f218a8204e..b309528152 100644 --- a/targets/TARGET_STM/TARGET_STM32F4/TARGET_STM32F439xI/TARGET_WIO_BG96/ONBOARD_QUECTEL_BG96.cpp +++ b/targets/TARGET_STM/TARGET_STM32F4/TARGET_STM32F439xI/TARGET_WIO_BG96/ONBOARD_QUECTEL_BG96.cpp @@ -25,6 +25,7 @@ using namespace mbed; ONBOARD_QUECTEL_BG96::ONBOARD_QUECTEL_BG96(FileHandle *fh) : QUECTEL_BG96(fh) { + ::onboard_modem_init(); } nsapi_error_t ONBOARD_QUECTEL_BG96::hard_power_on() diff --git a/targets/TARGET_STM/TARGET_STM32F4/TARGET_STM32F439xI/TARGET_WIO_BG96/onboard_modem_api.c b/targets/TARGET_STM/TARGET_STM32F4/TARGET_STM32F439xI/TARGET_WIO_BG96/onboard_modem_api.c index 265ac21688..fa10e622e6 100644 --- a/targets/TARGET_STM/TARGET_STM32F4/TARGET_STM32F439xI/TARGET_WIO_BG96/onboard_modem_api.c +++ b/targets/TARGET_STM/TARGET_STM32F4/TARGET_STM32F439xI/TARGET_WIO_BG96/onboard_modem_api.c @@ -1,5 +1,5 @@ /* mbed Microcontroller Library - * Copyright (c) 2018 Arm Limited + * Copyright (c) 2017 Arm Limited * * SPDX-License-Identifier: Apache-2.0 * @@ -23,6 +23,8 @@ #include "platform/mbed_wait_api.h" #include "PinNames.h" +#define WAIT_AFTER_POWR_CHANGED (1000) // [msec.] + #if MODEM_ON_BOARD static void press_power_button(int time_ms) @@ -30,7 +32,6 @@ static void press_power_button(int time_ms) gpio_t gpio; gpio_init_out_ex(&gpio, PWRKEY, 1); - gpio_write(&gpio, 1); wait_ms(time_ms); gpio_write(&gpio, 0); } @@ -38,35 +39,46 @@ static void press_power_button(int time_ms) void onboard_modem_init() { gpio_t gpio; - // start with modem disabled - gpio_init_out_ex(&gpio, RESET_MODULE, 0); - gpio_init_in_ex(&gpio, MDMSTAT, PullUp); - gpio_init_out_ex(&gpio, MDMDTR, 0); - gpio_init_out_ex(&gpio, M_POWR, 1); -// gpio_write(&gpio, M_POWR, 1); - wait_ms(500); + // Power Supply + gpio_init_out_ex(&gpio, M_POWR, 0); + // Turn On/Off + gpio_init_out_ex(&gpio, PWRKEY, 0); + gpio_init_out_ex(&gpio, RESET_MODULE, 0); + // Status Indication + gpio_init_in_ex(&gpio, MDMSTAT, PullUp); + // Main UART Interface + gpio_init_out_ex(&gpio, MDMDTR, 0); + + wait_ms(WAIT_AFTER_POWR_CHANGED); } void onboard_modem_deinit() { -// wio3g_mdm_powerOff(); + onboard_modem_power_down(); } void onboard_modem_power_up() { - /* keep the power line HIGH for 200 milisecond */ - press_power_button(200); - /* give modem a little time to respond */ - wait_ms(100); + gpio_t gpio; + + // Power supply ON + gpio_init_out_ex(&gpio, M_POWR, 1); + wait_ms(WAIT_AFTER_POWR_CHANGED); + + // Turn on + wait_ms(100); + press_power_button(200); } void onboard_modem_power_down() { - /* keep the power line low for 1 second */ -// press_power_button(1000); + gpio_t gpio; -// gpio_write(&mpowr, M_POWR, 0); + // Power supply OFF + gpio_init_out_ex(&gpio, M_POWR, 0); + wait_ms(WAIT_AFTER_POWR_CHANGED); } #endif //MODEM_ON_BOARD + #endif //MBED_CONF_NSAPI_PRESENT