Browse Source
Add support for board esp8684_devkitm Signed-off-by: Raffael Rostagno <raffael.rostagno@espressif.com>pull/77157/head
11 changed files with 430 additions and 0 deletions
@ -0,0 +1,11 @@
@@ -0,0 +1,11 @@
|
||||
# ESP8684 devkitm board configuration |
||||
|
||||
# Copyright (c) 2024 Espressif Systems (Shanghai) Co., Ltd. |
||||
# SPDX-License-Identifier: Apache-2.0 |
||||
|
||||
config HEAP_MEM_POOL_ADD_SIZE_BOARD |
||||
int |
||||
default 65535 if WIFI && BT |
||||
default 51200 if WIFI |
||||
default 40960 if BT |
||||
default 4096 |
@ -0,0 +1,7 @@
@@ -0,0 +1,7 @@
|
||||
# ESP8684 devkitm board configuration |
||||
|
||||
# Copyright (c) 2024 Espressif Systems (Shanghai) Co., Ltd. |
||||
# SPDX-License-Identifier: Apache-2.0 |
||||
|
||||
config BOARD_ESP8684_DEVKITM |
||||
select SOC_ESP8684_MINI_H4 |
@ -0,0 +1,10 @@
@@ -0,0 +1,10 @@
|
||||
# Copyright (c) 2024 Espressif Systems (Shanghai) Co., Ltd. |
||||
# SPDX-License-Identifier: Apache-2.0 |
||||
|
||||
choice BOOTLOADER |
||||
default BOOTLOADER_MCUBOOT |
||||
endchoice |
||||
|
||||
choice BOOT_SIGNATURE_TYPE |
||||
default BOOT_SIGNATURE_TYPE_NONE |
||||
endchoice |
@ -0,0 +1,9 @@
@@ -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) |
@ -0,0 +1,5 @@
@@ -0,0 +1,5 @@
|
||||
board: |
||||
name: esp8684_devkitm |
||||
vendor: espressif |
||||
socs: |
||||
- name: esp32c2 |
@ -0,0 +1,235 @@
@@ -0,0 +1,235 @@
|
||||
.. _esp8684_devkitm: |
||||
|
||||
ESP32-C2 |
||||
######## |
||||
|
||||
Overview |
||||
******** |
||||
|
||||
ESP32-C2 (ESP8684 core) is a low-cost, Wi-Fi 4 & Bluetooth 5 (LE) chip. Its unique design |
||||
makes the chip smaller and yet more powerful than ESP8266. ESP32-C2 is built around a RISC-V |
||||
32-bit, single-core processor, with 272 KB of SRAM (16 KB dedicated to cache) and 576 KB of ROM. |
||||
ESP32-C2 has been designed to target simple, high-volume, and low-data-rate IoT applications, |
||||
such as smart plugs and smart light bulbs. ESP32-C2 offers easy and robust wireless connectivity, |
||||
which makes it the go-to solution for developing simple, user-friendly and reliable |
||||
smart-home devices [1]_. |
||||
|
||||
Features include the following (`ESP8684 Datasheet`_): |
||||
|
||||
- 32-bit core RISC-V microcontroller with a maximum clock speed of 120 MHz |
||||
- 2 MB or 4 MB in chip (ESP8684) or in package (ESP32-C2) flash |
||||
- 272 KB of internal RAM |
||||
- 802.11b/g/n |
||||
- A Bluetooth LE subsystem that supports features of Bluetooth 5 and Bluetooth Mesh |
||||
- Various peripherals: |
||||
|
||||
- 14 programmable GPIOs |
||||
- 3 SPI |
||||
- 2 UART |
||||
- 1 I2C Master |
||||
- LED PWM controller, with up to 6 channels |
||||
- General DMA controller (GDMA) |
||||
- 1 12-bit SAR ADC, up to 5 channels |
||||
- 1 temperature sensor |
||||
- 1 54-bit general-purpose timer |
||||
- 2 watchdog timers |
||||
- 1 52-bit system timer |
||||
|
||||
- Cryptographic hardware acceleration (RNG, ECC, RSA, SHA-2, AES) |
||||
|
||||
For detailed information check `ESP8684 Technical Reference Manual`_. |
||||
|
||||
Supported Features |
||||
================== |
||||
|
||||
Current Zephyr's ESP8684-Devkitm board supports the following features: |
||||
|
||||
+------------+------------+-------------------------------------+ |
||||
| Interface | Controller | Driver/Component | |
||||
+============+============+=====================================+ |
||||
| UART | on-chip | serial port | |
||||
+------------+------------+-------------------------------------+ |
||||
| GPIO | on-chip | gpio | |
||||
+------------+------------+-------------------------------------+ |
||||
| PINMUX | on-chip | pinmux | |
||||
+------------+------------+-------------------------------------+ |
||||
| Watchdog | on-chip | watchdog | |
||||
+------------+------------+-------------------------------------+ |
||||
| TRNG | on-chip | entropy | |
||||
+------------+------------+-------------------------------------+ |
||||
| Timers | on-chip | counter | |
||||
+------------+------------+-------------------------------------+ |
||||
|
||||
For a getting started user guide, please check `ESP8684 Devkitm User Guide`_. |
||||
|
||||
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 |
||||
******************* |
||||
|
||||
Simple boot |
||||
=========== |
||||
|
||||
The board could be loaded using the single binary image, without 2nd stage bootloader. |
||||
It is the default option when building the application without additional configuration. |
||||
|
||||
.. note:: |
||||
|
||||
Simple boot does not provide any security features nor OTA updates. |
||||
|
||||
MCUboot bootloader |
||||
================== |
||||
|
||||
User may choose to use MCUboot bootloader instead. In that case the bootloader |
||||
must be build (and flash) at least once. |
||||
|
||||
There are two options to be used when building an application: |
||||
|
||||
1. Sysbuild |
||||
2. Manual build |
||||
|
||||
.. note:: |
||||
|
||||
User can select the MCUboot bootloader by adding the following line |
||||
to the board default configuration file. |
||||
|
||||
.. code:: cfg |
||||
|
||||
CONFIG_BOOTLOADER_MCUBOOT=y |
||||
|
||||
Sysbuild |
||||
======== |
||||
|
||||
The sysbuild makes possible to build and flash all necessary images needed to |
||||
bootstrap the board with the ESP32 SoC. |
||||
|
||||
To build the sample application using sysbuild use the command: |
||||
|
||||
.. zephyr-app-commands:: |
||||
:tool: west |
||||
:app: samples/hello_world |
||||
:board: esp8684_devkitm |
||||
:goals: build |
||||
:west-args: --sysbuild |
||||
:compact: |
||||
|
||||
By default, the ESP32 sysbuild creates bootloader (MCUboot) and application |
||||
images. But it can be configured to create other kind of images. |
||||
|
||||
Build directory structure created by sysbuild is different from traditional |
||||
Zephyr build. Output is structured by the domain subdirectories: |
||||
|
||||
.. code-block:: |
||||
|
||||
build/ |
||||
├── hello_world |
||||
│ └── zephyr |
||||
│ ├── zephyr.elf |
||||
│ └── zephyr.bin |
||||
├── mcuboot |
||||
│ └── zephyr |
||||
│ ├── zephyr.elf |
||||
│ └── zephyr.bin |
||||
└── domains.yaml |
||||
|
||||
.. note:: |
||||
|
||||
With ``--sysbuild`` option the bootloader will be re-build and re-flash |
||||
every time the pristine build is used. |
||||
|
||||
For more information about the system build please read the :ref:`sysbuild` documentation. |
||||
|
||||
Manual build |
||||
============ |
||||
|
||||
During the development cycle, it is intended to build & flash as quickly possible. |
||||
For that reason, images can be build one at a time using traditional build. |
||||
|
||||
The instructions following are relevant for both manual build and sysbuild. |
||||
The only difference is the structure of the build directory. |
||||
|
||||
.. note:: |
||||
|
||||
Remember that bootloader (MCUboot) needs to be flash at least once. |
||||
|
||||
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: esp8684_devkitm |
||||
:goals: build |
||||
|
||||
The usual ``flash`` target will work with the ``esp8684_devkitm`` board |
||||
configuration. Here is an example for the :ref:`hello_world` |
||||
application. |
||||
|
||||
.. zephyr-app-commands:: |
||||
:zephyr-app: samples/hello_world |
||||
:board: esp8684_devkitm |
||||
: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! esp8684_devkitm |
||||
|
||||
Debugging |
||||
********* |
||||
|
||||
As with much custom hardware, the ESP8684 modules require patches to |
||||
OpenOCD that are not upstreamed yet. Espressif maintains their own fork of |
||||
the project. The custom OpenOCD can be obtained at `OpenOCD ESP32`_ |
||||
|
||||
The Zephyr SDK uses a bundled version of OpenOCD by default. You can overwrite that behavior by adding the |
||||
``-DOPENOCD=<path/to/bin/openocd> -DOPENOCD_DEFAULT_PATH=<path/to/openocd/share/openocd/scripts>`` |
||||
parameter when building. |
||||
|
||||
Here is an example for building the :ref:`hello_world` application. |
||||
|
||||
.. zephyr-app-commands:: |
||||
:zephyr-app: samples/hello_world |
||||
:board: esp8684_devkitm |
||||
:goals: build flash |
||||
:gen-args: -DOPENOCD=<path/to/bin/openocd> -DOPENOCD_DEFAULT_PATH=<path/to/openocd/share/openocd/scripts> |
||||
|
||||
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: esp8684_devkitm |
||||
:goals: debug |
||||
|
||||
.. _`OpenOCD ESP32`: https://github.com/espressif/openocd-esp32/releases |
||||
|
||||
References |
||||
********** |
||||
|
||||
.. [1] https://www.espressif.com/en/products/socs/esp8684 |
||||
.. _ESP8684 Devkitm User Guide: https://docs.espressif.com/projects/esp-dev-kits/en/latest/esp8684/esp8684-devkitm-1/user_guide.html |
||||
.. _ESP8684 Technical Reference Manual: https://www.espressif.com/sites/default/files/documentation/esp8684_technical_reference_manual_en.pdf |
||||
.. _ESP8684 Datasheet: https://www.espressif.com/sites/default/files/documentation/esp8684_datasheet_en.pdf |
@ -0,0 +1,23 @@
@@ -0,0 +1,23 @@
|
||||
/* |
||||
* Copyright (c) 2024 Espressif Systems (Shanghai) Co., Ltd. |
||||
* |
||||
* SPDX-License-Identifier: Apache-2.0 |
||||
*/ |
||||
|
||||
#include <zephyr/dt-bindings/pinctrl/esp-pinctrl-common.h> |
||||
#include <dt-bindings/pinctrl/esp32c2-pinctrl.h> |
||||
#include <zephyr/dt-bindings/pinctrl/esp32c2-gpio-sigmap.h> |
||||
|
||||
&pinctrl { |
||||
|
||||
uart0_default: uart0_default { |
||||
group1 { |
||||
pinmux = <UART0_TX_GPIO20>; |
||||
output-high; |
||||
}; |
||||
group2 { |
||||
pinmux = <UART0_RX_GPIO19>; |
||||
bias-pull-up; |
||||
}; |
||||
}; |
||||
}; |
@ -0,0 +1,100 @@
@@ -0,0 +1,100 @@
|
||||
/* |
||||
* Copyright (c) 2024 Espressif Systems (Shanghai) Co., Ltd. |
||||
* |
||||
* SPDX-License-Identifier: Apache-2.0 |
||||
*/ |
||||
|
||||
/dts-v1/; |
||||
|
||||
#include <espressif/esp32c2/esp8684_mini_h4.dtsi> |
||||
#include "esp8684_devkitm-pinctrl.dtsi" |
||||
#include <zephyr/dt-bindings/input/input-event-codes.h> |
||||
|
||||
/ { |
||||
model = "Espressif ESP8684-DevkitM"; |
||||
compatible = "espressif,esp32c2"; |
||||
|
||||
chosen { |
||||
zephyr,sram = &sram0; |
||||
zephyr,console = &uart0; |
||||
zephyr,shell-uart = &uart0; |
||||
zephyr,flash = &flash0; |
||||
zephyr,code-partition = &slot0_partition; |
||||
}; |
||||
|
||||
aliases { |
||||
sw0 = &user_button1; |
||||
watchdog0 = &wdt0; |
||||
}; |
||||
|
||||
gpio_keys { |
||||
compatible = "gpio-keys"; |
||||
user_button1: button_1 { |
||||
label = "User SW1"; |
||||
gpios = <&gpio0 9 (GPIO_PULL_UP | GPIO_ACTIVE_LOW)>; |
||||
zephyr,code = <INPUT_KEY_0>; |
||||
}; |
||||
}; |
||||
}; |
||||
|
||||
&uart0 { |
||||
status = "okay"; |
||||
current-speed = <74880>; |
||||
pinctrl-0 = <&uart0_default>; |
||||
pinctrl-names = "default"; |
||||
}; |
||||
|
||||
&trng0 { |
||||
status = "okay"; |
||||
}; |
||||
|
||||
&gpio0 { |
||||
status = "okay"; |
||||
}; |
||||
|
||||
&wdt0 { |
||||
status = "okay"; |
||||
}; |
||||
|
||||
&timer0 { |
||||
status = "disabled"; |
||||
}; |
||||
|
||||
&flash0 { |
||||
status = "okay"; |
||||
partitions { |
||||
compatible = "fixed-partitions"; |
||||
#address-cells = <1>; |
||||
#size-cells = <1>; |
||||
|
||||
/* Reserve 60kB for the bootloader */ |
||||
boot_partition: partition@0 { |
||||
label = "mcuboot"; |
||||
reg = <0x00000000 0x0000F000>; |
||||
read-only; |
||||
}; |
||||
|
||||
/* Reserve 1024kB for the application in slot 0 */ |
||||
slot0_partition: partition@10000 { |
||||
label = "image-0"; |
||||
reg = <0x00010000 0x00100000>; |
||||
}; |
||||
|
||||
/* Reserve 1024kB for the application in slot 1 */ |
||||
slot1_partition: partition@110000 { |
||||
label = "image-1"; |
||||
reg = <0x00110000 0x00100000>; |
||||
}; |
||||
|
||||
/* Reserve 256kB for the scratch partition */ |
||||
scratch_partition: partition@210000 { |
||||
label = "image-scratch"; |
||||
reg = <0x00210000 0x00040000>; |
||||
}; |
||||
|
||||
storage_partition: partition@250000 { |
||||
label = "storage"; |
||||
reg = <0x00250000 0x00006000>; |
||||
}; |
||||
}; |
||||
}; |
@ -0,0 +1,17 @@
@@ -0,0 +1,17 @@
|
||||
identifier: esp8684_devkitm |
||||
name: ESP8684 |
||||
type: mcu |
||||
arch: riscv |
||||
toolchain: |
||||
- zephyr |
||||
supported: |
||||
- gpio |
||||
- watchdog |
||||
- uart |
||||
- counter |
||||
- entropy |
||||
testing: |
||||
ignore_tags: |
||||
- net |
||||
- bluetooth |
||||
vendor: espressif |
@ -0,0 +1,8 @@
@@ -0,0 +1,8 @@
|
||||
# SPDX-License-Identifier: Apache-2.0 |
||||
|
||||
CONFIG_MAIN_STACK_SIZE=2048 |
||||
|
||||
CONFIG_CONSOLE=y |
||||
CONFIG_SERIAL=y |
||||
CONFIG_UART_CONSOLE=y |
||||
CONFIG_GPIO=y |
Loading…
Reference in new issue