Skip to content

Commit

Permalink
boards: arm: Add support for Silicon Labs EFM32PG-STK3402A
Browse files Browse the repository at this point in the history
The EFM32 Pearl Gecko Starter Kit contains sensors and
peripherals demonstrating the usage of the EFM32PG MCU
family. This patch adds basic support for this board
and is copied from EFM32WG-STK3800.

Signed-off-by: Gil Benkö <gil.benkoe@pm.me>
Signed-off-by: Christian Taedcke <hacking@taedcke.com>
  • Loading branch information
GilBenkoe authored and chrta committed Nov 21, 2018
1 parent 71b6609 commit 9a9f4b7
Show file tree
Hide file tree
Showing 12 changed files with 442 additions and 0 deletions.
5 changes: 5 additions & 0 deletions boards/arm/efm32pg_stk3402a/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
if(CONFIG_UART_GECKO)
zephyr_library()
zephyr_library_sources(board.c)
zephyr_library_include_directories(${PROJECT_SOURCE_DIR}/drivers)
endif()
19 changes: 19 additions & 0 deletions boards/arm/efm32pg_stk3402a/Kconfig
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
# Kconfig - EFM32PG STK3402A board configuration
#
# Copyright (c) 2018 Christian Taedcke
#
# SPDX-License-Identifier: Apache-2.0

if BOARD_EFM32PG_STK3402A

config BOARD_INIT_PRIORITY
int

# omit prompt to signify a "hidden" option
default KERNEL_INIT_PRIORITY_DEFAULT
depends on GPIO
help
Board initialization priority. This must be bigger than
GPIO_GECKO_COMMON_INIT_PRIORITY.

endif # BOARD_EFM32PG_STK3402A
12 changes: 12 additions & 0 deletions boards/arm/efm32pg_stk3402a/Kconfig.board
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
# Kconfig - EFM32PG STK3402A board
#
# Copyright (c) 2018, Christian Taedcke
#
# SPDX-License-Identifier: Apache-2.0
#

config BOARD_EFM32PG_STK3402A
bool "SiLabs EFM32PG-STK3402A (Pearl Gecko)"
depends on SOC_SERIES_EFM32PG12B
select SOC_PART_NUMBER_EFM32PG12B500F1024GL125
select HAS_DTS_I2C
62 changes: 62 additions & 0 deletions boards/arm/efm32pg_stk3402a/Kconfig.defconfig
Original file line number Diff line number Diff line change
@@ -0,0 +1,62 @@
# Kconfig - EFM32PG STK3402A board
#
# Copyright (c) 2018, Christian Taedcke
#
# SPDX-License-Identifier: Apache-2.0
#

if BOARD_EFM32PG_STK3402A

config BOARD
default "efm32pg_stk3402a"

config CMU_HFXO_FREQ
default 40000000

config CMU_LFXO_FREQ
default 32768

if GPIO_GECKO

config GPIO_GECKO_PORTA
default y

config GPIO_GECKO_PORTB
default y

config GPIO_GECKO_PORTC
default n

config GPIO_GECKO_PORTD
default y

config GPIO_GECKO_PORTE
default n

config GPIO_GECKO_PORTF
default y

endif # GPIO_GECKO

if UART_GECKO

config USART_GECKO_0
default y

endif # UART_GECKO

if LEUART_GECKO

config LEUART_GECKO_0
default y

endif # LEUART_GECKO

if I2C_GECKO

config I2C_0
default y

endif # I2C_GECKO

endif # BOARD_EFM32PG_STK3402A
33 changes: 33 additions & 0 deletions boards/arm/efm32pg_stk3402a/board.c
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
/*
* Copyright (c) 2018 Christian Taedcke
*
* SPDX-License-Identifier: Apache-2.0
*/

#include <init.h>
#include "board.h"
#include <gpio.h>
#include <misc/printk.h>

