Skip to content

Commit

Permalink
boards: arm: lora_e5_mini: new board support
Browse files Browse the repository at this point in the history
This board is similar to 'lora_e5_dev_board', but with smaller form-factor,
which makes it better suited as low volume prototype device.

Signed-off-by: Marcin Niestroj <m.niestroj@emb.dev>
  • Loading branch information
mniestroj committed Oct 23, 2023
1 parent 4737706 commit 53f4269
Show file tree
Hide file tree
Showing 10 changed files with 434 additions and 0 deletions.
8 changes: 8 additions & 0 deletions boards/arm/lora_e5_mini/Kconfig.board
@@ -0,0 +1,8 @@
# LoRa-E5 mini configuration

# Copyright (c) 2023 Marcin Niestroj
# SPDX-License-Identifier: Apache-2.0

config BOARD_LORA_E5_MINI
bool "LoRa E5 mini"
depends on SOC_STM32WLE5XX
11 changes: 11 additions & 0 deletions boards/arm/lora_e5_mini/Kconfig.defconfig
@@ -0,0 +1,11 @@
# LoRa-E5 mini configuration

# Copyright (c) 2023 Marcin Niestroj
# SPDX-License-Identifier: Apache-2.0

if BOARD_LORA_E5_MINI

config BOARD
default "lora_e5_mini"

endif # BOARD_LORA_E5_MINI
14 changes: 14 additions & 0 deletions boards/arm/lora_e5_mini/board.cmake
@@ -0,0 +1,14 @@
# SPDX-License-Identifier: Apache-2.0

board_runner_args(pyocd "--target=stm32wle5jcix")
board_runner_args(pyocd "--flash-opt=-O reset_type=hw")
board_runner_args(pyocd "--flash-opt=-O connect_mode=under-reset")
board_runner_args(jlink "--device=STM32WLE5JC" "--speed=4000" "--reset-after-load")
board_runner_args(stm32cubeprogrammer "--port=swd" "--reset-mode=hw")
board_runner_args(blackmagicprobe "--connect-rst")

include(${ZEPHYR_BASE}/boards/common/pyocd.board.cmake)
include(${ZEPHYR_BASE}/boards/common/openocd.board.cmake)
include(${ZEPHYR_BASE}/boards/common/stm32cubeprogrammer.board.cmake)
include(${ZEPHYR_BASE}/boards/common/jlink.board.cmake)
include(${ZEPHYR_BASE}/boards/common/blackmagicprobe.board.cmake)
Binary file added boards/arm/lora_e5_mini/doc/img/lora_e5_mini.jpg
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
226 changes: 226 additions & 0 deletions boards/arm/lora_e5_mini/doc/index.rst
@@ -0,0 +1,226 @@
.. _lora_e5_mini:

Seeed Studio LoRa-E5 mini
#########################

Overview
********

LoRa-E5 mini is a compacted-sized development board suitable for the rapid
testing and building of small-sized LoRa device, exposing all capabilities of
Seeed Studio LoRa-E5 STM32WLE5JC module.

.. image:: img/lora_e5_mini.jpg
:align: center
:alt: LoRa-E5 mini

Hardware
********

The boards' LoRa-E5 Module packages a STM32WLE5JC SOC, a 32MHz TCXO,
and a 32.768kHz crystal oscillator in a 28-pin SMD package.
This STM32WLEJC SOC is powered by ARM Cortex-M4 core and integrates Semtech
SX126X LoRa IP to support (G)FSK, BPSK, (G)MSK, and LoRa modulations.

- LoRa-E5 STM32WLE5JC Module with STM32WLE5JC multiprotocol LPWAN single-core
32-bit microcontroller (Arm® Cortex®-M4 at 48 MHz) in 28-pin SMD package
featuring:

- Ultra-low-power MCU
- RF transceiver (150 MHz to 960 MHz frequency range) supporting LoRa®,
(G)FSK, (G)MSK, and BPSK modulations
- 256-Kbyte Flash memory and 64-Kbyte SRAM
- Hardware encryption AES256-bit and a True random number generator

- 1 user LED
- 2 serial communication (RX/TX) LEDs
- 1 boot/user and 1 reset push-button
- 32.768 kHz LSE crystal oscillator
- 32 MHz HSE oscillator
- Board connectors:

- USB Type-C connector
- +/- (battery) power input pins (3-5V)
- SMA-K and IPEX antenna connectors

- Delivered with SMA antenna (per default IPEX connector is disconnected)
- Flexible power-supply options: USB Type C or 3-5V battery soldered to +/- pins
- Suitable for rapid prototyping of end nodes based on LoRaWAN, Sigfox, wM-Bus,
and many other proprietary protocols
- All GPIOs led out from the LoRa-E5 STM32WLE5JC module
- 4x M2 mounting holes

