Skip to content

Commit

Permalink
boards: esp32: rework the esp32 board
Browse files Browse the repository at this point in the history
Split esp32 board into real boards or
modules if apply.

Signed-off-by: Marek Matej <marek.matej@espressif.com>
  • Loading branch information
Marek Matej committed May 30, 2023
1 parent 390f93d commit 1ecbdb6
Show file tree
Hide file tree
Showing 23 changed files with 564 additions and 26 deletions.
8 changes: 0 additions & 8 deletions boards/xtensa/esp32/Kconfig.board

This file was deleted.

7 changes: 7 additions & 0 deletions boards/xtensa/esp32_wroom/Kconfig.board
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
# Copyright (c) 2023 Espressif Systems (Shanghai) Co., Ltd.
# SPDX-License-Identifier: Apache-2.0
# ESP32 board configuration

config BOARD_ESP32_WROOM
bool "ESP32-WROOM-32D Development Board"
depends on SOC_ESP32WROOM
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,8 @@
# SPDX-License-Identifier: Apache-2.0

config BOARD
default "esp32"
depends on BOARD_ESP32
default "esp32_wroom"
depends on BOARD_ESP32_WROOM

config ENTROPY_GENERATOR
default y
Expand Down
Original file line number Diff line number Diff line change
@@ -1,8 +1,10 @@
# Copyright (c) 2023 Espressif Systems (Shanghai) Co., Ltd.
# 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)
Expand Down
203 changes: 203 additions & 0 deletions boards/xtensa/esp32_wroom/doc/index.rst
Original file line number Diff line number Diff line change
@@ -0,0 +1,203 @@
.. _esp32:

ESP32-WROOM
###########

Overview
********

ESP32-WROOM is a series of low cost, low power system on a chip microcontrollers
with integrated Wi-Fi & dual-mode Bluetooth. The ESP32 series employs a
Tensilica Xtensa LX6 microprocessor in both dual-core and single-core
variations. ESP32-WROOM is created and developed by Espressif Systems, a
Shanghai-based Chinese company, and is manufactured by TSMC using their 40nm
process. [1]_

The features include the following:

- Dual core Xtensa microprocessor (LX6), running at 160 or 240MHz
- 520KB of SRAM
- 802.11b/g/n/e/i
- Bluetooth v4.2 BR/EDR and BLE
- Various peripherals:

- 12-bit ADC with up to 18 channels
- 2x 8-bit DACs
- 10x touch sensors
- Temperature sensor
- 4x SPI
- 2x I2S
- 2x I2C
- 3x UART
- SD/SDIO/MMC host
- Slave (SDIO/SPI)
- Ethernet MAC
- CAN bus 2.0
- IR (RX/TX)
- Motor PWM
- LED PWM with up to 16 channels
- Hall effect sensor

- Cryptographic hardware acceleration (RNG, ECC, RSA, SHA-2, AES)
- 5uA deep sleep current

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

Current Zephyr's ESP32-WROOM board supports the following features:

+------------+------------+-------------------------------------+
| Interface | Controller | Driver/Component |
+============+============+=====================================+
+------------+------------+-------------------------------------+
| UART | on-chip | serial port |
+------------+------------+-------------------------------------+
| GPIO | on-chip | gpio |
+------------+------------+-------------------------------------+
| PINMUX | on-chip | pinmux |
+------------+------------+-------------------------------------+
| USB-JTAG | on-chip | hardware interface |
+------------+------------+-------------------------------------+
| SPI Master | on-chip | spi |
+------------+------------+-------------------------------------+
| Timers | on-chip | counter |
+------------+------------+-------------------------------------+
| Watchdog | on-chip | watchdog |
+------------+------------+-------------------------------------+
| TRNG | on-chip | entropy |
+------------+------------+-------------------------------------+
| LEDC | on-chip | pwm |
+------------+------------+-------------------------------------+
| MCPWM | on-chip | pwm |
+------------+------------+-------------------------------------+
| PCNT | on-chip | qdec |
+------------+------------+-------------------------------------+
| SPI DMA | on-chip | spi |
+------------+------------+-------------------------------------+
| TWAI | on-chip | can |
+------------+------------+-------------------------------------+
| ADC | on-chip | adc |
+------------+------------+-------------------------------------+
| DAC | on-chip | dac |
+------------+------------+-------------------------------------+
| Wi-Fi | on-chip | |
+------------+------------+-------------------------------------+
| Bluetooth | on-chip | |
+------------+------------+-------------------------------------+

System requirements
===================

Prerequisites
-------------

Espressif HAL requires WiFi and Bluetooth binary blobs in order work. Run the command
below to retrieve those files.

.. code-block:: console
west blobs fetch hal_espressif
.. note::

It is recommended running the command above after :file:`west update`.

Building & Flashing
-------------------

Build and flash applications as usual (see :ref:`build_an_application` and
:ref:`application_run` for more details).

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