static int efm32pg_stk3402a_init(struct device *dev)
{
struct device *bce_dev; /* Board Controller Enable Gpio Device */

ARG_UNUSED(dev);

/* Enable the board controller to be able to use the serial port */
bce_dev = device_get_binding(BC_ENABLE_GPIO_NAME);

if (!bce_dev) {
printk("Board controller gpio port was not found!\n");
return -ENODEV;
}

gpio_pin_configure(bce_dev, BC_ENABLE_GPIO_PIN, GPIO_DIR_OUT);
gpio_pin_write(bce_dev, BC_ENABLE_GPIO_PIN, 1);

return 0;
}

/* needs to be done after GPIO driver init */
SYS_INIT(efm32pg_stk3402a_init, PRE_KERNEL_1, CONFIG_BOARD_INIT_PRIORITY);
8 changes: 8 additions & 0 deletions boards/arm/efm32pg_stk3402a/board.cmake
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
#
# Copyright (c) 2018, Christian Taedcke
#
# SPDX-License-Identifier: Apache-2.0
#

board_runner_args(jlink "--device=EFM32PG12BxxxF1024")
include(${ZEPHYR_BASE}/boards/common/jlink.board.cmake)
14 changes: 14 additions & 0 deletions boards/arm/efm32pg_stk3402a/board.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
/*
* Copyright (c) 2018 Christian Taedcke
*
* SPDX-License-Identifier: Apache-2.0
*/

#ifndef __INC_BOARD_H
#define __INC_BOARD_H

/* This pin is used to enable the serial port using the board controller */
#define BC_ENABLE_GPIO_NAME DT_GPIO_GECKO_PORTA_NAME
#define BC_ENABLE_GPIO_PIN 5

#endif /* __INC_BOARD_H */
189 changes: 189 additions & 0 deletions boards/arm/efm32pg_stk3402a/doc/efm32pg_stk3402a.rst
Original file line number Diff line number Diff line change
@@ -0,0 +1,189 @@
.. _efm32pg_stk3402a:

EFM32 Pearl Gecko Starter Kit
#############################

Overview
********

The EFM32 Pearl Gecko Starter Kit EFM32PG-STK3402A contains an MCU from the
EFM32PG family built on an ARM® Cortex®-M4F processor with excellent low
power capabilities.

.. figure:: slstk3402a-pearl-gecko-pg12-stk.png
:width: 375px
:align: center
:alt: EFM32PG-SLSTK3402A

EFM32PG-SLSTK3402A (image courtesy of Silicon Labs)

Hardware
********

- Advanced Energy Monitoring provides real-time information about the energy
consumption of an application or prototype design.
- Ultra low power 128x128 pixel Memory-LCD
- 2 user buttons, 2 LEDs and a touch slider
- Humidity, temperature, and inductive-capacitive metal sensor
- On-board Segger J-Link USB debugger

For more information about the EFM32PG SoC and EFM32PG-STK3402A board:

- `EFM32PG Website`_
- `EFM32PG12 Datasheet`_
- `EFM32PG12 Reference Manual`_
- `EFM32PG-STK3402A Website`_
- `EFM32PG-STK3402A User Guide`_
- `EFM32PG-STK3402A Schematics`_

Supported Features
==================

The efm32pg_stk3402a board configuration supports the following hardware features:

+-----------+------------+-------------------------------------+
| Interface | Controller | Driver/Component |
+===========+============+=====================================+
| NVIC | on-chip | nested vector interrupt controller |
+-----------+------------+-------------------------------------+
| SYSTICK | on-chip | systick |
+-----------+------------+-------------------------------------+
| FLASH | on-chip | flash memory |
+-----------+------------+-------------------------------------+
| GPIO | on-chip | gpio |
+-----------+------------+-------------------------------------+
| UART | on-chip | serial port-polling; |
| | | serial port-interrupt |
+-----------+------------+-------------------------------------+
| I2C | on-chip | i2c port-polling |
+-----------+------------+-------------------------------------+

The default configuration can be found in the defconfig file:

``boards/arm/efm32pg_stk3402a/efm32pg_stk3402a_defconfig``

Other hardware features are currently not supported by the port.

Connections and IOs
===================

The EFM32PG12 SoC has twelve GPIO controllers (PORTA to PORTL), but only four
are currently enabled (PORTA, PORTB, PORTD and PORTF) for the EFM32PG-STK3402A
board.

