From 28580ab2e8235efc8dd4ea3ca0198f4e535a4a55 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Gil=20Benk=C3=B6?= Date: Wed, 11 Apr 2018 13:54:18 +0200 Subject: [PATCH] boards: arm: Add support for Silicon Labs EFM32PG-STK3402A MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 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ö Signed-off-by: Christian Taedcke --- boards/arm/efm32pg_stk3402a/CMakeLists.txt | 5 + boards/arm/efm32pg_stk3402a/Kconfig | 19 ++ boards/arm/efm32pg_stk3402a/Kconfig.board | 12 ++ boards/arm/efm32pg_stk3402a/Kconfig.defconfig | 62 ++++++ boards/arm/efm32pg_stk3402a/board.c | 33 +++ boards/arm/efm32pg_stk3402a/board.cmake | 8 + boards/arm/efm32pg_stk3402a/board.h | 14 ++ .../efm32pg_stk3402a/doc/efm32pg_stk3402a.rst | 189 ++++++++++++++++++ .../doc/slstk3402a-pearl-gecko-pg12-stk.png | Bin 0 -> 22208 bytes .../arm/efm32pg_stk3402a/efm32pg_stk3402a.dts | 73 +++++++ .../efm32pg_stk3402a/efm32pg_stk3402a.yaml | 16 ++ .../efm32pg_stk3402a_defconfig | 11 + 12 files changed, 442 insertions(+) create mode 100644 boards/arm/efm32pg_stk3402a/CMakeLists.txt create mode 100644 boards/arm/efm32pg_stk3402a/Kconfig create mode 100644 boards/arm/efm32pg_stk3402a/Kconfig.board create mode 100644 boards/arm/efm32pg_stk3402a/Kconfig.defconfig create mode 100644 boards/arm/efm32pg_stk3402a/board.c create mode 100644 boards/arm/efm32pg_stk3402a/board.cmake create mode 100644 boards/arm/efm32pg_stk3402a/board.h create mode 100644 boards/arm/efm32pg_stk3402a/doc/efm32pg_stk3402a.rst create mode 100644 boards/arm/efm32pg_stk3402a/doc/slstk3402a-pearl-gecko-pg12-stk.png create mode 100644 boards/arm/efm32pg_stk3402a/efm32pg_stk3402a.dts create mode 100644 boards/arm/efm32pg_stk3402a/efm32pg_stk3402a.yaml create mode 100644 boards/arm/efm32pg_stk3402a/efm32pg_stk3402a_defconfig diff --git a/boards/arm/efm32pg_stk3402a/CMakeLists.txt b/boards/arm/efm32pg_stk3402a/CMakeLists.txt new file mode 100644 index 00000000000..0c35d352f47 --- /dev/null +++ b/boards/arm/efm32pg_stk3402a/CMakeLists.txt @@ -0,0 +1,5 @@ +if(CONFIG_UART_GECKO) + zephyr_library() + zephyr_library_sources(board.c) + zephyr_library_include_directories(${PROJECT_SOURCE_DIR}/drivers) +endif() diff --git a/boards/arm/efm32pg_stk3402a/Kconfig b/boards/arm/efm32pg_stk3402a/Kconfig new file mode 100644 index 00000000000..e7f4be21598 --- /dev/null +++ b/boards/arm/efm32pg_stk3402a/Kconfig @@ -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 diff --git a/boards/arm/efm32pg_stk3402a/Kconfig.board b/boards/arm/efm32pg_stk3402a/Kconfig.board new file mode 100644 index 00000000000..7726fb0f6e4 --- /dev/null +++ b/boards/arm/efm32pg_stk3402a/Kconfig.board @@ -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 diff --git a/boards/arm/efm32pg_stk3402a/Kconfig.defconfig b/boards/arm/efm32pg_stk3402a/Kconfig.defconfig new file mode 100644 index 00000000000..3bb9526ea5f --- /dev/null +++ b/boards/arm/efm32pg_stk3402a/Kconfig.defconfig @@ -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 diff --git a/boards/arm/efm32pg_stk3402a/board.c b/boards/arm/efm32pg_stk3402a/board.c new file mode 100644 index 00000000000..763909a75dd --- /dev/null +++ b/boards/arm/efm32pg_stk3402a/board.c @@ -0,0 +1,33 @@ +/* + * Copyright (c) 2018 Christian Taedcke + * + * SPDX-License-Identifier: Apache-2.0 + */ + +#include +#include "board.h" +#include +#include + +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); diff --git a/boards/arm/efm32pg_stk3402a/board.cmake b/boards/arm/efm32pg_stk3402a/board.cmake new file mode 100644 index 00000000000..b9925901bc8 --- /dev/null +++ b/boards/arm/efm32pg_stk3402a/board.cmake @@ -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) diff --git a/boards/arm/efm32pg_stk3402a/board.h b/boards/arm/efm32pg_stk3402a/board.h new file mode 100644 index 00000000000..4e0bffc7a5c --- /dev/null +++ b/boards/arm/efm32pg_stk3402a/board.h @@ -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 */ diff --git a/boards/arm/efm32pg_stk3402a/doc/efm32pg_stk3402a.rst b/boards/arm/efm32pg_stk3402a/doc/efm32pg_stk3402a.rst new file mode 100644 index 00000000000..3a9a775321d --- /dev/null +++ b/boards/arm/efm32pg_stk3402a/doc/efm32pg_stk3402a.rst @@ -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 diff --git a/boards/arm/efm32pg_stk3402a/doc/slstk3402a-pearl-gecko-pg12-stk.png b/boards/arm/efm32pg_stk3402a/doc/slstk3402a-pearl-gecko-pg12-stk.png new file mode 100644 index 0000000000000000000000000000000000000000..2c012d1bbc64e2f7fc639d1668c66f6b3193b1a3 GIT binary patch literal 22208 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 SIi!p##r^;Bf1kj=+5Z9U=O5$% literal 0 HcmV?d00001 diff --git a/boards/arm/efm32pg_stk3402a/efm32pg_stk3402a.dts b/boards/arm/efm32pg_stk3402a/efm32pg_stk3402a.dts new file mode 100644 index 00000000000..5c37537ed26 --- /dev/null +++ b/boards/arm/efm32pg_stk3402a/efm32pg_stk3402a.dts @@ -0,0 +1,73 @@ +/* + * Copyright (c) 2017 Christian Taedcke + * + * SPDX-License-Identifier: Apache-2.0 + */ + +/dts-v1/; +#include + +/ { + model = "Silicon Labs EFM32PG STK3402A board"; + compatible = "silabs,efm32pg_stk3402a", "silabs,efm32pg12b"; + + chosen { + zephyr,console = &usart0; + zephyr,sram = &sram0; + zephyr,flash = &flash0; + }; + + /* These aliases are provided for compatibility with samples */ + aliases { + i2c-0 = &i2c0; + usart-0 = &usart0; + leuart-0 = &leuart0; + led0 = &led0; + led1 = &led1; + sw0 = &button0; + sw1 = &button1; + }; + + leds { + compatible = "gpio-leds"; + led0: led_0 { + gpios = <&gpiof 4 0>; + label = "LED 0"; + }; + led1: led_1 { + gpios = <&gpiof 5 0>; + label = "LED 1"; + }; + }; + + buttons { + compatible = "gpio-keys"; + button0: button_0 { + /* gpio flags need validation */ + gpios = <&gpiof 6 GPIO_INT_ACTIVE_LOW>; + label = "User Push Button 0"; + }; + button1: button_1 { + /* gpio flags need validation */ + gpios = <&gpiof 7 GPIO_INT_ACTIVE_LOW>; + label = "User Push Button 1"; + }; + }; +}; + +&usart0 { + current-speed = <115200>; + location = <0>; + status = "ok"; +}; + +&leuart0 { + current-speed = <9600>; + location = <18>; + status = "ok"; +}; + +&i2c0 { + location = <15>; + status = "ok"; +}; diff --git a/boards/arm/efm32pg_stk3402a/efm32pg_stk3402a.yaml b/boards/arm/efm32pg_stk3402a/efm32pg_stk3402a.yaml new file mode 100644 index 00000000000..0118fafa19e --- /dev/null +++ b/boards/arm/efm32pg_stk3402a/efm32pg_stk3402a.yaml @@ -0,0 +1,16 @@ +identifier: efm32pg_stk3402a +name: EFM32PG-STK3402A +type: mcu +arch: arm +ram: 256 +flash: 1024 +toolchain: + - zephyr + - gccarmemb +supported: + - i2c + - gpio +testing: + ignore_tags: + - net + - bluetooth diff --git a/boards/arm/efm32pg_stk3402a/efm32pg_stk3402a_defconfig b/boards/arm/efm32pg_stk3402a/efm32pg_stk3402a_defconfig new file mode 100644 index 00000000000..28b125c6ff7 --- /dev/null +++ b/boards/arm/efm32pg_stk3402a/efm32pg_stk3402a_defconfig @@ -0,0 +1,11 @@ +CONFIG_ARM=y +CONFIG_SOC_FAMILY_EXX32=y +CONFIG_SOC_SERIES_EFM32PG12B=y +CONFIG_BOARD_EFM32PG_STK3402A=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=40000000 +CONFIG_CMU_HFCLK_HFXO=y