The usual ``flash`` target will work with the ``esp32_wroom`` board
configuration. Here is an example for the :ref:`hello_world`
application.

.. zephyr-app-commands::
:zephyr-app: samples/hello_world
:board: esp32_wroom
: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! esp32_wroom
Debugging
---------

ESP32-WROOM support on OpenOCD is available upstream as of version 0.12.0.
Download and install OpenOCD from `OpenOCD`_.

On the ESP-WROOM-32 DevKitC board, the JTAG pins are not run to a
standard connector (e.g. ARM 20-pin) and need to be manually connected
to the external programmer (e.g. a Flyswatter2):

+------------+-----------+
| ESP32 pin | JTAG pin |
+============+===========+
| 3V3 | VTRef |
+------------+-----------+
| EN | nTRST |
+------------+-----------+
| IO14 | TMS |
+------------+-----------+
| IO12 | TDI |
+------------+-----------+
| GND | GND |
+------------+-----------+
| IO13 | TCK |
+------------+-----------+
| IO15 | TDO |
+------------+-----------+

Further documentation can be obtained from the SoC vendor in `JTAG debugging
for ESP32`_.

Here is an example for building the :ref:`hello_world` application.

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

You can debug an application in the usual way. Here is an example for the :ref:`hello_world` application.

.. zephyr-app-commands::
:zephyr-app: samples/hello_world
:board: esp32_wroom
:goals: debug

Note on Debugging with GDB Stub
===============================

GDB stub is enabled on ESP32.

* When adding breakpoints, please use hardware breakpoints with command
``hbreak``. Command ``break`` uses software breakpoints which requires
modifying memory content to insert break/trap instructions.
This does not work as the code is on flash which cannot be randomly
accessed for modification.

.. _`JTAG debugging for ESP32`: https://docs.espressif.com/projects/esp-idf/en/latest/esp32/api-guides/jtag-debugging/index.html
.. _`OpenOCD`: https://github.com/openocd-org/openocd

References
**********

.. [1] https://en.wikipedia.org/wiki/ESP32
.. _ESP32 Technical Reference Manual: https://espressif.com/sites/default/files/documentation/esp32_technical_reference_manual_en.pdf
.. _Hardware Reference: https://docs.espressif.com/projects/esp-idf/en/latest/esp32/hw-reference/index.html
File renamed without changes.
Original file line number Diff line number Diff line change
@@ -1,15 +1,15 @@
/*
* Copyright (c) 2019 Intel Corporation.
* Copyright (c) 2023 Espressif Systems (Shanghai) Co., Ltd.
*
* SPDX-License-Identifier: Apache-2.0
*/
/dts-v1/;

#include <espressif/esp32wroom.dtsi>
#include "esp32-pinctrl.dtsi"
#include "esp32_wroom-pinctrl.dtsi"

/ {
model = "esp32";
model = "Espressif ESP32-WROOM-32D";
compatible = "espressif,esp32";

aliases {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
identifier: esp32
name: ESP-32
identifier: esp32_wroom
name: Espressif ESP32-WROOM-32D
type: mcu
arch: xtensa
toolchain:
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,9 @@

CONFIG_XTENSA_RESET_VECTOR=n

CONFIG_BOARD_ESP32=y
CONFIG_SOC_ESP32=y
CONFIG_SOC_SERIES_ESP32=y
CONFIG_SOC_ESP32WROOM=y
CONFIG_BOARD_ESP32_WROOM=y

CONFIG_MAIN_STACK_SIZE=2048

Expand Down
File renamed without changes.
7 changes: 7 additions & 0 deletions boards/xtensa/esp32_wrover/Kconfig.board
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
# ESP32-WROOM board configuration
# Copyright (c) 2023 Espressif Systems (Shanghai) Co., Ltd.
# SPDX-License-Identifier: Apache-2.0

config BOARD_ESP32_WROOM
bool "ESP32-WROOM-32D module"
depends on SOC_ESP32WROOM
20 changes: 20 additions & 0 deletions boards/xtensa/esp32_wrover/Kconfig.defconfig
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
# ESP32 board configuration

# Copyright (c) 2017 Intel Corporation
# SPDX-License-Identifier: Apache-2.0

config BOARD
default "esp32_wroom"
depends on BOARD_ESP32_WROOM

config ENTROPY_GENERATOR
default y

config HEAP_MEM_POOL_SIZE
default 98304 if WIFI
default 40960 if BT
default 4096

choice BT_HCI_BUS_TYPE
default BT_ESP32 if BT
endchoice
File renamed without changes.
11 changes: 11 additions & 0 deletions boards/xtensa/esp32_wrover/board.cmake
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
# Copyright (c) 2023 Espressif Systems (Shanghai) Co., Ltd.
# 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)
File renamed without changes.
Loading

0 comments on commit 1ecbdb6

Please sign in to comment.