boards: arm: Add support for SiLabs EFR32MG21 BRD4180A board

This commit adds support for Silicon Labs BRD4180A (a.k.a. SLWRB4180A)
Mighty Gecko Radio Board

Signed-off-by: Steven Lemaire <steven.lemaire@zii.aero>
This commit is contained in:
Steven Lemaire 2020-07-14 17:20:12 +02:00 committed by Carles Cufí
parent 3d5f4187af
commit 4e4d008c82
11 changed files with 371 additions and 17 deletions

View file

@ -6,13 +6,10 @@
config BOARD_EFR32_RADIO config BOARD_EFR32_RADIO
bool bool
if BOARD_EFR32_RADIO
config BOARD_INIT_PRIORITY config BOARD_INIT_PRIORITY
int int
default KERNEL_INIT_PRIORITY_DEFAULT default KERNEL_INIT_PRIORITY_DEFAULT
depends on BOARD_EFR32_RADIO
help help
Board initialization priority. This must be bigger than Board initialization priority. This must be bigger than
GPIO_GECKO_COMMON_INIT_PRIORITY. GPIO_GECKO_COMMON_INIT_PRIORITY.
endif # BOARD_EFR32_RADIO

View file

@ -1,6 +1,7 @@
# EFR32BG13 BRD4104A board # EFR32BG13 BRD4104A / EFR32MG21 BRD4180A board
# Copyright (c) 2020 Piotr Mienkowski # Copyright (c) 2020 Piotr Mienkowski
# Copyright (c) 2020 TriaGnoSys GmbH
# SPDX-License-Identifier: Apache-2.0 # SPDX-License-Identifier: Apache-2.0
config BOARD_EFR32_RADIO_BRD4104A config BOARD_EFR32_RADIO_BRD4104A
@ -14,3 +15,9 @@ config BOARD_EFR32_RADIO_BRD4250B
depends on SOC_SERIES_EFR32FG1P depends on SOC_SERIES_EFR32FG1P
select BOARD_EFR32_RADIO select BOARD_EFR32_RADIO
select SOC_PART_NUMBER_EFR32FG1P133F256GM48 select SOC_PART_NUMBER_EFR32FG1P133F256GM48
config BOARD_EFR32_RADIO_BRD4180A
bool "Silicon Labs BRD4180A (Mighty Gecko Radio Board)"
depends on SOC_SERIES_EFR32MG21
select BOARD_EFR32_RADIO
select SOC_PART_NUMBER_EFR32MG21A020F1024IM32

View file

@ -1,6 +1,7 @@
# EFR32 radio board # EFR32 radio board
# Copyright (c) 2020 Piotr Mienkowski # Copyright (c) 2020 Piotr Mienkowski
# Copyright (c) 2020 TriaGnoSys GmbH
# SPDX-License-Identifier: Apache-2.0 # SPDX-License-Identifier: Apache-2.0
if BOARD_EFR32_RADIO if BOARD_EFR32_RADIO
@ -8,6 +9,7 @@ if BOARD_EFR32_RADIO
config BOARD config BOARD
default "efr32_radio_brd4104a" if BOARD_EFR32_RADIO_BRD4104A default "efr32_radio_brd4104a" if BOARD_EFR32_RADIO_BRD4104A
default "efr32_radio_brd4250b" if BOARD_EFR32_RADIO_BRD4250B default "efr32_radio_brd4250b" if BOARD_EFR32_RADIO_BRD4250B
default "efr32_radio_brd4180a" if BOARD_EFR32_RADIO_BRD4180A
config CMU_HFXO_FREQ config CMU_HFXO_FREQ
default 38400000 default 38400000
@ -15,25 +17,16 @@ config CMU_HFXO_FREQ
config CMU_LFXO_FREQ config CMU_LFXO_FREQ
default 32768 default 32768
if LOG_BACKEND_SWO
config LOG_BACKEND_SWO_FREQ_HZ config LOG_BACKEND_SWO_FREQ_HZ
default 875000 default 875000
depends on LOG_BACKEND_SWO
endif # LOG_BACKEND_SWO
if SERIAL
config UART_GECKO config UART_GECKO
default y default y
depends on SERIAL
endif # SERIAL
if COUNTER
config COUNTER_GECKO_RTCC config COUNTER_GECKO_RTCC
default y default y
depends on COUNTER
endif # COUNTER
endif # BOARD_EFR32_RADIO endif # BOARD_EFR32_RADIO