In the following table, the column **Name** contains pin names. For example, PE2
means pin number 2 on PORTE, as used in the board's datasheets and manuals.

+-------+-------------+-------------------------------------+
| Name | Function | Usage |
+=======+=============+=====================================+
| PF4 | GPIO | LED0 |
+-------+-------------+-------------------------------------+
| PF5 | GPIO | LED1 |
+-------+-------------+-------------------------------------+
| PF6 | GPIO | Push Button PB0 |
+-------+-------------+-------------------------------------+
| PF7 | GPIO | Push Button PB1 |
+-------+-------------+-------------------------------------+
| PA5 | GPIO | Board Controller Enable |
| | | EFM_BC_EN |
+-------+-------------+-------------------------------------+
| PA0 | UART_TX | UART TX Console VCOM_TX US0_TX #0 |
+-------+-------------+-------------------------------------+
| PA1 | UART_RX | UART RX Console VCOM_RX US0_RX #0 |
+-------+-------------+-------------------------------------+
| PD10 | UART_TX | EXP12_UART_TX LEU0_TX #18 |
+-------+-------------+-------------------------------------+
| PD11 | UART_RX | EXP14_UART_RX LEU0_RX #18 |
+-------+-------------+-------------------------------------+
| PC10 | I2C_SDA | ENV_I2C_SDA I2C0_SDA #15 |
+-------+-------------+-------------------------------------+
| PC11 | I2C_SCL | ENV_I2C_SCL I2C0_SCL #15 |
+-------+-------------+-------------------------------------+


System Clock
============

The EFM32PG SoC is configured to use the 40 MHz external oscillator on the
board.

Serial Port
===========

The EFM32PG SoC has four USARTs and one Low Energy UART (LEUART).

Programming and Debugging
*************************

.. note::
Before using the kit the first time, you should update the J-Link firmware
from `J-Link-Downloads`_

Flashing
========

The EFM32PG-STK3402A includes an `J-Link`_ serial and debug adaptor built into the
board. The adaptor provides:

- A USB connection to the host computer, which exposes a mass storage device and a
USB serial port.
- A serial flash device, which implements the USB flash disk file storage.
- A physical UART connection which is relayed over interface USB serial port.

Flashing an application to EFM32PG-STK3402A
-------------------------------------------

The sample application :ref:`hello_world` is used for this example.
Build the Zephyr kernel and application:

.. zephyr-app-commands::
:zephyr-app: samples/hello_world
:board: efm32pg_stk3402a
:goals: build

Connect the EFM32PG-STK3402A to your host computer using the USB port and you
should see a USB connection which exposes a mass storage device(STK3402A).
Copy the generated zephyr.bin to the STK3402A drive.

Use a USB-to-UART converter such as an FT232/CP2102 to connect to the UART on the
expansion header.

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'll see the following message on the corresponding serial port
terminal session:

.. code-block:: console
Hello World! arm
.. _EFM32PG-STK3402A Website:
https://www.silabs.com/products/development-tools/mcu/32-bit/efm32-pearl-gecko-pg12-starter-kit

.. _EFM32PG-STK3402A User Guide:
https://www.silabs.com/documents/public/user-guides/ug257-stk3402-usersguide.pdf

.. _EFM32PG-STK3402A Schematics:
https://www.silabs.com/documents/public/schematic-files/EFM32PG12-BRD2501A-A01-schematic.pdf

.. _EFM32PG Website:
https://www.silabs.com/products/mcu/32-bit/efm32-pearl-gecko

.. _EFM32PG12 Datasheet:
https://www.silabs.com/documents/public/data-sheets/efm32pg12-datasheet.pdf

.. _EFM32PG12 Reference Manual:
https://www.silabs.com/documents/public/reference-manuals/efm32pg12-rm.pdf

.. _J-Link:
https://www.segger.com/jlink-debug-probes.html

.. _J-Link-Downloads:
https://www.segger.com/downloads/jlink
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading

0 comments on commit 9a9f4b7

Please sign in to comment.