From 42db954d06fa1930786fb5dc91b569ae5394edf8 Mon Sep 17 00:00:00 2001 From: Reda Maher Date: Mon, 29 Jul 2019 21:17:15 +0200 Subject: [PATCH] Add Riot Micro cellular module targets --- .../ONBOARD_RM1000_AT.cpp | 79 ++++++++++ .../ONBOARD_RM1000_AT.h | 38 +++++ .../TARGET_RM6100/PinNames.h | 138 +++++++++++++++++ .../TARGET_RM7100/PinNames.h | 141 ++++++++++++++++++ .../TARGET_RIOT_MICRO_MODULE/device.h | 23 +++ .../onboard_modem_api.c | 105 +++++++++++++ targets/targets.json | 32 ++++ 7 files changed, 556 insertions(+) create mode 100644 targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_NRF52/TARGET_MCU_NRF52832/TARGET_RIOT_MICRO_MODULE/ONBOARD_RM1000_AT.cpp create mode 100644 targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_NRF52/TARGET_MCU_NRF52832/TARGET_RIOT_MICRO_MODULE/ONBOARD_RM1000_AT.h create mode 100644 targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_NRF52/TARGET_MCU_NRF52832/TARGET_RIOT_MICRO_MODULE/TARGET_RM6100/PinNames.h create mode 100644 targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_NRF52/TARGET_MCU_NRF52832/TARGET_RIOT_MICRO_MODULE/TARGET_RM7100/PinNames.h create mode 100644 targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_NRF52/TARGET_MCU_NRF52832/TARGET_RIOT_MICRO_MODULE/device.h create mode 100644 targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_NRF52/TARGET_MCU_NRF52832/TARGET_RIOT_MICRO_MODULE/onboard_modem_api.c diff --git a/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_NRF52/TARGET_MCU_NRF52832/TARGET_RIOT_MICRO_MODULE/ONBOARD_RM1000_AT.cpp b/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_NRF52/TARGET_MCU_NRF52832/TARGET_RIOT_MICRO_MODULE/ONBOARD_RM1000_AT.cpp new file mode 100644 index 0000000000..be14636e72 --- /dev/null +++ b/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_NRF52/TARGET_MCU_NRF52832/TARGET_RIOT_MICRO_MODULE/ONBOARD_RM1000_AT.cpp @@ -0,0 +1,79 @@ +/* mbed Microcontroller Library + * Copyright (c) 2018 ARM Limited + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#if MBED_CONF_NSAPI_PRESENT + +#include "ONBOARD_RM1000_AT.h" +#include "cellular/onboard_modem_api.h" +#include "UARTSerial.h" + +#include "mbed-trace/mbed_trace.h" +#ifndef TRACE_GROUP +#define TRACE_GROUP "RIOTMICRO" +#endif // TRACE_GROUP + +using namespace mbed; + +ONBOARD_RM1000_AT::ONBOARD_RM1000_AT(FileHandle *fh) : RM1000_AT(fh) +{ +} + +nsapi_error_t ONBOARD_RM1000_AT::hard_power_on() +{ + tr_debug("Calling ONBOARD_RM1000_AT::hard_power_on"); + + return NSAPI_ERROR_OK; +} + +nsapi_error_t ONBOARD_RM1000_AT::hard_power_off() +{ + tr_debug("Calling ONBOARD_RM1000_AT::hard_power_off"); + + return NSAPI_ERROR_OK; +} + +nsapi_error_t ONBOARD_RM1000_AT::soft_power_on() +{ + tr_debug("Calling ONBOARD_RM1000_AT::soft_power_on"); + + ::onboard_modem_init(); + return NSAPI_ERROR_OK; +} + +nsapi_error_t ONBOARD_RM1000_AT::soft_power_off() +{ + tr_debug("Calling ONBOARD_RM1000_AT::soft_power_off"); + + ::onboard_modem_deinit(); + return NSAPI_ERROR_OK; +} + +CellularDevice *CellularDevice::get_target_default_instance() +{ + tr_debug("Calling CellularDevice::get_target_default_instance from ONBOARD_RM1000_AT"); + + static UARTSerial serial(MDM_UART3_TXD, MDM_UART3_RXD, 230400); +#if DEVICE_SERIAL_FC + if (MDM_UART3_RTS != NC && MDM_UART3_CTS != NC) { + tr_debug("Modem flow control: RTS %d CTS %d", MDM_UART3_RTS, MDM_UART3_CTS); + serial.set_flow_control(SerialBase::RTSCTS, MDM_UART3_RTS, MDM_UART3_CTS); + } +#endif + static ONBOARD_RM1000_AT device(&serial); + return &device; +} + +#endif // MBED_CONF_NSAPI_PRESENT diff --git a/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_NRF52/TARGET_MCU_NRF52832/TARGET_RIOT_MICRO_MODULE/ONBOARD_RM1000_AT.h b/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_NRF52/TARGET_MCU_NRF52832/TARGET_RIOT_MICRO_MODULE/ONBOARD_RM1000_AT.h new file mode 100644 index 0000000000..cad627ee94 --- /dev/null +++ b/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_NRF52/TARGET_MCU_NRF52832/TARGET_RIOT_MICRO_MODULE/ONBOARD_RM1000_AT.h @@ -0,0 +1,38 @@ +/* mbed Microcontroller Library + * Copyright (c) 2018 ARM Limited + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef ONBOARD_RM1000_AT_ +#define ONBOARD_RM1000_AT_ + +#include "RM1000_AT.h" + +namespace mbed +{ + +class ONBOARD_RM1000_AT : public RM1000_AT +{ +public: + ONBOARD_RM1000_AT(FileHandle *fh); + + virtual nsapi_error_t hard_power_on(); + virtual nsapi_error_t hard_power_off(); + virtual nsapi_error_t soft_power_on(); + virtual nsapi_error_t soft_power_off(); +}; + +} // namespace mbed + +#endif // ONBOARD_RM1000_AT_ diff --git a/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_NRF52/TARGET_MCU_NRF52832/TARGET_RIOT_MICRO_MODULE/TARGET_RM6100/PinNames.h b/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_NRF52/TARGET_MCU_NRF52832/TARGET_RIOT_MICRO_MODULE/TARGET_RM6100/PinNames.h new file mode 100644 index 0000000000..d0d1c67e4c --- /dev/null +++ b/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_NRF52/TARGET_MCU_NRF52832/TARGET_RIOT_MICRO_MODULE/TARGET_RM6100/PinNames.h @@ -0,0 +1,138 @@ +#ifndef MBED_PINNAMES_H +#define MBED_PINNAMES_H + +#include "cmsis.h" + +#ifdef __cplusplus +extern "C" { +#endif + +typedef enum { + PIN_INPUT, + PIN_OUTPUT +} PinDirection; + +#define PORT_SHIFT 3 + +typedef enum { + // nRF52 pin names + p0 = 0, + p1 = 1, + p2 = 2, + p3 = 3, + p4 = 4, + p5 = 5, + p6 = 6, + p7 = 7, + p8 = 8, + p9 = 9, + p10 = 10, + p11 = 11, + p12 = 12, + p13 = 13, + p14 = 14, + p15 = 15, + p16 = 16, + p17 = 17, + p18 = 18, + p19 = 19, + p20 = 20, + p21 = 21, + p22 = 22, + p23 = 23, + p24 = 24, + p25 = 25, + p26 = 26, + p27 = 27, + p28 = 28, + p29 = 29, + p30 = 30, + p31 = 31, + NC = (int)0xFFFFFFFF, // Not connected + + P0_0 = p0, + P0_1 = p1, + P0_2 = p2, + P0_3 = p3, + P0_4 = p4, + P0_5 = p5, + P0_6 = p6, + P0_7 = p7, + + P0_8 = p8, + P0_9 = p9, + P0_10 = p10, + P0_11 = p11, + P0_12 = p12, + P0_13 = p13, + P0_14 = p14, + P0_15 = p15, + + P0_16 = p16, + P0_17 = p17, + P0_18 = p18, + P0_19 = p19, + P0_20 = p20, + P0_21 = p21, + P0_22 = p22, + P0_23 = p23, + + P0_24 = p24, + P0_25 = p25, + P0_26 = p26, + P0_27 = p27, + P0_28 = p28, + P0_29 = p29, + P0_30 = p30, + P0_31 = p31, + + MDMCHEN = p13, + MDMREMAP = p14, + MDMRST = p25, + + MDM_UART0_TXD = p15, + MDM_UART0_RXD = p16, + MDM_UART1_TXD = p17, + MDM_UART1_RXD = p18, + + MDM_UART3_TXD = p19, + MDM_UART3_RXD = p20, + MDM_UART3_RTS = NC, + MDM_UART3_CTS = NC, + + LED1 = P0_10, + LED2 = P0_22, + + RX_PIN_NUMBER = NC, + TX_PIN_NUMBER = NC, + CTS_PIN_NUMBER = NC, + RTS_PIN_NUMBER = NC, + + // mBed interface Pins + USBTX = TX_PIN_NUMBER, + USBRX = RX_PIN_NUMBER, + STDIO_UART_TX = TX_PIN_NUMBER, + STDIO_UART_RX = RX_PIN_NUMBER, + STDIO_UART_CTS = CTS_PIN_NUMBER, + STDIO_UART_RTS = RTS_PIN_NUMBER, + + A0 = NC, + A1 = p4, + A2 = p28, + A3 = p29, + A4 = p30, + A5 = p31, +} PinName; + +typedef enum { + PullNone = 0, + PullDown = 1, + PullUp = 3, + PullDefault = PullUp +} PinMode; + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_NRF52/TARGET_MCU_NRF52832/TARGET_RIOT_MICRO_MODULE/TARGET_RM7100/PinNames.h b/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_NRF52/TARGET_MCU_NRF52832/TARGET_RIOT_MICRO_MODULE/TARGET_RM7100/PinNames.h new file mode 100644 index 0000000000..df814ce80a --- /dev/null +++ b/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_NRF52/TARGET_MCU_NRF52832/TARGET_RIOT_MICRO_MODULE/TARGET_RM7100/PinNames.h @@ -0,0 +1,141 @@ +#ifndef MBED_PINNAMES_H +#define MBED_PINNAMES_H + +#include "cmsis.h" + +#ifdef __cplusplus +extern "C" { +#endif + +typedef enum { + PIN_INPUT, + PIN_OUTPUT +} PinDirection; + +#define PORT_SHIFT 3 + +typedef enum { + // nRF52 pin names + p0 = 0, + p1 = 1, + p2 = 2, + p3 = 3, + p4 = 4, + p5 = 5, + p6 = 6, + p7 = 7, + p8 = 8, + p9 = 9, + p10 = 10, + p11 = 11, + p12 = 12, + p13 = 13, + p14 = 14, + p15 = 15, + p16 = 16, + p17 = 17, + p18 = 18, + p19 = 19, + p20 = 20, + p21 = 21, + p22 = 22, + p23 = 23, + p24 = 24, + p25 = 25, + p26 = 26, + p27 = 27, + p28 = 28, + p29 = 29, + p30 = 30, + p31 = 31, + NC = (int)0xFFFFFFFF, // Not connected + + P0_0 = p0, + P0_1 = p1, + P0_2 = p2, + P0_3 = p3, + P0_4 = p4, + P0_5 = p5, + P0_6 = p6, + P0_7 = p7, + + P0_8 = p8, + P0_9 = p9, + P0_10 = p10, + P0_11 = p11, + P0_12 = p12, + P0_13 = p13, + P0_14 = p14, + P0_15 = p15, + + P0_16 = p16, + P0_17 = p17, + P0_18 = p18, + P0_19 = p19, + P0_20 = p20, + P0_21 = p21, + P0_22 = p22, + P0_23 = p23, + + P0_24 = p24, + P0_25 = p25, + P0_26 = p26, + P0_27 = p27, + P0_28 = p28, + P0_29 = p29, + P0_30 = p30, + P0_31 = p31, + + MDMCHEN = p13, + MDMREMAP = p14, + MDMRST = p25, + + MDM_UART0_TXD = p15, + MDM_UART0_RXD = p16, + MDM_UART1_TXD = p17, + MDM_UART1_RXD = p18, + + MDM_UART3_TXD = p19, + MDM_UART3_RXD = p20, + MDM_UART3_RTS = NC, + MDM_UART3_CTS = NC, + + LED1 = P0_10, + LED2 = P0_22, + + RX_PIN_NUMBER = NC, + TX_PIN_NUMBER = NC, + CTS_PIN_NUMBER = NC, + RTS_PIN_NUMBER = NC, + + // mBed interface Pins + USBTX = TX_PIN_NUMBER, + USBRX = RX_PIN_NUMBER, + STDIO_UART_TX = TX_PIN_NUMBER, + STDIO_UART_RX = RX_PIN_NUMBER, + STDIO_UART_CTS = CTS_PIN_NUMBER, + STDIO_UART_RTS = RTS_PIN_NUMBER, + + I2C_SDA0 = p12, + I2C_SCL0 = p11, + + A0 = p2, + A1 = p28, + A2 = p4, + A3 = p29, + A4 = p30, + A5 = p31, +} PinName; + +typedef enum { + PullNone = 0, + PullDown = 1, + PullUp = 3, + PullDefault = PullUp +} PinMode; + +#ifdef __cplusplus +} + +#endif +#endif diff --git a/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_NRF52/TARGET_MCU_NRF52832/TARGET_RIOT_MICRO_MODULE/device.h b/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_NRF52/TARGET_MCU_NRF52832/TARGET_RIOT_MICRO_MODULE/device.h new file mode 100644 index 0000000000..493844b801 --- /dev/null +++ b/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_NRF52/TARGET_MCU_NRF52832/TARGET_RIOT_MICRO_MODULE/device.h @@ -0,0 +1,23 @@ +// The 'features' section in 'target.json' is now used to create the device's hardware preprocessor switches. +// Check the 'features' section of the target description in 'targets.json' for more details. +/* mbed Microcontroller Library + * Copyright (c) 2006-2013 ARM Limited + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +#ifndef MBED_DEVICE_H +#define MBED_DEVICE_H + +#include "objects.h" + +#endif diff --git a/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_NRF52/TARGET_MCU_NRF52832/TARGET_RIOT_MICRO_MODULE/onboard_modem_api.c b/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_NRF52/TARGET_MCU_NRF52832/TARGET_RIOT_MICRO_MODULE/onboard_modem_api.c new file mode 100644 index 0000000000..d04193e4b6 --- /dev/null +++ b/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_NRF52/TARGET_MCU_NRF52832/TARGET_RIOT_MICRO_MODULE/onboard_modem_api.c @@ -0,0 +1,105 @@ +/* mbed Microcontroller Library + * Copyright (c) 2017 ARM Limited + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#if MBED_CONF_NSAPI_PRESENT + +#include "mbed-trace/mbed_trace.h" +#ifndef TRACE_GROUP +#define TRACE_GROUP "RIOT" +#endif // TRACE_GROUP + + +#include "onboard_modem_api.h" +#include "gpio_api.h" +#include "PinNames.h" +#include "hal/serial_api.h" +#include "mbed_wait_api.h" + +#if MODEM_ON_BOARD + +void onboard_modem_init() +{ + char promptEnd; + + tr_debug("onboard_modem_init"); + + gpio_t gpio; + + gpio_init_out_ex(&gpio, MDMCHEN, 0); + gpio_init_out_ex(&gpio, MDMREMAP, 0); + // Take us out of reset + gpio_init_out_ex(&gpio, MDMRST, 0); + wait_ms(100); + gpio_write(&gpio, 1); + + /* Initialize UART1 pins to allow collecting logs from a PC */ + gpio_init_in_ex(&gpio, MDM_UART1_TXD, PullNone); + gpio_init_in_ex(&gpio, MDM_UART1_RXD, PullNone); + + serial_t bootrom_uart; + serial_init(&bootrom_uart, MDM_UART0_TXD, MDM_UART0_RXD); + serial_baud(&bootrom_uart, 115200); + + tr_debug("%s: MODEM RESET", __func__); + + serial_getc(&bootrom_uart); + tr_debug("%s: MODEM first activity after reset", __func__); + /* Wait for some dots */ + for (int i = 0; i < 3; i++) { + do { + promptEnd = serial_getc(&bootrom_uart); + } while ('.' != promptEnd); + } + serial_putc(&bootrom_uart, ' '); + /* Wait for bootrom prompt */ + for (int i = 0; i < 2; i++) { + do { + promptEnd = serial_getc(&bootrom_uart); + } while ('>' != promptEnd); + } + serial_putc(&bootrom_uart, '6'); + serial_free(&bootrom_uart); + + /* Wait for stack prompt */ + tr_debug("%s: Wait for stack prompt", __func__); + wait_ms(100); + serial_t cli_uart; + serial_init(&cli_uart, MDM_UART3_TXD, MDM_UART3_RXD); + serial_baud(&cli_uart, 230400); /* TODO make baud rate configurable */ + + do { + promptEnd = serial_getc(&cli_uart); + } while ('>' != promptEnd); + + serial_free(&cli_uart); + + tr_debug("%s: MODEM CLI prompt reached", __func__); + + tr_debug("Reset RM1000 completed"); +} + +void onboard_modem_deinit() +{ + tr_debug("onboard_modem_deinit"); + + gpio_t gpio; + + // Back into reset + gpio_init_out_ex(&gpio, MDMRST, 0); +} + +#endif //MODEM_ON_BOARD +#endif //MBED_CONF_NSAPI_PRESENT diff --git a/targets/targets.json b/targets/targets.json index e4b6afa5a9..b106ba1719 100644 --- a/targets/targets.json +++ b/targets/targets.json @@ -7258,6 +7258,38 @@ ], "device_has_remove": ["ITM"] }, + "RIOT_MICRO_MODULE": { + "inherits": ["MCU_NRF52832"], + "release_versions": ["5"], + "public": false, + "config": { + "modem_is_on_board": { + "help": "Value: Tells the build system that the modem is on-board as opposed to a plug-in shield/module.", + "value": 1, + "macro_name": "MODEM_ON_BOARD" + }, + "modem_data_connection_type": { + "help": "Value: Defines how the modem is wired up to the MCU, e.g., data connection can be a UART or USB and so forth.", + "value": 1, + "macro_name": "MODEM_ON_BOARD_UART" + } + }, + "overrides": { + "network-default-interface-type": "CELLULAR" + }, + "bootloader_supported": false + }, + "RM6100": { + "inherits": ["RIOT_MICRO_MODULE"], + "device_name": "nRF52832_xxAA" + }, + "RM7100": { + "inherits": ["RIOT_MICRO_MODULE"], + "macros_add": [ + "CONFIG_NFCT_PINS_AS_GPIOS" + ], + "device_name": "nRF52832_xxAA" + }, "SDT52832B": { "inherits": ["MCU_NRF52832"], "release_versions": ["5"],