boards: xtensa: add Olimex ESP32-EVB board definition

Add board definition for the Olimex ESP32-EVB development board.

Signed-off-by: Henrik Brix Andersen <henrik@brixandersen.dk>
This commit is contained in:
Henrik Brix Andersen 2022-04-20 21:08:36 +02:00 committed by Carles Cufí
parent 472d0de081
commit 1348418b34
10 changed files with 424 additions and 0 deletions

View file

@ -0,0 +1,8 @@
# Olimex ESP32-EVB board configuration
# Copyright (c) 2022 Henrik Brix Andersen <henrik@brixandersen.dk>
# SPDX-License-Identifier: Apache-2.0
config BOARD_OLIMEX_ESP32_EVB
bool "Olimex ESP32-EVB"
depends on SOC_ESP32

View file

@ -0,0 +1,11 @@
# Olimex ESP32-EVB board configuration
# Copyright (c) 2022 Henrik Brix Andersen <henrik@brixandersen.dk>
# SPDX-License-Identifier: Apache-2.0
if BOARD_OLIMEX_ESP32_EVB
config BOARD
default "olimex_esp32_evb"
endif # BOARD_OLIMEX_ESP32_EVB

View file

@ -0,0 +1,9 @@
# SPDX-License-Identifier: Apache-2.0
if(NOT "${OPENOCD}" MATCHES "^${ESPRESSIF_TOOLCHAIN_PATH}/.*")
set(OPENOCD OPENOCD-NOTFOUND)
endif()
find_program(OPENOCD openocd PATHS ${ESPRESSIF_TOOLCHAIN_PATH}/openocd-esp32/bin NO_DEFAULT_PATH)
include(${ZEPHYR_BASE}/boards/common/esp32.board.cmake)
include(${ZEPHYR_BASE}/boards/common/openocd.board.cmake)

Binary file not shown.

After

Width:  |  Height:  |  Size: 70 KiB

View file

@ -0,0 +1,133 @@
.. _olimex_esp32_evb:
Olimex ESP32-EVB
################
Overview
********
The Olimex ESP32-EVB is an OSHW certified, open-source IoT board based on the
Espressif ESP32-WROOM-32E/UE module. It has a wired 100Mbit/s Ethernet Interface,
Bluetooth LE, WiFi, infrared remote control, and CAN connectivity. Two relays
allows switching power appliances on and off.
The board can operate from a single LiPo backup battery as it has an internal
LiPo battery charger. There is no step-up converter, so relays, CAN, and USB
power does not work when running off battery.
.. figure:: ./ESP32-EVB.jpg
:width: 540px
:align: center
:alt: ESP32-EVB
ESP32-EVB (Credit: Olimex)
Hardware
********
- ESP32-WROOM-32E/UE module with 4MB flash.
- On-board programmer, CH340T USB-to-UART
- WiFi, Bluetooth LE connectivity.
- 100Mbit/s Ethernet interface, Microchip LAN8710A PHY.
- MicroSD card slot.
- 2 x 10A/250VAC (15A/120VAC 15A/24VDC) relays with connectors and status LEDs.
- CAN interface, Microchip MCP2562-E high-speed CAN transceiver.
- IR receiver and transmitter, up to 5 meters distance.
- BL4054B LiPo battery charger with status LEDs for stand-alone operation during
power outages.
- Power jack for external 5VDC power supply.
- Univeral EXTension (UEXT) connector for connecting UEXT modules.
- User push button.
- 40 pin GPIO connector with all ESP32 pins.
For more information about the ESP32-EVB and the ESP32-WROOM-32E/UE module, see
these reference documents:
- `ESP32-EVB Website`_
- `ESP32-EVB Schematic`_
- `ESP32-EVB GitHub Repository`_
- `ESP32-WROOM32-E/UE Datasheet`_
Supported Features
==================
The olimex_esp32_evb board configuration supports the following hardware
features:
+-----------+------------+-------------------------------------+
| Interface | Controller | Driver/Component |
+===========+============+=====================================+
| EFUSE | on-chip | hwinfo, device ID |
+-----------+------------+-------------------------------------+
| FLASH | module | External flash |
+-----------+------------+-------------------------------------+
| GPIO | on-chip | gpio |
+-----------+------------+-------------------------------------+
| I2C | on-chip | I2C |
+-----------+------------+-------------------------------------+
| INTERRUPT | on-chip | interrupt controller |
+-----------+------------+-------------------------------------+
| IO_MUX | on-chip | pinctrl |
+-----------+------------+-------------------------------------+
| SPI | on-chip | spi |
+-----------+------------+-------------------------------------+
| TIMG | on-chip | counter |
+-----------+------------+-------------------------------------+
| TRNG | on-chip | entropy |
+-----------+------------+-------------------------------------+
| UART | on-chip | uart |
+-----------+------------+-------------------------------------+
| WDT | on-chip | watchdog |
+-----------+------------+-------------------------------------+
| WiFi | on-chip | WiFi |
+-----------+------------+-------------------------------------+
The default configuration can be found in the defconfig file:
``boards/xtensa/olimex_esp32_evb/olimex_esp32_evb_defconfig``.
Other hardware features are not currently supported by the port.
Programming and Debugging
*************************
Build and flash applications as usual (see :ref:`build_an_application` and
:ref:`application_run` for more details).
Flashing
========
Here is an example for the :ref:`hello_world` application.
.. zephyr-app-commands::
:zephyr-app: samples/hello_world
:board: olimex_esp32_evb
:goals: flash
Open the serial monitor using the following command:
.. code-block:: shell
west espressif monitor
After the board has automatically reset and booted, you should see the following
message in the monitor:
.. code-block:: console
***** Booting Zephyr OS vx.x.x-xxx-gxxxxxxxxxxxx *****
Hello World! olimex_esp32_evb
Please see the generic :ref:`esp32` instructions for further tips on programming
and debugging.
.. _ESP32-EVB Website:
https://www.olimex.com/Products/IoT/ESP32/ESP32-EVB/open-source-hardware
.. _ESP32-EVB Schematic:
https://github.com/OLIMEX/ESP32-EVB/raw/master/HARDWARE/REV-I/ESP32-EVB_Rev_I.pdf
.. _ESP32-EVB GitHub Repository:
https://github.com/OLIMEX/ESP32-EVB
.. _ESP32-WROOM32-E/UE Datasheet:
https://www.espressif.com/sites/default/files/documentation/esp32-wroom-32e_esp32-wroom-32ue_datasheet_en.pdf