More information about the board can be found at the `LoRa-E5 mini Wiki`_.

More information about LoRa-E5 STM32WLE5JC Module can be found here:

- `LoRa-E5 STM32WLE5JC Module Wiki`_
- `LoRa-E5 STM32WLE5JC Module datasheet`_
- `STM32WLE5JC datasheet`_
- `STM32WLE5JC reference manual`_
- `STM32WLE5JC on www.st.com`_

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

The Zephyr LoRa-E5 mini configuration supports the following hardware features:

+-----------+------------+-------------------------------------+
| Interface | Controller | Driver/Component |
+===========+============+=====================================+
| ADC | on-chip | adc |
+-----------+------------+-------------------------------------+
| AES | on-chip | crypto |
+-----------+------------+-------------------------------------+
| COUNTER | on-chip | rtc |
+-----------+------------+-------------------------------------+
| CLOCK | on-chip | reset and clock control |
+-----------+------------+-------------------------------------+
| FLASH | on-chip | flash |
+-----------+------------+-------------------------------------+
| GPIO | on-chip | gpio |
+-----------+------------+-------------------------------------+
| I2C | on-chip | i2c |
+-----------+------------+-------------------------------------+
| MPU | on-chip | arch/arm |
+-----------+------------+-------------------------------------+
| NVIC | on-chip | arch/arm |
+-----------+------------+-------------------------------------+
| PINMUX | on-chip | pinmux |
+-----------+------------+-------------------------------------+
| RADIO | on-chip | LoRa |
+-----------+------------+-------------------------------------+
| SPI | on-chip | spi |
+-----------+------------+-------------------------------------+
| UART | on-chip | serial port-polling; |
| | | serial port-interrupt |
+-----------+------------+-------------------------------------+
| WATCHDOG | on-chip | independent watchdog |
+-----------+------------+-------------------------------------+

Other hardware features are not yet supported on this Zephyr port.

The default configuration can be found in the defconfig and dts files:

- :zephyr_file:`boards/arm/lora_e5_mini/lora_e5_mini_defconfig`
- :zephyr_file:`boards/arm/lora_e5_mini/lora_e5_mini.dts`


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

LoRa-E5 mini has 4 GPIO controllers. These controllers are responsible for pin
muxing, input/output, pull-up, etc.

Available pins:
---------------

.. image:: img/lora_e5_mini_pinout.jpg
:align: center
:alt: LoRa-E5 mini Pinout

Default Zephyr Peripheral Mapping:
----------------------------------

- USART_1 TX : PB6
- USART_1 RX : PB7
- I2C_2_SCL : PB15
- I2C_2_SDA : PA15
- BOOT_PB : PB13
- LED_1 : PB5

System Clock
------------

LoRa-E5 mini board System Clock could be driven by the low-power internal (MSI),
High-speed internal (HSI) or High-speed external (HSE) oscillator, as well as
main PLL clock. By default System clock is driven by the MSI clock at 48MHz.

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

Applications for the ``lora_e5_mini`` board configuration can be built the
usual way (see :ref:`build_an_application`).

In the factory the module is flashed with an DFU bootloader, an AT command
firmware, and the read protection level 1 is enabled.
So before you can program a Zephyr application to the module for the first time
you have to reset the read protection to level 0.
In case you use an st-link debugger you can use the STM32CubeProgrammer GUI to
set the RDP option byte to ``AA``,
or use the STM32_Programmer_CLI passing the ``--readunprotect`` command
to perform this read protection regression.
The RDP level 1 to RDP level 0 regression will erase the factory programmed AT
firmware, from which seeed has neither released the source code nor a binary.
Also, note that on the module the ``BOOT0`` pin of the SOC is not accessible,
so the system bootloader will only be executed if configured in the option bytes.

Flashing
========

The LoRa-E5 mini does not include a on-board debug probe.
But the module can be debugged by connecting an external debug probe to the
2.54mm header.
Depending on the external probe used, ``openocd``, the ``stm32cubeprogrammer``,
``pyocd``, ``blackmagic``, or ``jlink`` runner can be used to flash the board.
Additional notes:

- Pyocd: For STM32WL support Pyocd needs additional target information, which
can be installed by adding "pack" support with the following pyocd command:

.. code-block:: console
$ pyocd pack --update
$ pyocd pack --install stm32wl
Flashing an application to LoRa-E5 mini
---------------------------------------

Connect the LoRa-E5 to your host computer using the external debug probe.
Then build and flash an application. Here is an example for the
:ref:`hello_world` application.

Run a serial host program to connect with your board:
Per default the console on ``usart1`` is available on the USB Type C connector
via the built-in USB to UART converter.