View file

@ -9,8 +9,13 @@
#include <sys/printk.h> #include <sys/printk.h>
/* This pin is used to enable the serial port using the board controller */ /* This pin is used to enable the serial port using the board controller */
#ifdef CONFIG_BOARD_EFR32_RADIO_BRD4180A
#define VCOM_ENABLE_GPIO_NAME "GPIO_D"
#define VCOM_ENABLE_GPIO_PIN 4
#else
#define VCOM_ENABLE_GPIO_NAME "GPIO_A" #define VCOM_ENABLE_GPIO_NAME "GPIO_A"
#define VCOM_ENABLE_GPIO_PIN 5 #define VCOM_ENABLE_GPIO_PIN 5
#endif /* CONFIG_BOARD_EFR32_RADIO_BRD4180A */
static int efr32_radio_init(struct device *dev) static int efr32_radio_init(struct device *dev)
{ {

View file

@ -6,6 +6,8 @@ if(CONFIG_BOARD_EFR32_RADIO_BRD4104A)
board_runner_args(jlink "--device=EFR32BG13PxxxF512") board_runner_args(jlink "--device=EFR32BG13PxxxF512")
elseif(CONFIG_BOARD_EFR32_RADIO_BRD4250B) elseif(CONFIG_BOARD_EFR32_RADIO_BRD4250B)
board_runner_args(jlink "--device=EFR32FG1PxxxF256") board_runner_args(jlink "--device=EFR32FG1PxxxF256")
elseif(CONFIG_BOARD_EFR32_RADIO_BRD4180A)
board_runner_args(jlink "--device=EFR32MG21AxxxF1024")
endif() endif()
include(${ZEPHYR_BASE}/boards/common/openocd.board.cmake) include(${ZEPHYR_BASE}/boards/common/openocd.board.cmake)

View file

@ -0,0 +1,162 @@
.. _efr32_radio_brd4180a:
EFR32 BRD4180A (SLWRB4180A)
###########################
Overview
********
The EFR32MG21 Mighty Gecko Radio Board is one of the two
radio boards delivered with `EFR32-SLWSTK6006A Website`_. It contains
a Wireless System-On-Chip from the EFR32MG21 family built on an
ARM Cortex®-M33F processor with excellent low power capabilities.
.. figure:: ./efr32mg21-slwrb4180a.jpg
:height: 260px
:align: center
:alt: SLWRB4180A Mighty Gecko Radio Board
SLWRB4180A (image courtesy of Silicon Labs)
The BRD4180A a.k.a. SLWRB4180A radio board plugs into the Wireless Starter Kit
Mainboard BRD4001A and is supported as one of :ref:`efr32_radio`.
Hardware
********
- EFR32MG21A020F1024IM32 Mighty Gecko SoC
- CPU core: ARM Cortex®-M33 with FPU
- Flash memory: 1024 kB
- RAM: 96 kB
- Transmit power: up to +20 dBm
- Operation frequency: 2.4 GHz
- Crystals for LFXO (32.768 kHz) and HFXO (38.4 MHz).
For more information about the EFR32MG21 SoC and BRD4180A board, refer to these
documents:
- `EFR32MG21 Website`_
- `EFR32MG21 Datasheet`_
- `EFR32xG21 Reference Manual`_
- `EFR32-SLWSTK6006A Website`_
- `BRD4180A User Guide`_
Supported Features
==================
The board configuration supports the following hardware features:
+-----------+------------+-------------------------------------+
| Interface | Controller | Driver/Component |
+===========+============+=====================================+
| MPU | on-chip | memory protection unit |
+-----------+------------+-------------------------------------+
| NVIC | on-chip | nested vector interrupt controller |
+-----------+------------+-------------------------------------+
| SYSTICK | on-chip | systick |
+-----------+------------+-------------------------------------+
| COUNTER | on-chip | rtcc |
+-----------+------------+-------------------------------------+
| FLASH | on-chip | flash memory |
+-----------+------------+-------------------------------------+
| GPIO | on-chip | gpio |
+-----------+------------+-------------------------------------+
| UART | on-chip | serial port-polling; |
| | | serial port-interrupt |
+-----------+------------+-------------------------------------+
| I2C | on-chip | i2c port-polling |
+-----------+------------+-------------------------------------+
| WATCHDOG | on-chip | watchdog |
+-----------+------------+-------------------------------------+
Other hardware features are currently not supported by the port.
Connections and IOs
===================
In the following table, the column **Name** contains Pin names. For example, PA2
means Pin number 2 on PORTA, as used in the board's datasheets and manuals.
+-------+-------------+-------------------------------------+
| Name | Function | Usage |
+=======+=============+=====================================+
| PB0 | GPIO | LED0 |
+-------+-------------+-------------------------------------+
| PB1 | GPIO | LED1 |
+-------+-------------+-------------------------------------+
| PD2 | GPIO | Push Button PB0 |
+-------+-------------+-------------------------------------+
| PD3 | GPIO | Push Button PB1 |
+-------+-------------+-------------------------------------+
| PD4 | GPIO | Board Controller Enable |
| | | EFM_BC_EN |
+-------+-------------+-------------------------------------+
| PA5 | USART1_TX | UART Console EFM_BC_TX US1_TX |
+-------+-------------+-------------------------------------+
| PA6 | USART1_RX | UART Console EFM_BC_RX US1_RX |
+-------+-------------+-------------------------------------+
The default configuration can be found in the defconfig file:
``boards/arm/efr32_radio/efr32_radio_brd4180a_defconfig``
System Clock
============
The EFR32MG21 SoC is configured to use the 38.4 MHz external oscillator on the
board.
Serial Port
===========
The EFR32MG21 SoC has three USARTs.
USART0 is connected to the board controller and is used for the console.
Programming and Debugging
*************************
Please refer to
:ref:`Programming and Debugging EFR32 Radio Board <efr32_radio_programming>`
for details on the supported debug interfaces.
Flashing
========
Connect the BRD4001A board with a mounted BRD4180A radio module to your host
computer using the USB port.
Here is an example for the :ref:`hello_world` application.
.. zephyr-app-commands::
:zephyr-app: samples/hello_world
:board: efr32_radio_brd4180a
:goals: flash
Open a serial terminal (minicom, putty, etc.) with the following settings:
- Speed: 115200
- Data: 8 bits
- Parity: None
- Stop bits: 1
Reset the board and you should see the following message in the terminal:
.. code-block:: console
Hello World! efr32_radio_brd4180a
.. _EFR32-SLWSTK6006A Website:
https://www.silabs.com/products/development-tools/wireless/efr32xg21-wireless-starter-kit
.. _BRD4180A User Guide:
https://www.silabs.com/documents/public/user-guides/ug385-brd4180a-user-guide.pdf
.. _EFR32MG21 Website:
https://www.silabs.com/products/wireless/mesh-networking/efr32mg21-series-2-socs
.. _EFR32MG21 Datasheet:
https://www.silabs.com/documents/public/data-sheets/efr32mg21-datasheet.pdf
.. _EFR32xG21 Reference Manual:
https://www.silabs.com/documents/public/reference-manuals/efr32xg21-rm.pdf

Binary file not shown.

After

Width:  |  Height:  |  Size: 40 KiB

View file

@ -8,6 +8,7 @@ EFR32 Radio Boards
brd4104a.rst brd4104a.rst
brd4250b.rst brd4250b.rst
brd4180a.rst
Overview Overview
******** ********
@ -17,6 +18,7 @@ Support for EFR32 Radio boards is provided by one of the starter kits
- `SLWSTK6020B Bluetooth SoC Starter Kit`_ - `SLWSTK6020B Bluetooth SoC Starter Kit`_
- `SLWSTK6000B Mighty Gecko Wireless Starter Kit`_ - `SLWSTK6000B Mighty Gecko Wireless Starter Kit`_
- `SLWSTK6061B Proprietary Wireless Starter Kit`_ - `SLWSTK6061B Proprietary Wireless Starter Kit`_
- `SLWSTK6006A Mighty Gecko Wireless Starter Kit`_
.. figure:: ./efr32_slwstk6020b.jpg .. figure:: ./efr32_slwstk6020b.jpg
:width: 490px :width: 490px
@ -34,12 +36,14 @@ Wireless Starter Kit Mainboard:
consumption of an application or prototype design. consumption of an application or prototype design.
- Ultra-low power 128x128 pixel memory LCD - Ultra-low power 128x128 pixel memory LCD
- 2 user buttons and 2 LEDs - 2 user buttons and 2 LEDs
- 20 pin expansion header
- Si7021 Humidity and Temperature Sensor - Si7021 Humidity and Temperature Sensor
- On-board Segger J-Link USB and Ethernet debugger - On-board Segger J-Link USB and Ethernet debugger
For more information about the BRD4001A board, refer to these documents: For more information about the BRD4001A board, refer to these documents:
- `EFR32BG13 Blue Gecko Bluetooth Starter Kit User's Guide`_ - `EFR32BG13 Blue Gecko Bluetooth Starter Kit User's Guide`_
- `EFR32MG21 Mighty Gecko Wireless Starter Kit User's Guide`_
- `WSTK Main Board BRD4001A Schematics`_ - `WSTK Main Board BRD4001A Schematics`_
.. _efr32_radio_supported_features: .. _efr32_radio_supported_features:
@ -165,9 +169,15 @@ Reset the board and you should see the following message in the terminal:
.. _SLWSTK6061B Proprietary Wireless Starter Kit: .. _SLWSTK6061B Proprietary Wireless Starter Kit:
https://www.silabs.com/products/development-tools/wireless/proprietary/slwstk6061b-efr32-flex-gecko-868-mhz-2-4-ghz-and-sub-ghz-starter-kit https://www.silabs.com/products/development-tools/wireless/proprietary/slwstk6061b-efr32-flex-gecko-868-mhz-2-4-ghz-and-sub-ghz-starter-kit
.. _SLWSTK6006A Mighty Gecko Wireless Starter Kit:
https://www.silabs.com/products/development-tools/wireless/efr32xg21-wireless-starter-kit
.. _EFR32BG13 Blue Gecko Bluetooth Starter Kit User's Guide: .. _EFR32BG13 Blue Gecko Bluetooth Starter Kit User's Guide:
https://www.silabs.com/documents/public/user-guides/ug279-brd4104a-user-guide.pdf https://www.silabs.com/documents/public/user-guides/ug279-brd4104a-user-guide.pdf
.. _EFR32MG21 Mighty Gecko Wireless Starter Kit User's Guide:
https://www.silabs.com/documents/public/user-guides/ug385-brd4180a-user-guide.pdf
.. _WSTK Main Board BRD4001A Schematics: .. _WSTK Main Board BRD4001A Schematics:
https://www.silabs.com/documents/public/schematic-files/WSTK-Main-BRD4001A-A01-schematic.pdf https://www.silabs.com/documents/public/schematic-files/WSTK-Main-BRD4001A-A01-schematic.pdf

View file

@ -0,0 +1,146 @@
/*
* Copyright (c) 2020 TriaGnoSys GmbH
*
* SPDX-License-Identifier: Apache-2.0
*/
/dts-v1/;
#include <silabs/efr32mg21a020f1024im32.dtsi>
/ {
model = "Silicon Labs BRD4180A (Mighty Gecko Radio Board)";
compatible = "silabs,efr32mg21_brd4180a", "silabs,efr32mg21";
chosen {
zephyr,console = &usart0;
zephyr,shell-uart = &usart0;
zephyr,sram = &sram0;
zephyr,flash = &flash0;
zephyr,code-partition = &slot0_partition;
};
/* These aliases are provided for compatibility with samples */
aliases {
led0 = &led0;
led1 = &led1;
sw0 = &button0;
sw1 = &button1;
watchdog0 = &wdog0;
};
leds {
compatible = "gpio-leds";
led0: led_0 {
gpios = <&gpiob 0 0>;
label = "LED 0";
};
led1: led_1 {
gpios = <&gpiob 1 0>;
label = "LED 1";
};
};
buttons {
compatible = "gpio-keys";
button0: button_0 {
/* gpio flags need validation */
gpios = <&gpiod 2 GPIO_ACTIVE_LOW>;
label = "User Push Button 0";
};
button1: button_1 {
/* gpio flags need validation */
gpios = <&gpiod 3 GPIO_ACTIVE_LOW>;
label = "User Push Button 1";
};
};
};
&cpu0 {
clock-frequency = <38400000>;
};
&usart0 {
current-speed = <115200>;
location-rx = <GECKO_LOCATION(0) GECKO_PORT_C GECKO_PIN(1)>;
location-tx = <GECKO_LOCATION(0) GECKO_PORT_C GECKO_PIN(0)>;
status = "okay";
};
&rtcc0 {
prescaler = <1>;
status = "okay";
};
&gpio {
status = "okay";
};
&gpioa {
status = "okay";
};
&gpiob {
status = "okay";
};
&gpioc {
status = "okay";
};
&gpiod {
status = "okay";
};
&wdog0 {
status = "okay";
};
&flash0 {
/*
* If the chosen node has no zephyr,code-partition property, the
* application image link uses the entire flash device. If a
* zephyr,code-partition property is defined, the application link
* will be restricted to that partition.
*
* For more information, see:
* http://docs.zephyrproject.org/latest/guides/dts/index.html#flash-partitions
*/
partitions {
compatible = "fixed-partitions";
#address-cells = <1>;
#size-cells = <1>;
/* Reserve 48 kB for the bootloader */
boot_partition: partition@0 {
label = "mcuboot";
reg = <0x0 0x0000c000>;
read-only;
};
/* Reserve 464 kB for the application in slot 0 */
slot0_partition: partition@c000 {
label = "image-0";
reg = <0x0000c000 0x00074000>;
};
/* Reserve 464 kB for the application in slot 1 */
slot1_partition: partition@80000 {
label = "image-1";
reg = <0x00080000 0x00074000>;
};
/* Reserve 32 kB for the scratch partition */
scratch_partition: partition@f4000 {
label = "image-scratch";
reg = <0x000f4000 0x00008000>;
};
/* Set 16Kb of storage at the end of the 1024Kb of flash */
storage_partition: partition@fc000 {
label = "storage";
reg = <0x000fc000 0x00004000>;
};
};
};

View file

@ -0,0 +1,20 @@
identifier: efr32_radio_brd4180a
name: BRD4180A
type: mcu
arch: arm
ram: 96
flash: 1024
toolchain:
- zephyr
- gnuarmemb
- xtools
supported:
- counter
- gpio
- nvs
- uart
- watchdog
testing:
ignore_tags:
- net
- bluetooth

View file

@ -0,0 +1,12 @@
# SPDX-License-Identifier: Apache-2.0
CONFIG_SOC_SERIES_EFR32MG21=y
CONFIG_BOARD_EFR32_RADIO_BRD4180A=y
CONFIG_ARM_MPU=y
CONFIG_CONSOLE=y
CONFIG_UART_CONSOLE=y
CONFIG_SERIAL=y
CONFIG_CORTEX_M_SYSTICK=y
CONFIG_GPIO=y
CONFIG_SYS_CLOCK_HW_CYCLES_PER_SEC=38400000
CONFIG_CMU_HFCLK_HFXO=y