View file

@ -0,0 +1,56 @@
/*
* Copyright (c) 2022 Henrik Brix Andersen <henrik@brixandersen.dk>
*
* SPDX-License-Identifier: Apache-2.0
*/
#include <dt-bindings/pinctrl/esp-pinctrl-common.h>
#include <dt-bindings/pinctrl/esp32-pinctrl.h>
#include <dt-bindings/pinctrl/esp32-gpio-sigmap.h>
&pinctrl {
uart0_tx_gpio1: uart0_tx_gpio1 {
pinmux = <UART0_TX_GPIO1>;
};
uart0_rx_gpio3: uart0_rx_gpio3 {
pinmux = <UART0_RX_GPIO3>;
};
uart1_tx_gpio4: uart1_tx_gpio4 {
pinmux = <UART1_TX_GPIO4>;
};
uart1_rx_gpio36: uart1_rx_gpio36 {
pinmux = <UART1_RX_GPIO36>;
};
i2c0_scl_gpio16: i2c0_scl_gpio16 {
pinmux = <I2C0_SCL_GPIO16>;
drive-open-drain;
output-high;
};
i2c0_sda_gpio13: i2c0_sda_gpio13 {
pinmux = <I2C0_SDA_GPIO13>;
drive-open-drain;
output-high;
};
spim2_miso_gpio15: spim2_miso_gpio15 {
pinmux = <SPIM2_MISO_GPIO15>;
};
spim2_mosi_gpio2: spim2_mosi_gpio2 {
pinmux = <SPIM2_MOSI_GPIO2>;
output-low;
};
spim2_sclk_gpio14: spim2_sclk_gpio14 {
pinmux = <SPIM2_SCLK_GPIO14>;
};
spim2_csel_gpio17: spim2_csel_gpio17 {
pinmux = <SPIM2_CSEL_GPIO17>;
};
};

View file