.. code-block:: console
$ picocom --baud 115200 /dev/ttyACM0
Then build and flash the application.

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

Debugging
=========

You can debug an application in the usual way. Here is an example for the
:zephyr:code-sample:`blinky` application.

.. zephyr-app-commands::
:zephyr-app: samples/basic/blinky
:board: lora_e5_mini
:maybe-skip-config:
:goals: debug

.. _LoRa-E5 mini Wiki:
https://wiki.seeedstudio.com/LoRa_E5_mini/

.. _LoRa-E5 STM32WLE5JC Module Wiki:
https://wiki.seeedstudio.com/LoRa-E5_STM32WLE5JC_Module/

.. _LoRa-E5 STM32WLE5JC Module datasheet:
https://files.seeedstudio.com/products/317990687/res/LoRa-E5%20module%20datasheet_V1.0.pdf

.. _STM32WLE5JC on www.st.com:
https://www.st.com/en/microcontrollers-microprocessors/stm32wle5jc.html

.. _STM32WLE5JC datasheet:
https://www.st.com/resource/en/datasheet/stm32wle5jc.pdf

.. _STM32WLE5JC reference manual:
https://www.st.com/resource/en/reference_manual/dm00530369-stm32wlex-advanced-armbased-32bit-mcus-with-subghz-radio-solution-stmicroelectronics.pdf
125 changes: 125 additions & 0 deletions boards/arm/lora_e5_mini/lora_e5_mini.dts
@@ -0,0 +1,125 @@
/*
* Copyright (c) 2023 Marcin Niestroj
*
* SPDX-License-Identifier: Apache-2.0
*/

/dts-v1/;
#include <seeed/lora-e5.dtsi>
#include <zephyr/dt-bindings/input/input-event-codes.h>

/ {
model = "Seeed Studio LoRa-E5 mini";
compatible = "seeed,lora-e5-mini";

chosen {
zephyr,console = &usart1;
zephyr,shell-uart = &usart1;
zephyr,sram = &sram0;
zephyr,flash = &flash0;
zephyr,code-partition = &slot0_partition;
};

leds {
compatible = "gpio-leds";
red_led_1: led_1 {
gpios = <&gpiob 5 GPIO_ACTIVE_LOW>;
label = "User LED1";
};
};

gpio_keys {
compatible = "gpio-keys";
boot_button: button_0 {
label = "SW1";
gpios = <&gpiob 13 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)>;
zephyr,code = <INPUT_KEY_0>;
};
};

aliases {
led0 = &red_led_1;
sw0 = &boot_button;
lora0 = &lora;
watchdog0 = &iwdg;
};
};

&lptim1 {
status = "okay";
clocks = <&rcc STM32_CLOCK_BUS_APB1 0x80000000>,
<&rcc STM32_SRC_LSI LPTIM1_SEL(1)>;
};

&clk_lsi {
status = "okay";
};

&clk_msi {
status = "okay";
msi-range = <11>;
};

&rcc {
clocks = <&clk_msi>;
clock-frequency = <DT_FREQ_M(48)>;
cpu1-prescaler = <1>;
ahb3-prescaler = <1>;
apb1-prescaler = <1>;
apb2-prescaler = <1>;
};

&usart1 {
pinctrl-0 = <&usart1_tx_pb6 &usart1_rx_pb7>;
pinctrl-names = "default";
current-speed = <115200>;
status = "okay";
};

&i2c2 {
pinctrl-0 = <&i2c2_scl_pb15 &i2c2_sda_pa15>;
pinctrl-names = "default";
status = "okay";
clock-frequency = <I2C_BITRATE_FAST>;
};

&rtc {
clocks = <&rcc STM32_CLOCK_BUS_APB1 0x00000400>,
<&rcc STM32_SRC_LSI RTC_SEL(2)>;
status = "okay";
};

&iwdg {
status = "okay";
};

&aes {
status = "okay";
};

&flash0 {
partitions {
compatible = "fixed-partitions";
#address-cells = <1>;
#size-cells = <1>;

boot_partition: partition@0 {
label = "mcuboot";
reg = <0x00000000 DT_SIZE_K(48)>;
};
slot0_partition: partition@c000 {
label = "image-0";
reg = <0x0000c000 DT_SIZE_K(96)>;
};
slot1_partition: partition@24000 {
label = "image-1";
reg = <0x00024000 DT_SIZE_K(96)>;
};

/* 16KB (8x2kB pages) of storage at the end of the flash */
storage_partition: partition@3c000 {
label = "storage";
reg = <0x0003c000 DT_SIZE_K(16)>;
};
};
};

0 comments on commit 53f4269

Please sign in to comment.