@ -0,0 +1,163 @@
/*
* Copyright (c) 2022 Henrik Brix Andersen <henrik@brixandersen.dk>
*
* SPDX-License-Identifier: Apache-2.0
*/
/dts-v1/;
#include <espressif/esp32.dtsi>
#include "olimex_esp32_evb-pinctrl.dtsi"
/ {
model = "Olimex ESP32-EVB";
compatible = "olimex,esp32-evb", "espressif,esp32-wroom-32e", "espressif,esp32";
chosen {
zephyr,console = &uart0;
zephyr,shell-uart = &uart0;
zephyr,sram = &sram0;
zephyr,flash = &flash0;
};
aliases {
sw0 = &button1;
};
gpio_keys {
compatible = "gpio-keys";
button1: button1 {
gpios = <&gpio 34 GPIO_ACTIVE_LOW>;
label = "BUT1";
};
};
relay1: relay1 {
compatible = "regulator-fixed";
enable-gpios = <&gpio 32 GPIO_ACTIVE_HIGH>;
regulator-name = "REL1";
label = "REL1";
startup-delay-us = <10000>;
off-on-delay-us = <5000>;
};
relay2: relay2 {
compatible = "regulator-fixed";
enable-gpios = <&gpio 33 GPIO_ACTIVE_HIGH>;
regulator-name = "REL2";
label = "REL2";
startup-delay-us = <10000>;
off-on-delay-us = <5000>;
};
};
&cpu0 {
clock-frequency = <ESP32_CLK_CPU_240M>;
};
&cpu1 {
clock-frequency = <ESP32_CLK_CPU_240M>;
};
uext_serial: &uart1 {};
uext_i2c: &i2c0 {};
uext_spi: &spi2 {};
&uart0 {
status = "okay";
current-speed = <115200>;
pinctrl-0 = <&uart0_tx_gpio1 &uart0_rx_gpio3>;
pinctrl-names = "default";
};
&uart1 {
status = "okay";
current-speed = <115200>;
pinctrl-0 = <&uart1_tx_gpio4 &uart1_rx_gpio36>;
pinctrl-names = "default";
};
&i2c0 {
status = "okay";
clock-frequency = <I2C_BITRATE_STANDARD>;
sda-pin = <16>;
scl-pin = <13>;
pinctrl-0 = <&i2c0_scl_gpio16 &i2c0_sda_gpio13>;
pinctrl-names = "default";
};
&spi2 {
status = "okay";
pinctrl-0 = <&spim2_miso_gpio15 &spim2_mosi_gpio2
&spim2_sclk_gpio14 &spim2_csel_gpio17>;
pinctrl-names = "default";
#address-cells = <1>;
#size-cells = <0>;
};
&gpio0 {
status = "okay";
};
&gpio1 {
status = "okay";
};
&timer0 {
status = "okay";
};
&timer1 {
status = "okay";
};
&timer2 {
status = "okay";
};
&timer3 {
status = "okay";
};
&trng0 {
status = "okay";
};
&flash0 {
status = "okay";
partitions {
compatible = "fixed-partitions";
#address-cells = <1>;
#size-cells = <1>;
/* Reserve 60kB for the bootloader */
boot_partition: partition@1000 {
label = "mcuboot";
reg = <0x00001000 DT_SIZE_K(60)>;
read-only;
};
/* Reserve 1024kB for the application in slot 0 */
slot0_partition: partition@10000 {
label = "image-0";
reg = <0x00010000 DT_SIZE_K(1024)>;
};
/* Reserve 1024kB for the application in slot 1 */
slot1_partition: partition@110000 {
label = "image-1";
reg = <0x00110000 DT_SIZE_K(1024)>;
};
/* Reserve 256kB for the scratch partition */
scratch_partition: partition@210000 {
label = "image-scratch";
reg = <0x00210000 DT_SIZE_K(256)>;
};
storage_partition: partition@250000 {
label = "storage";
reg = <0x00250000 DT_SIZE_K(24)>;
};
};
};

View file

@ -0,0 +1,15 @@
identifier: olimex_esp32_evb
name: Olimex ESP32-EVB
type: mcu
arch: xtensa
toolchain:
- espressif
supported:
- counter
- gpio
- hwinfo
- i2c
- netif:wifi
- spi
- uart
- watchdog

View file

@ -0,0 +1,24 @@
# SPDX-License-Identifier: Apache-2.0
CONFIG_XTENSA_RESET_VECTOR=n
CONFIG_BOARD_OLIMEX_ESP32_EVB=y
CONFIG_SOC_ESP32=y
CONFIG_MAIN_STACK_SIZE=2048
CONFIG_SYS_CLOCK_HW_CYCLES_PER_SEC=240000000
CONFIG_CONSOLE=y
CONFIG_SERIAL=y
CONFIG_UART_CONSOLE=y
CONFIG_XTENSA_USE_CORE_CRT1=n
CONFIG_GPIO=y
CONFIG_GPIO_ESP32=y
CONFIG_GEN_ISR_TABLES=y
CONFIG_GEN_IRQ_VECTOR_TABLE=n
CONFIG_CLOCK_CONTROL=y

View file

@ -0,0 +1,5 @@
set ESP_RTOS none
set ESP32_ONLYCPU 1
source [find interface/ftdi/esp32_devkitj_v1.cfg]
source [find target/esp32.cfg]