From fa6bba6ed1d1f7bd9fb4222b8ef1d0166abe3fe5 Mon Sep 17 00:00:00 2001 From: Philipp Steiner Date: Mon, 17 Mar 2025 08:53:20 +0100 Subject: [PATCH] boards: adafruit: esp32s2_feather: add support add board support for adafruit_esp32s2_feather board series Signed-off-by: Philipp Steiner --- .../adafruit/feather_esp32s2/CMakeLists.txt | 4 + boards/adafruit/feather_esp32s2/Kconfig | 11 + .../Kconfig.adafruit_feather_esp32s2 | 5 + .../Kconfig.adafruit_feather_esp32s2_tft | 5 + ...onfig.adafruit_feather_esp32s2_tft_reverse | 5 + .../feather_esp32s2/Kconfig.defconfig | 28 ++ .../adafruit/feather_esp32s2/Kconfig.sysbuild | 10 + .../adafruit_feather_esp32s2-pinctrl.dtsi | 66 ++++ .../adafruit_feather_esp32s2.dts | 15 + .../adafruit_feather_esp32s2_B.overlay | 19 + .../adafruit_feather_esp32s2_B.yaml | 20 + .../adafruit_feather_esp32s2_C.overlay | 19 + .../adafruit_feather_esp32s2_C.yaml | 20 + .../adafruit_feather_esp32s2_common.dtsi | 162 ++++++++ .../adafruit_feather_esp32s2_defconfig | 7 + .../adafruit_feather_esp32s2_tft.dts | 119 ++++++ .../adafruit_feather_esp32s2_tft.yaml | 21 ++ .../adafruit_feather_esp32s2_tft_defconfig | 7 + .../adafruit_feather_esp32s2_tft_reverse.dts | 123 ++++++ .../adafruit_feather_esp32s2_tft_reverse.yaml | 22 ++ ...ruit_feather_esp32s2_tft_reverse_defconfig | 7 + boards/adafruit/feather_esp32s2/board.c | 28 ++ boards/adafruit/feather_esp32s2/board.cmake | 9 + boards/adafruit/feather_esp32s2/board.yml | 22 ++ .../doc/adafruit_feather_esp32s2.rst | 356 ++++++++++++++++++ .../doc/adafruit_feather_esp32s2_tft.rst | 294 +++++++++++++++ .../adafruit_feather_esp32s2_tft_reverse.rst | 291 ++++++++++++++ .../doc/img/adafruit_feather_esp32s2.webp | Bin 0 -> 45574 bytes .../doc/img/adafruit_feather_esp32s2_tft.webp | Bin 0 -> 66556 bytes .../adafruit_feather_esp32s2_tft_reverse.webp | Bin 0 -> 27636 bytes .../feather_esp32s2/feather_connector.dtsi | 42 +++ .../feather_connector_tft.dtsi | 42 +++ .../feather_esp32s2/support/openocd.cfg | 7 + .../boards/adafruit_feather_esp32s2.conf | 2 + .../boards/adafruit_feather_esp32s2_tft.conf | 2 + .../adafruit_feather_esp32s2_tft_reverse.conf | 2 + .../boards/adafruit_feather_esp32s2_C.conf | 4 + .../boards/adafruit_feather_esp32s2_C.overlay | 8 + .../boards/adafruit_feather_esp32s2_tft.conf | 4 + .../adafruit_feather_esp32s2_tft.overlay | 8 + .../adafruit_feather_esp32s2_tft_reverse.conf | 4 + .../boards/adafruit_feather_esp32s2.overlay | 6 + .../adafruit_feather_esp32s2_tft.overlay | 6 + ...afruit_feather_esp32s2_tft_reverse.overlay | 6 + .../boards/adafruit_feather_esp32s2_tft.conf | 6 + .../adafruit_feather_esp32s2_tft.overlay | 3 + .../adafruit_feather_esp32s2_tft_reverse.conf | 6 + ...afruit_feather_esp32s2_tft_reverse.overlay | 3 + 48 files changed, 1856 insertions(+) create mode 100644 boards/adafruit/feather_esp32s2/CMakeLists.txt create mode 100644 boards/adafruit/feather_esp32s2/Kconfig create mode 100644 boards/adafruit/feather_esp32s2/Kconfig.adafruit_feather_esp32s2 create mode 100644 boards/adafruit/feather_esp32s2/Kconfig.adafruit_feather_esp32s2_tft create mode 100644 boards/adafruit/feather_esp32s2/Kconfig.adafruit_feather_esp32s2_tft_reverse create mode 100644 boards/adafruit/feather_esp32s2/Kconfig.defconfig create mode 100644 boards/adafruit/feather_esp32s2/Kconfig.sysbuild create mode 100644 boards/adafruit/feather_esp32s2/adafruit_feather_esp32s2-pinctrl.dtsi create mode 100644 boards/adafruit/feather_esp32s2/adafruit_feather_esp32s2.dts create mode 100644 boards/adafruit/feather_esp32s2/adafruit_feather_esp32s2_B.overlay create mode 100644 boards/adafruit/feather_esp32s2/adafruit_feather_esp32s2_B.yaml create mode 100644 boards/adafruit/feather_esp32s2/adafruit_feather_esp32s2_C.overlay create mode 100644 boards/adafruit/feather_esp32s2/adafruit_feather_esp32s2_C.yaml create mode 100644 boards/adafruit/feather_esp32s2/adafruit_feather_esp32s2_common.dtsi create mode 100644 boards/adafruit/feather_esp32s2/adafruit_feather_esp32s2_defconfig create mode 100644 boards/adafruit/feather_esp32s2/adafruit_feather_esp32s2_tft.dts create mode 100644 boards/adafruit/feather_esp32s2/adafruit_feather_esp32s2_tft.yaml create mode 100644 boards/adafruit/feather_esp32s2/adafruit_feather_esp32s2_tft_defconfig create mode 100644 boards/adafruit/feather_esp32s2/adafruit_feather_esp32s2_tft_reverse.dts create mode 100644 boards/adafruit/feather_esp32s2/adafruit_feather_esp32s2_tft_reverse.yaml create mode 100644 boards/adafruit/feather_esp32s2/adafruit_feather_esp32s2_tft_reverse_defconfig create mode 100644 boards/adafruit/feather_esp32s2/board.c create mode 100644 boards/adafruit/feather_esp32s2/board.cmake create mode 100644 boards/adafruit/feather_esp32s2/board.yml create mode 100644 boards/adafruit/feather_esp32s2/doc/adafruit_feather_esp32s2.rst create mode 100644 boards/adafruit/feather_esp32s2/doc/adafruit_feather_esp32s2_tft.rst create mode 100644 boards/adafruit/feather_esp32s2/doc/adafruit_feather_esp32s2_tft_reverse.rst create mode 100644 boards/adafruit/feather_esp32s2/doc/img/adafruit_feather_esp32s2.webp create mode 100644 boards/adafruit/feather_esp32s2/doc/img/adafruit_feather_esp32s2_tft.webp create mode 100644 boards/adafruit/feather_esp32s2/doc/img/adafruit_feather_esp32s2_tft_reverse.webp create mode 100644 boards/adafruit/feather_esp32s2/feather_connector.dtsi create mode 100644 boards/adafruit/feather_esp32s2/feather_connector_tft.dtsi create mode 100644 boards/adafruit/feather_esp32s2/support/openocd.cfg create mode 100644 samples/drivers/led/led_strip/boards/adafruit_feather_esp32s2.conf create mode 100644 samples/drivers/led/led_strip/boards/adafruit_feather_esp32s2_tft.conf create mode 100644 samples/drivers/led/led_strip/boards/adafruit_feather_esp32s2_tft_reverse.conf create mode 100644 samples/fuel_gauge/max17048/boards/adafruit_feather_esp32s2_C.conf create mode 100644 samples/fuel_gauge/max17048/boards/adafruit_feather_esp32s2_C.overlay create mode 100644 samples/fuel_gauge/max17048/boards/adafruit_feather_esp32s2_tft.conf create mode 100644 samples/fuel_gauge/max17048/boards/adafruit_feather_esp32s2_tft.overlay create mode 100644 samples/fuel_gauge/max17048/boards/adafruit_feather_esp32s2_tft_reverse.conf create mode 100644 samples/sensor/bme280/boards/adafruit_feather_esp32s2.overlay create mode 100644 samples/sensor/bme280/boards/adafruit_feather_esp32s2_tft.overlay create mode 100644 samples/sensor/bme280/boards/adafruit_feather_esp32s2_tft_reverse.overlay create mode 100644 samples/subsys/display/lvgl/boards/adafruit_feather_esp32s2_tft.conf create mode 100644 samples/subsys/display/lvgl/boards/adafruit_feather_esp32s2_tft.overlay create mode 100644 samples/subsys/display/lvgl/boards/adafruit_feather_esp32s2_tft_reverse.conf create mode 100644 samples/subsys/display/lvgl/boards/adafruit_feather_esp32s2_tft_reverse.overlay diff --git a/boards/adafruit/feather_esp32s2/CMakeLists.txt b/boards/adafruit/feather_esp32s2/CMakeLists.txt new file mode 100644 index 0000000000000..218a0602483ab --- /dev/null +++ b/boards/adafruit/feather_esp32s2/CMakeLists.txt @@ -0,0 +1,4 @@ +# SPDX-License-Identifier: Apache-2.0 + +zephyr_library() +zephyr_library_sources(board.c) diff --git a/boards/adafruit/feather_esp32s2/Kconfig b/boards/adafruit/feather_esp32s2/Kconfig new file mode 100644 index 0000000000000..272e4c39ee9f3 --- /dev/null +++ b/boards/adafruit/feather_esp32s2/Kconfig @@ -0,0 +1,11 @@ +# Copyright (c) 2023 Google, LLC +# SPDX-License-Identifier: Apache-2.0 + +config HEAP_MEM_POOL_ADD_SIZE_BOARD + int + default 4096 + +config BOARD_NEEDS_LATE_HOOK + bool + default y if BOARD_ADAFRUIT_FEATHER_ESP32S2_TFT || BOARD_ADAFRUIT_FEATHER_ESP32S2_TFT_REVERSE + select BOARD_LATE_INIT_HOOK diff --git a/boards/adafruit/feather_esp32s2/Kconfig.adafruit_feather_esp32s2 b/boards/adafruit/feather_esp32s2/Kconfig.adafruit_feather_esp32s2 new file mode 100644 index 0000000000000..63f45c11300ec --- /dev/null +++ b/boards/adafruit/feather_esp32s2/Kconfig.adafruit_feather_esp32s2 @@ -0,0 +1,5 @@ +# Copyright (c) 2025 Philipp Steiner +# SPDX-License-Identifier: Apache-2.0 + +config BOARD_ADAFRUIT_FEATHER_ESP32S2 + select SOC_ESP32S2_R2 diff --git a/boards/adafruit/feather_esp32s2/Kconfig.adafruit_feather_esp32s2_tft b/boards/adafruit/feather_esp32s2/Kconfig.adafruit_feather_esp32s2_tft new file mode 100644 index 0000000000000..e54cad03d4221 --- /dev/null +++ b/boards/adafruit/feather_esp32s2/Kconfig.adafruit_feather_esp32s2_tft @@ -0,0 +1,5 @@ +# Copyright (c) 2025 Philipp Steiner +# SPDX-License-Identifier: Apache-2.0 + +config BOARD_ADAFRUIT_FEATHER_ESP32S2_TFT + select SOC_ESP32S2_R2 diff --git a/boards/adafruit/feather_esp32s2/Kconfig.adafruit_feather_esp32s2_tft_reverse b/boards/adafruit/feather_esp32s2/Kconfig.adafruit_feather_esp32s2_tft_reverse new file mode 100644 index 0000000000000..1d470f8749063 --- /dev/null +++ b/boards/adafruit/feather_esp32s2/Kconfig.adafruit_feather_esp32s2_tft_reverse @@ -0,0 +1,5 @@ +# Copyright (c) 2025 Philipp Steiner +# SPDX-License-Identifier: Apache-2.0 + +config BOARD_ADAFRUIT_FEATHER_ESP32S2_TFT_REVERSE + select SOC_ESP32S2_R2 diff --git a/boards/adafruit/feather_esp32s2/Kconfig.defconfig b/boards/adafruit/feather_esp32s2/Kconfig.defconfig new file mode 100644 index 0000000000000..734863a6654b1 --- /dev/null +++ b/boards/adafruit/feather_esp32s2/Kconfig.defconfig @@ -0,0 +1,28 @@ +# Copyright (c) 2025 Philipp Steiner +# SPDX-License-Identifier: Apache-2.0 + +if BOARD_ADAFRUIT_FEATHER_ESP32S2_TFT || BOARD_ADAFRUIT_FEATHER_ESP32S2_TFT_REVERSE + +if DISPLAY + +choice ST7789V_PIXEL_FORMAT + default ST7789V_RGB565 +endchoice + +if LVGL + +config LV_Z_BITS_PER_PIXEL + default 16 + +choice LV_COLOR_DEPTH + default LV_COLOR_DEPTH_16 +endchoice + +config LV_COLOR_16_SWAP + default y + +endif # LVGL + +endif # DISPLAY + +endif # BOARD_ADAFRUIT_FEATHER_ESP32S2_TFT || BOARD_ADAFRUIT_FEATHER_ESP32S2_TFT_REVERSE diff --git a/boards/adafruit/feather_esp32s2/Kconfig.sysbuild b/boards/adafruit/feather_esp32s2/Kconfig.sysbuild new file mode 100644 index 0000000000000..3a2d17ac5cfd0 --- /dev/null +++ b/boards/adafruit/feather_esp32s2/Kconfig.sysbuild @@ -0,0 +1,10 @@ +# Copyright (c) 2023 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 diff --git a/boards/adafruit/feather_esp32s2/adafruit_feather_esp32s2-pinctrl.dtsi b/boards/adafruit/feather_esp32s2/adafruit_feather_esp32s2-pinctrl.dtsi new file mode 100644 index 0000000000000..a6c67847bbb3f --- /dev/null +++ b/boards/adafruit/feather_esp32s2/adafruit_feather_esp32s2-pinctrl.dtsi @@ -0,0 +1,66 @@ +/* + * Copyright (c) 2025 Philipp Steiner . + * + * SPDX-License-Identifier: Apache-2.0 + */ + +#include +#include +#include + +&pinctrl { + /* Debug TX (DBG) - This is the hardware UART debug pin */ + uart0_default: uart0_default { + group1 { + pinmux = ; + output-high; + }; + }; + + uart1_default: uart1_default { + group1 { + pinmux = ; + output-high; + }; + + group2 { + pinmux = ; + bias-pull-up; + }; + }; + + spim2_default: spim2_default { + group1 { + pinmux = , + , + ; + }; + + group2 { + pinmux = ; + output-low; + }; + }; + + spim3_ws2812_led: spim3_ws2812_led { + group1 { + pinmux = ; + }; + }; + + i2c0_default: i2c0_default { + group1 { + pinmux = , + ; + drive-open-drain; + output-high; + }; + }; + + twai_default: twai_default { + group1 { + pinmux = , + ; + }; + }; +}; diff --git a/boards/adafruit/feather_esp32s2/adafruit_feather_esp32s2.dts b/boards/adafruit/feather_esp32s2/adafruit_feather_esp32s2.dts new file mode 100644 index 0000000000000..e7e3f8efb7b50 --- /dev/null +++ b/boards/adafruit/feather_esp32s2/adafruit_feather_esp32s2.dts @@ -0,0 +1,15 @@ +/* + * Copyright (c) 2025 Philipp Steiner + * + * SPDX-License-Identifier: Apache-2.0 + */ + +/dts-v1/; + +#include "adafruit_feather_esp32s2_common.dtsi" +#include "feather_connector.dtsi" + +/ { + model = "Adafruit Feather ESP32-S2"; + compatible = "espressif,esp32s2"; +}; diff --git a/boards/adafruit/feather_esp32s2/adafruit_feather_esp32s2_B.overlay b/boards/adafruit/feather_esp32s2/adafruit_feather_esp32s2_B.overlay new file mode 100644 index 0000000000000..096357d93eb77 --- /dev/null +++ b/boards/adafruit/feather_esp32s2/adafruit_feather_esp32s2_B.overlay @@ -0,0 +1,19 @@ +/* + * Copyright (c) 2025 Philipp Steiner + * + * SPDX-License-Identifier: Apache-2.0 + */ + +/ { + /* + * On-board transistor powers I2C pull-ups and external devices connected + * via the STEMMA QT connector. + */ + i2c_reg: i2c_reg { + label = "I2C Power"; + compatible = "power-domain-gpio"; + #power-domain-cells = <0>; + enable-gpios = <&gpio0 7 GPIO_ACTIVE_LOW>; + startup-delay-us = <10>; + }; +}; diff --git a/boards/adafruit/feather_esp32s2/adafruit_feather_esp32s2_B.yaml b/boards/adafruit/feather_esp32s2/adafruit_feather_esp32s2_B.yaml new file mode 100644 index 0000000000000..7246420988f85 --- /dev/null +++ b/boards/adafruit/feather_esp32s2/adafruit_feather_esp32s2_B.yaml @@ -0,0 +1,20 @@ +identifier: adafruit_feather_esp32s2@B +name: Adafruit Feather ESP32-S2 Rev B +type: mcu +arch: xtensa +toolchain: + - zephyr +supported: + - gpio + - uart + - i2c + - spi + - counter + - watchdog + - entropy + - pwm + - dma +vendor: adafruit +testing: + ignore_tags: + - bluetooth diff --git a/boards/adafruit/feather_esp32s2/adafruit_feather_esp32s2_C.overlay b/boards/adafruit/feather_esp32s2/adafruit_feather_esp32s2_C.overlay new file mode 100644 index 0000000000000..94550a53acda4 --- /dev/null +++ b/boards/adafruit/feather_esp32s2/adafruit_feather_esp32s2_C.overlay @@ -0,0 +1,19 @@ +/* + * Copyright (c) 2025 Philipp Steiner + * + * SPDX-License-Identifier: Apache-2.0 + */ + +/ { + /* + * On-board regulator powers I2C pull-ups and external devices connected + * via the STEMMA QT connector. + */ + i2c_reg: i2c_reg { + label = "I2C Power"; + compatible = "power-domain-gpio"; + #power-domain-cells = <0>; + enable-gpios = <&gpio0 7 GPIO_ACTIVE_HIGH>; + startup-delay-us = <10>; + }; +}; diff --git a/boards/adafruit/feather_esp32s2/adafruit_feather_esp32s2_C.yaml b/boards/adafruit/feather_esp32s2/adafruit_feather_esp32s2_C.yaml new file mode 100644 index 0000000000000..86ca59f5965d4 --- /dev/null +++ b/boards/adafruit/feather_esp32s2/adafruit_feather_esp32s2_C.yaml @@ -0,0 +1,20 @@ +identifier: adafruit_feather_esp32s2@C +name: Adafruit Feather ESP32-S2 Rev C +type: mcu +arch: xtensa +toolchain: + - zephyr +supported: + - gpio + - uart + - i2c + - spi + - counter + - watchdog + - entropy + - pwm + - dma +vendor: adafruit +testing: + ignore_tags: + - bluetooth diff --git a/boards/adafruit/feather_esp32s2/adafruit_feather_esp32s2_common.dtsi b/boards/adafruit/feather_esp32s2/adafruit_feather_esp32s2_common.dtsi new file mode 100644 index 0000000000000..257ea650a298b --- /dev/null +++ b/boards/adafruit/feather_esp32s2/adafruit_feather_esp32s2_common.dtsi @@ -0,0 +1,162 @@ +/* + * Copyright (c) 2025 Philipp Steiner + * + * SPDX-License-Identifier: Apache-2.0 + */ + +/dts-v1/; + +#include +#include +#include "adafruit_feather_esp32s2-pinctrl.dtsi" +#include +#include +#include +#include +#include + +/ { + compatible = "espressif,esp32s2"; + + chosen { + zephyr,sram = &sram1; + /* + * uart1 is used as the default uart for zephyr,console and zephyr,shell, + * because USB-OTG is until now not supported and USB-CDC is not available + * for ESP32-S2. + * See issue #29394 - ESP32 development overview + * To use uart1 a FTDI-USB-RS232 or similar needs to be connected to the RX/TX pins. + * See feather_connector.dtsi + */ + zephyr,console = &uart1; + zephyr,shell-uart = &uart1; + zephyr,flash = &flash0; + zephyr,code-partition = &slot0_partition; + }; + + aliases { + led0 = &led0; + i2c-0 = &i2c0; + sw0 = &user_button; + led-strip = &led_strip; + watchdog0 = &wdt0; + }; + + leds { + compatible = "gpio-leds"; + status = "okay"; + + led0: led_0 { + label = "Red-LED"; + gpios = <&gpio0 13 GPIO_ACTIVE_LOW>; + }; + }; + + gpio_keys { + compatible = "gpio-keys"; + status = "okay"; + + user_button: user_button { + label = "BOOT Button"; + gpios = <&gpio0 0 (GPIO_PULL_UP | GPIO_ACTIVE_LOW)>; + zephyr,code = ; + }; + }; +}; + +&uart0 { + status = "okay"; + current-speed = <115200>; + pinctrl-0 = <&uart0_default>; + pinctrl-names = "default"; +}; + +&uart1 { + status = "okay"; + current-speed = <115200>; + pinctrl-0 = <&uart1_default>; + pinctrl-names = "default"; +}; + +&gpio0 { + status = "okay"; + + neopixel_power_enable { + gpio-hog; + gpios = <21 GPIO_ACTIVE_HIGH>; + output-high; + }; +}; + +&gpio1 { + status = "okay"; +}; + +&timer0 { + status = "okay"; +}; + +&timer1 { + status = "okay"; +}; + +&timer2 { + status = "okay"; +}; + +&timer3 { + status = "okay"; +}; + +&i2c0 { + status = "okay"; + clock-frequency = ; + pinctrl-0 = <&i2c0_default>; + pinctrl-names = "default"; +}; + +&trng0 { + status = "okay"; +}; + +&spi2 { + #address-cells = <1>; + #size-cells = <0>; + status = "okay"; + pinctrl-0 = <&spim2_default>; + pinctrl-names = "default"; +}; + +&spi3 { + #address-cells = <1>; + #size-cells = <0>; + status = "okay"; + pinctrl-0 = <&spim3_ws2812_led>; + pinctrl-names = "default"; + + line-idle-low; + + led_strip: ws2812@0 { + compatible = "worldsemi,ws2812-spi"; + + /* WS2812 */ + reg = <0>; + spi-max-frequency = <6400000>; + chain-length = <1>; + spi-cpha; + spi-one-frame = ; /* 11110000: 625ns high and 625ns low */ + spi-zero-frame = ; /* 11000000: 312.5ns high and 937.5ns low */ + color-mapping = , + , + ; + }; +}; + +&twai { + pinctrl-0 = <&twai_default>; + pinctrl-names = "default"; +}; + +&wdt0 { + status = "okay"; +}; diff --git a/boards/adafruit/feather_esp32s2/adafruit_feather_esp32s2_defconfig b/boards/adafruit/feather_esp32s2/adafruit_feather_esp32s2_defconfig new file mode 100644 index 0000000000000..d8fbaa879257b --- /dev/null +++ b/boards/adafruit/feather_esp32s2/adafruit_feather_esp32s2_defconfig @@ -0,0 +1,7 @@ +# SPDX-License-Identifier: Apache-2.0 + +CONFIG_CONSOLE=y +CONFIG_SERIAL=y +CONFIG_UART_CONSOLE=y +CONFIG_GPIO=y +CONFIG_CLOCK_CONTROL=y diff --git a/boards/adafruit/feather_esp32s2/adafruit_feather_esp32s2_tft.dts b/boards/adafruit/feather_esp32s2/adafruit_feather_esp32s2_tft.dts new file mode 100644 index 0000000000000..c57ebdc8b8b97 --- /dev/null +++ b/boards/adafruit/feather_esp32s2/adafruit_feather_esp32s2_tft.dts @@ -0,0 +1,119 @@ +/* + * Copyright (c) 2025 Philipp Steiner + * + * SPDX-License-Identifier: Apache-2.0 + */ + +/dts-v1/; + +#include "adafruit_feather_esp32s2_common.dtsi" +#include "feather_connector_tft.dtsi" + +/ { + model = "Adafruit Feather ESP32-S2 TFT"; + compatible = "espressif,esp32s2"; + + chosen { + zephyr,display = &st7789v_tft; + }; + + aliases { + backlight = &led1; + }; + + leds { + compatible = "gpio-leds"; + status = "okay"; + + led1: led_1 { + label = "TFT Backlight"; + gpios = <&gpio1 45 GPIO_ACTIVE_HIGH>; + }; + }; + + /* + * On-board regulator powers I2C pull-ups and external devices connected + * via the STEMMA QT connector. + */ + i2c_reg: i2c_reg { + label = "I2C Power"; + compatible = "power-domain-gpio"; + #power-domain-cells = <0>; + enable-gpios = <&gpio0 21 GPIO_ACTIVE_HIGH>; + startup-delay-us = <10>; + }; + + mipi_dbi { + compatible = "zephyr,mipi-dbi-spi"; + spi-dev = <&spi2>; + dc-gpios = <&gpio1 39 GPIO_ACTIVE_HIGH>; + reset-gpios = <&gpio1 40 GPIO_ACTIVE_LOW>; + write-only; + #address-cells = <1>; + #size-cells = <0>; + + st7789v_tft: st7789v_tft@0 { + compatible = "sitronix,st7789v"; + status = "disabled"; + + /* Also powered by i2c_reg */ + power-domains = <&i2c_reg>; + + mipi-max-frequency = ; + reg = <0>; + width = <135>; + height = <240>; + x-offset = <52>; + y-offset = <40>; + vcom = <0x20>; + gctrl = <0x35>; + vrhs = <0x0b>; + vdvs = <0x20>; + mdac = <0x08>; + gamma = <0x01>; + colmod = <0x55>; + lcm = <0x2c>; + porch-param = [0c 0c 00 33 33]; + cmd2en-param = [5a 69 02 01]; + pwctrl1-param = [a4 a1]; + pvgam-param = [70 2C 2E 15 10 09 48 33 53 0B 19 18 20 25]; + nvgam-param = [70 2C 2E 15 10 09 48 33 53 0B 19 18 20 25]; + ram-param = [00 F0]; + rgb-param = [40 02 14]; + mipi-mode = "MIPI_DBI_MODE_SPI_4WIRE"; + }; + }; +}; + +&gpio0 { + status = "okay"; + + neopixel_power_enable { + gpio-hog; + gpios = <34 GPIO_ACTIVE_HIGH>; + output-high; + }; +}; + +&pinctrl { + uart1_default: uart1_default { + group1 { + pinmux = ; + output-high; + }; + + group2 { + pinmux = ; + bias-pull-up; + }; + }; + + i2c0_default: i2c0_default { + group1 { + pinmux = , + ; + drive-open-drain; + output-high; + }; + }; +}; diff --git a/boards/adafruit/feather_esp32s2/adafruit_feather_esp32s2_tft.yaml b/boards/adafruit/feather_esp32s2/adafruit_feather_esp32s2_tft.yaml new file mode 100644 index 0000000000000..99ca5778e7a03 --- /dev/null +++ b/boards/adafruit/feather_esp32s2/adafruit_feather_esp32s2_tft.yaml @@ -0,0 +1,21 @@ +identifier: adafruit_feather_esp32s2_tft +name: Adafruit ESP32-S2 TFT Feather +type: mcu +arch: xtensa +toolchain: + - zephyr +supported: + - gpio + - uart + - i2c + - spi + - counter + - watchdog + - entropy + - pwm + - dma + - display +vendor: adafruit +testing: + ignore_tags: + - bluetooth diff --git a/boards/adafruit/feather_esp32s2/adafruit_feather_esp32s2_tft_defconfig b/boards/adafruit/feather_esp32s2/adafruit_feather_esp32s2_tft_defconfig new file mode 100644 index 0000000000000..d8fbaa879257b --- /dev/null +++ b/boards/adafruit/feather_esp32s2/adafruit_feather_esp32s2_tft_defconfig @@ -0,0 +1,7 @@ +# SPDX-License-Identifier: Apache-2.0 + +CONFIG_CONSOLE=y +CONFIG_SERIAL=y +CONFIG_UART_CONSOLE=y +CONFIG_GPIO=y +CONFIG_CLOCK_CONTROL=y diff --git a/boards/adafruit/feather_esp32s2/adafruit_feather_esp32s2_tft_reverse.dts b/boards/adafruit/feather_esp32s2/adafruit_feather_esp32s2_tft_reverse.dts new file mode 100644 index 0000000000000..fbb4b0993ae1c --- /dev/null +++ b/boards/adafruit/feather_esp32s2/adafruit_feather_esp32s2_tft_reverse.dts @@ -0,0 +1,123 @@ +/* + * Copyright (c) 2025 Philipp Steiner + * + * SPDX-License-Identifier: Apache-2.0 + */ + +/dts-v1/; + +#include "adafruit_feather_esp32s2_common.dtsi" +#include "feather_connector.dtsi" + +/ { + model = "Adafruit Feather ESP32-S2 TFT Reverse"; + compatible = "espressif,esp32s2"; + + chosen { + zephyr,display = &st7789v_tft; + }; + + aliases { + backlight = &led1; + }; + + leds { + compatible = "gpio-leds"; + status = "okay"; + + led1: led_1 { + label = "TFT Backlight"; + gpios = <&gpio1 45 GPIO_ACTIVE_HIGH>; + }; + }; + + gpio_keys { + compatible = "gpio-keys"; + status = "okay"; + + d1_button: d1_button { + label = "D1 Button"; + gpios = <&gpio0 1 (GPIO_PULL_UP | GPIO_ACTIVE_LOW)>; + zephyr,code = ; + }; + + d2_button: d2_button { + label = "D3 Button"; + gpios = <&gpio0 2 (GPIO_PULL_UP | GPIO_ACTIVE_LOW)>; + zephyr,code = ; + }; + }; + + i2c_reg: i2c_reg { + label = "TFT I2C Power"; + compatible = "power-domain-gpio"; + #power-domain-cells = <0>; + enable-gpios = <&gpio0 7 GPIO_ACTIVE_HIGH>; + startup-delay-us = <10>; + }; + + mipi_dbi { + compatible = "zephyr,mipi-dbi-spi"; + spi-dev = <&spi2>; + dc-gpios = <&gpio1 40 GPIO_ACTIVE_HIGH>; + reset-gpios = <&gpio1 41 GPIO_ACTIVE_LOW>; + write-only; + #address-cells = <1>; + #size-cells = <0>; + + st7789v_tft: st7789v_tft@0 { + compatible = "sitronix,st7789v"; + status = "disabled"; + + /* Also powered by i2c_reg */ + power-domains = <&i2c_reg>; + + mipi-max-frequency = ; + reg = <0>; + width = <135>; + height = <240>; + x-offset = <52>; + y-offset = <40>; + vcom = <0x20>; + gctrl = <0x35>; + vrhs = <0x0b>; + vdvs = <0x20>; + mdac = <0x08>; + gamma = <0x01>; + colmod = <0x55>; + lcm = <0x2c>; + porch-param = [0c 0c 00 33 33]; + cmd2en-param = [5a 69 02 01]; + pwctrl1-param = [a4 a1]; + pvgam-param = [70 2C 2E 15 10 09 48 33 53 0B 19 18 20 25]; + nvgam-param = [70 2C 2E 15 10 09 48 33 53 0B 19 18 20 25]; + ram-param = [00 F0]; + rgb-param = [40 02 14]; + mipi-mode = "MIPI_DBI_MODE_SPI_4WIRE"; + }; + }; +}; + +&pinctrl { + spim2_default: spim2_default { + group1 { + pinmux = , + , + ; + }; + + group2 { + pinmux = ; + output-low; + }; + }; +}; + +&i2c0 { + max17048: max17048@36 { + compatible = "maxim,max17048"; + status = "disabled"; + reg = <0x36 >; + power-domains = <&i2c_reg>; + }; +}; diff --git a/boards/adafruit/feather_esp32s2/adafruit_feather_esp32s2_tft_reverse.yaml b/boards/adafruit/feather_esp32s2/adafruit_feather_esp32s2_tft_reverse.yaml new file mode 100644 index 0000000000000..f5c673e211bef --- /dev/null +++ b/boards/adafruit/feather_esp32s2/adafruit_feather_esp32s2_tft_reverse.yaml @@ -0,0 +1,22 @@ +identifier: adafruit_feather_esp32s2_tft_reverse/esp32s2 +name: Adafruit ESP32-S2 TFT Feather Reverse +type: mcu +arch: xtensa +toolchain: + - zephyr +supported: + - gpio + - uart + - i2c + - spi + - counter + - watchdog + - entropy + - pwm + - dma + - display + - fuel_gauge +vendor: adafruit +testing: + ignore_tags: + - bluetooth diff --git a/boards/adafruit/feather_esp32s2/adafruit_feather_esp32s2_tft_reverse_defconfig b/boards/adafruit/feather_esp32s2/adafruit_feather_esp32s2_tft_reverse_defconfig new file mode 100644 index 0000000000000..d8fbaa879257b --- /dev/null +++ b/boards/adafruit/feather_esp32s2/adafruit_feather_esp32s2_tft_reverse_defconfig @@ -0,0 +1,7 @@ +# SPDX-License-Identifier: Apache-2.0 + +CONFIG_CONSOLE=y +CONFIG_SERIAL=y +CONFIG_UART_CONSOLE=y +CONFIG_GPIO=y +CONFIG_CLOCK_CONTROL=y diff --git a/boards/adafruit/feather_esp32s2/board.c b/boards/adafruit/feather_esp32s2/board.c new file mode 100644 index 0000000000000..e7f65a4ba537a --- /dev/null +++ b/boards/adafruit/feather_esp32s2/board.c @@ -0,0 +1,28 @@ +/* + * Copyright (c) 2024 Leon Rinkel + * Copyright (c) 2025 Philipp Steiner + * + * SPDX-License-Identifier: Apache-2.0 + * + * Automatically turns on backlight if display is configured, i.e. display DT + * node has status okay. + */ + +#include +#include +#include + +#define DISPLAY_NODE DT_CHOSEN(zephyr_display) + +#if DT_NODE_HAS_STATUS(DISPLAY_NODE, okay) +static const struct gpio_dt_spec backlight = GPIO_DT_SPEC_GET(DT_ALIAS(backlight), gpios); +#endif + +void board_late_init_hook(void) +{ +#if DT_NODE_HAS_STATUS(DISPLAY_NODE, okay) + if (gpio_is_ready_dt(&backlight)) { + gpio_pin_configure_dt(&backlight, GPIO_OUTPUT_ACTIVE); + } +#endif +} diff --git a/boards/adafruit/feather_esp32s2/board.cmake b/boards/adafruit/feather_esp32s2/board.cmake new file mode 100644 index 0000000000000..2f04d1fe8861e --- /dev/null +++ b/boards/adafruit/feather_esp32s2/board.cmake @@ -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) diff --git a/boards/adafruit/feather_esp32s2/board.yml b/boards/adafruit/feather_esp32s2/board.yml new file mode 100644 index 0000000000000..fda3bf5e8556b --- /dev/null +++ b/boards/adafruit/feather_esp32s2/board.yml @@ -0,0 +1,22 @@ +boards: +- name: adafruit_feather_esp32s2 + full_name: Adafruit Feather ESP32S2 + vendor: adafruit + socs: + - name: esp32s2 + revision: + format: "letter" + default: "C" + revisions: + - name: "B" + - name: "C" +- name: adafruit_feather_esp32s2_tft + full_name: Adafruit Feather ESP32S2 TFT + vendor: adafruit + socs: + - name: esp32s2 +- name: adafruit_feather_esp32s2_tft_reverse + full_name: Adafruit Feather ESP32S2 TFT Reverse + vendor: adafruit + socs: + - name: esp32s2 diff --git a/boards/adafruit/feather_esp32s2/doc/adafruit_feather_esp32s2.rst b/boards/adafruit/feather_esp32s2/doc/adafruit_feather_esp32s2.rst new file mode 100644 index 0000000000000..b8bc0d90333cf --- /dev/null +++ b/boards/adafruit/feather_esp32s2/doc/adafruit_feather_esp32s2.rst @@ -0,0 +1,356 @@ +.. zephyr:board:: adafruit_feather_esp32s2 + +Overview +******** + +The Adafruit Feather ESP32-S2 boards are ESP32-S2 development boards in the +Feather standard layout, sharing peripheral placement with other devices labeled +as Feathers or FeatherWings. The board is equipped with an ESP32-S2 mini module, +a LiPo battery charger, a fuel gauge, a USB-C and `SparkFun Qwiic`_-compatible +`STEMMA QT`_ connector for the I2C bus. + +Hardware +******** + +- ESP32-S2 mini module, featuring the 240MHz Tensilica processor +- 320KB SRAM, 4MB flash + 2MB PSRAM +- USB-C directly connected to the ESP32-S2 for USB +- LiPo connector and built-in battery charging when powered via USB-C +- LC709203 or MAX17048 fuel gauge for battery voltage and state-of-charge reporting +- Built-in NeoPixel indicator RGB LED +- STEMMA QT connector for I2C devices, with switchable power for low-power mode + +.. note:: + + - The `Adafruit ESP32-S2 Feather with BME280 Sensor`_ is the same board as the + `Adafruit ESP32-S2 Feather`_ but with an already equipped BME280 Sensor, but is not + stated as a separate board, instead the BME280 needs to be added via a devicetree + overlay. All boards, except the `Adafruit ESP32-S2 Feather with BME280 Sensor`_ have a + space for it, but will not be shipped with. + - As of May 31, 2023 - Adafruit has changed the battery monitor chip from the + now-discontinued LC709203 to the MAX17048. Check the back silkscreen of your Feather to + see which chip you have. + - For the MAX17048 a driver in zephyr exists and is supported, but needs to be added via + a devicetree overlay. + - For the LC709203 a driver does'nt exists yet and the fuel gauge for boards with this IC + is not available. + - For the `Adafruit ESP32-S2 Feather`_ there are two different Revisions ``rev B`` and + ``rev C``. The ``rev C`` board has revised the power circuitry for the NeoPixel and I2C + QT port. Instead of a transistor the ``rev C`` has a LDO regulator. To enable the + NeoPixel and I2C QT port on ``rev B`` boards ``GPIO7`` (``i2c_reg``) needs to be set to + LOW and on ``rev C`` boards it needs to be set HIGH. + +Supported Features +================== + +.. zephyr:board-supported-hw:: + +.. note:: + USB-OTG is until now not supported see `ESP32 development overview`_. To see a serial output + a FTDI-USB-RS232 or similar needs to be connected to the RX/TX pins on the feather connector. + +Connections and IOs +=================== + +The `Adafruit ESP32-S2 Feather`_ User Guide has detailed information about the board including +pinouts and the schematic. + +- `Adafruit ESP32-S2 Feather Pinouts`_ +- `Adafruit ESP32-S2 Feather Schematic`_ + +Programming and Debugging +************************* + +Prerequisites +============= + +Espressif HAL requires WiFi binary blobs in order work. Run the command below +to retrieve those files. + +.. code-block:: console + + west update + west blobs fetch hal_espressif + +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 built (and flashed) 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: + +**Rev B** + +.. zephyr-app-commands:: + :zephyr-app: samples/hello_world + :board: adafruit_feather_esp32s2@B + :goals: build + :west-args: --sysbuild + :compact: + +**Rev C** + +.. zephyr-app-commands:: + :zephyr-app: samples/hello_world + :board: adafruit_feather_esp32s2@C + :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 built 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: + +**Rev B** + +.. zephyr-app-commands:: + :zephyr-app: samples/hello_world + :board: adafruit_feather_esp32s2@B + :goals: build + +**Rev C** + +.. zephyr-app-commands:: + :zephyr-app: samples/hello_world + :board: adafruit_feather_esp32s2@C + :goals: build + +The usual ``flash`` target will work. Here is an example for the :zephyr:code-sample:`hello_world` +application. + +To enter ROM bootloader mode, hold down ``boot-button`` while clicking reset button. +When in the ROM bootloader, you can upload code and query the chip using ``west flash``. + + +**Rev B** + + .. zephyr-app-commands:: + :zephyr-app: samples/hello_world + :board: adafruit_feather_esp32s2@B + :goals: flash + +**Rev C** + + .. zephyr-app-commands:: + :zephyr-app: samples/hello_world + :board: adafruit_feather_esp32s2@C + :goals: flash + +After the flashing you will receive most likely this Error: + +.. code-block:: console + + WARNING: ESP32-S2FNR2 (revision v0.0) chip was placed into download mode using GPIO0. + esptool.py can not exit the download mode over USB. To run the app, reset the chip manually. + To suppress this note, set --after option to 'no_reset'. + FATAL ERROR: command exited with status 1: ... + +As stated in the Warning-Message ``esptool`` can't reset the board by itself and this message +can be ignored and the board needs to be reseted via the Reset-Button manually. + +Open the serial monitor using the following command: + +.. code-block:: shell + + west espressif monitor + +After the board has been manually reseted and booted, you should see the following +message in the monitor: + +.. code-block:: console + + ***** Booting Zephyr OS vx.x.x-xxx-gxxxxxxxxxxxx ***** + Hello World! adafruit_feather_esp32s2 + +Debugging +********* + +ESP32-S2 support on OpenOCD is available at `OpenOCD`_. + +ESP32-S2 has a built-in JTAG circuitry and can be debugged without any +additional chip. Only an USB cable connected to the D+/D- pins is necessary. + +Further documentation can be obtained from the SoC vendor +in `JTAG debugging for ESP32-S2`_. + +You can debug an application in the usual way. Here is an example for +the :zephyr:code-sample:`hello_world` application. + +**Rev B** + +.. zephyr-app-commands:: + :zephyr-app: samples/hello_world + :board: adafruit_feather_esp32s2@B + :goals: debug + +**Rev C** + +.. zephyr-app-commands:: + :zephyr-app: samples/hello_world + :board: adafruit_feather_esp32s2@C + :goals: debug + +Testing the On-Board-LED +************************ + +There is a sample available to verify that the LEDs on the board are +functioning correctly with Zephyr: + +**Rev B** + +.. zephyr-app-commands:: + :zephyr-app: samples/basic/blinky + :board: adafruit_feather_esp32s2@B + :goals: build flash + +**Rev C** + +.. zephyr-app-commands:: + :zephyr-app: samples/basic/blinky + :board: adafruit_feather_esp32s2@C + :goals: build flash + +Testing the NeoPixel +******************** + +There is a sample available to verify that the NeoPixel on the board are +functioning correctly with Zephyr: + +**Rev B** + + .. zephyr-app-commands:: + :zephyr-app: samples/drivers/led/led_strip + :board: adafruit_feather_esp32s2@B + :goals: build flash + +**Rev C** + + .. zephyr-app-commands:: + :zephyr-app: samples/drivers/led/led_strip + :board: adafruit_feather_esp32s2@C + :goals: build flash + +Testing the Fuel Gauge (MAX17048) +********************************* + +There is a sample available to verify that the MAX17048 fuel gauge on the board are +functioning correctly with Zephyr: + +.. note:: + As of May 31, 2023 Adafruit changed the battery monitor chip from the now-discontinued LC709203 + to the MAX17048. + +.. zephyr-app-commands:: + :zephyr-app: samples/fuel_gauge/max17048/ + :board: adafruit_feather_esp32s2@C + :goals: build flash + +Testing Wi-Fi +************* + +There is a sample available to verify that the Wi-Fi on the board are +functioning correctly with Zephyr: + +.. note:: + The Prerequisites must be met before testing Wi-Fi. + +**Rev B** + + .. zephyr-app-commands:: + :zephyr-app: samples/net/wifi/shell + :board: adafruit_feather_esp32s2@B + :goals: build flash + +**Rev C** + + .. zephyr-app-commands:: + :zephyr-app: samples/net/wifi/shell + :board: adafruit_feather_esp32s2@C + :goals: build flash + +References +********** + +.. target-notes:: + +.. _`Adafruit ESP32-S2 Feather`: https://www.adafruit.com/product/5000 +.. _`Adafruit ESP32-S2 Feather with BME280 Sensor`: https://www.adafruit.com/product/5303 +.. _`OpenOCD`: https://github.com/openocd-org/openocd +.. _`ESP32 development overview`: https://github.com/zephyrproject-rtos/zephyr/issues/29394#issuecomment-2635037831 +.. _`Adafruit ESP32-S2 Feather Pinouts`: https://learn.adafruit.com/adafruit-esp32-s2-feather/pinouts +.. _`Adafruit ESP32-S2 Feather Schematic`: https://learn.adafruit.com/adafruit-esp32-s2-feather/downloads +.. _`SparkFun Qwiic`: https://www.sparkfun.com/qwiic +.. _`STEMMA QT`: https://learn.adafruit.com/introducing-adafruit-stemma-qt +.. _`JTAG debugging for ESP32-S2`: https://docs.espressif.com/projects/esp-idf/en/stable/esp32s2/api-guides/jtag-debugging/index.html diff --git a/boards/adafruit/feather_esp32s2/doc/adafruit_feather_esp32s2_tft.rst b/boards/adafruit/feather_esp32s2/doc/adafruit_feather_esp32s2_tft.rst new file mode 100644 index 0000000000000..963ff82634588 --- /dev/null +++ b/boards/adafruit/feather_esp32s2/doc/adafruit_feather_esp32s2_tft.rst @@ -0,0 +1,294 @@ +.. zephyr:board:: adafruit_feather_esp32s2_tft + +Overview +******** + +The Adafruit Feather ESP32-S2 boards are ESP32-S2 development boards in the +Feather standard layout, sharing peripheral placement with other devices labeled +as Feathers or FeatherWings. The board is equipped with an ESP32-S2 mini module, +a LiPo battery charger, a fuel gauge, a USB-C and `SparkFun Qwiic`_-compatible +`STEMMA QT`_ connector for the I2C bus. + +Hardware +******** + +- ESP32-S2 mini module, featuring the 240MHz Tensilica processor +- 320KB SRAM, 4MB flash + 2MB PSRAM +- USB-C directly connected to the ESP32-S2 for USB +- LiPo connector and built-in battery charging when powered via USB-C +- LC709203 or MAX17048 fuel gauge for battery voltage and state-of-charge reporting +- Charging indicator LED, user LED, reset and boot buttons. +- Built-in NeoPixel indicator RGB LED +- STEMMA QT connector for I2C devices, with switchable power for low-power mode +- 240x135 pixel IPS TFT color display with 1.14" diagonal and ST7789 chipset + +.. note:: + + - The board has a space for a BME280, but will not be shipped with. + - As of May 31, 2023 - Adafruit has changed the battery monitor chip from the + now-discontinued LC709203 to the MAX17048. Check the back silkscreen of your Feather to + see which chip you have. + - For the MAX17048 a driver in zephyr exists and is supported, but needs to be added via + a devicetree overlay. + - For the LC709203 a driver does'nt exists yet and the fuel gauge for boards with this IC + is not available. + +Supported Features +================== + +.. zephyr:board-supported-hw:: + +.. note:: + USB-OTG is until now not supported see `ESP32 development overview`_. To see a serial output + a FTDI-USB-RS232 or similar needs to be connected to the RX/TX pins on the feather connector. + +Connections and IOs +=================== + +The `Adafruit ESP32-S2 TFT Feather`_ User Guide has detailed information about the board including +pinouts and the schematic. + +- `Adafruit ESP32-S2 TFT Feather Pinouts`_ +- `Adafruit ESP32-S2 TFT Feather Schematic`_ + +Programming and Debugging +************************* + +Prerequisites +============= + +Espressif HAL requires WiFi binary blobs in order work. Run the command below +to retrieve those files. + +.. code-block:: console + + west update + west blobs fetch hal_espressif + +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 built (and flashed) 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:: + :zephyr-app: samples/hello_world + :board: adafruit_feather_esp32s2_tft + :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 built 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: + +.. zephyr-app-commands:: + :zephyr-app: samples/hello_world + :board: adafruit_feather_esp32s2_tft + :goals: build + +The usual ``flash`` target will work. Here is an example for the :zephyr:code-sample:`hello_world` +application. + +To enter ROM bootloader mode, hold down ``boot-button`` while clicking reset button. +When in the ROM bootloader, you can upload code and query the chip using ``west flash``. + +.. zephyr-app-commands:: + :zephyr-app: samples/hello_world + :board: adafruit_feather_esp32s2_tft + :goals: flash + +After the flashing you will receive most likely this Error: + +.. code-block:: console + + WARNING: ESP32-S2FNR2 (revision v0.0) chip was placed into download mode using GPIO0. + esptool.py can not exit the download mode over USB. To run the app, reset the chip manually. + To suppress this note, set --after option to 'no_reset'. + FATAL ERROR: command exited with status 1: ... + +As stated in the Warning-Message ``esptool`` can't reset the board by itself and this message +can be ignored and the board needs to be reseted via the Reset-Button manually. + +Open the serial monitor using the following command: + +.. code-block:: shell + + west espressif monitor + +After the board has been manually reseted and booted, you should see the following +message in the monitor: + +.. code-block:: console + + ***** Booting Zephyr OS vx.x.x-xxx-gxxxxxxxxxxxx ***** + Hello World! adafruit_feather_esp32s2_tft + +Debugging +********* + +ESP32-S2 support on OpenOCD is available at `OpenOCD`_. + +ESP32-S2 has a built-in JTAG circuitry and can be debugged without any +additional chip. Only an USB cable connected to the D+/D- pins is necessary. + +Further documentation can be obtained from the SoC vendor +in `JTAG debugging for ESP32-S2`_. + +You can debug an application in the usual way. Here is an example for +the :zephyr:code-sample:`hello_world` application. + +.. zephyr-app-commands:: + :zephyr-app: samples/hello_world + :board: adafruit_feather_esp32s2_tft + :goals: debug + +Testing the On-Board-LED +************************ + +There is a sample available to verify that the LEDs on the board are +functioning correctly with Zephyr: + +.. zephyr-app-commands:: + :zephyr-app: samples/basic/blinky + :board: adafruit_feather_esp32s2_tft + :goals: build flash + +Testing the NeoPixel +******************** + +There is a sample available to verify that the NeoPixel on the board are +functioning correctly with Zephyr: + +.. zephyr-app-commands:: + :zephyr-app: samples/drivers/led/led_strip + :board: adafruit_feather_esp32s2_tft + :goals: build flash + +Testing the TFT +*************** + +.. note:: + To activate the backlight of the display ``GPIO45`` (``backlight``) needs to be set to HIGH. + This will be done automatically via ``board_late_init_hook()``. + +.. zephyr-app-commands:: + :zephyr-app: samples/subsys/display/lvgl + :board: adafruit_feather_esp32s2_tft + :goals: build flash + +Testing the Fuel Gauge (MAX17048) +********************************* + +There is a sample available to verify that the MAX17048 fuel gauge on the board are +functioning correctly with Zephyr: + +.. note:: + As of May 31, 2023 Adafruit changed the battery monitor chip from the now-discontinued LC709203 + to the MAX17048. + +.. zephyr-app-commands:: + :zephyr-app: samples/fuel_gauge/max17048/ + :board: adafruit_feather_esp32s2_tft + :goals: build flash + +Testing Wi-Fi +************* + +There is a sample available to verify that the Wi-Fi on the board are +functioning correctly with Zephyr: + +.. note:: + The Prerequisites must be met before testing Wi-Fi. + +.. zephyr-app-commands:: + :zephyr-app: samples/net/wifi/shell + :board: adafruit_feather_esp32s2_tft + :goals: build flash + +References +********** + +.. target-notes:: + +.. _`Adafruit ESP32-S2 TFT Feather`: https://www.adafruit.com/product/5300 +.. _`OpenOCD`: https://github.com/openocd-org/openocd +.. _`ESP32 development overview`: https://github.com/zephyrproject-rtos/zephyr/issues/29394#issuecomment-2635037831 +.. _`Adafruit ESP32-S2 TFT Feather Pinouts`: https://learn.adafruit.com/adafruit-esp32-s2-tft-feather/pinouts +.. _`Adafruit ESP32-S2 TFT Feather Schematic`: https://learn.adafruit.com/adafruit-esp32-s2-tft-feather/downloads +.. _`SparkFun Qwiic`: https://www.sparkfun.com/qwiic +.. _`STEMMA QT`: https://learn.adafruit.com/introducing-adafruit-stemma-qt +.. _`JTAG debugging for ESP32-S2`: https://docs.espressif.com/projects/esp-idf/en/stable/esp32s2/api-guides/jtag-debugging/index.html diff --git a/boards/adafruit/feather_esp32s2/doc/adafruit_feather_esp32s2_tft_reverse.rst b/boards/adafruit/feather_esp32s2/doc/adafruit_feather_esp32s2_tft_reverse.rst new file mode 100644 index 0000000000000..3a7bc541c61fd --- /dev/null +++ b/boards/adafruit/feather_esp32s2/doc/adafruit_feather_esp32s2_tft_reverse.rst @@ -0,0 +1,291 @@ +.. zephyr:board:: adafruit_feather_esp32s2_tft_reverse + +Overview +******** + +The Adafruit Feather ESP32-S2 boards are ESP32-S2 development boards in the +Feather standard layout, sharing peripheral placement with other devices labeled +as Feathers or FeatherWings. The board is equipped with an ESP32-S2 mini module, +a LiPo battery charger, a fuel gauge, a USB-C and `SparkFun Qwiic`_-compatible +`STEMMA QT`_ connector for the I2C bus. + +Hardware +******** + +- ESP32-S2 mini module, featuring the 240MHz Tensilica processor +- 320KB SRAM, 4MB flash + 2MB PSRAM +- USB-C directly connected to the ESP32-S2 for USB +- LiPo connector and built-in battery charging when powered via USB-C +- LC709203 or MAX17048 fuel gauge for battery voltage and state-of-charge reporting +- Charging indicator LED, user LED, reset and boot buttons and has 2 additional buttons. +- Built-in NeoPixel indicator RGB LED +- 240x135 pixel IPS TFT color display with 1.14" diagonal and ST7789 chipset. + +.. note:: + + - The board has a space for a BME280, but will not be shipped with. + - For the MAX17048 a driver in zephyr exists and is supported, but needs to be added via + a devicetree overlay. + +Supported Features +================== + +.. zephyr:board-supported-hw:: + +.. note:: + USB-OTG is until now not supported see `ESP32 development overview`_. To see a serial output + a FTDI-USB-RS232 or similar needs to be connected to the RX/TX pins on the feather connector. + +Connections and IOs +=================== + +The `Adafruit ESP32-S2 Reverse TFT Feather`_ User Guide has detailed information about the board +including pinouts and the schematic. + +- `Adafruit ESP32-S2 Reverse TFT Feather Pinouts`_ +- `Adafruit ESP32-S2 Reverse TFT Feather Schematic`_ + +Programming and Debugging +************************* + +Prerequisites +============= + +Espressif HAL requires WiFi binary blobs in order work. Run the command below +to retrieve those files. + +.. code-block:: console + + west update + west blobs fetch hal_espressif + +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 built (and flashed) 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:: + :zephyr-app: samples/hello_world + :board: adafruit_feather_esp32s2_tft_reverse + :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 built 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: + +.. zephyr-app-commands:: + :zephyr-app: samples/hello_world + :board: adafruit_feather_esp32s2_tft_reverse + :goals: build + +The usual ``flash`` target will work. Here is an example for the :zephyr:code-sample:`hello_world` +application. + +To enter ROM bootloader mode, hold down ``boot-button`` while clicking reset button. +When in the ROM bootloader, you can upload code and query the chip using ``west flash``. + +.. zephyr-app-commands:: + :zephyr-app: samples/hello_world + :board: adafruit_feather_esp32s2_tft_reverse + :goals: flash + +After the flashing you will receive most likely this Error: + +.. code-block:: console + + WARNING: ESP32-S2FNR2 (revision v0.0) chip was placed into download mode using GPIO0. + esptool.py can not exit the download mode over USB. To run the app, reset the chip manually. + To suppress this note, set --after option to 'no_reset'. + FATAL ERROR: command exited with status 1: ... + +As stated in the Warning-Message ``esptool`` can't reset the board by itself and this message +can be ignored and the board needs to be reseted via the Reset-Button manually. + +Open the serial monitor using the following command: + +.. code-block:: shell + + west espressif monitor + +After the board has been manually reseted and booted, you should see the following +message in the monitor: + +.. code-block:: console + + ***** Booting Zephyr OS vx.x.x-xxx-gxxxxxxxxxxxx ***** + Hello World! adafruit_feather_esp32s2_tft_reverse + +Debugging +********* + +ESP32-S2 support on OpenOCD is available at `OpenOCD`_. + +ESP32-S2 has a built-in JTAG circuitry and can be debugged without any +additional chip. Only an USB cable connected to the D+/D- pins is necessary. + +Further documentation can be obtained from the SoC vendor +in `JTAG debugging for ESP32-S2`_. + +You can debug an application in the usual way. Here is an example for +the :zephyr:code-sample:`hello_world` application. + +.. zephyr-app-commands:: + :zephyr-app: samples/hello_world + :board: adafruit_feather_esp32s2_tft_reverse + :goals: debug + +Testing the On-Board-LED +************************ + +There is a sample available to verify that the LEDs on the board are +functioning correctly with Zephyr: + +.. zephyr-app-commands:: + :zephyr-app: samples/basic/blinky + :board: adafruit_feather_esp32s2_tft_reverse + :goals: build flash + +Testing the NeoPixel +******************** + +There is a sample available to verify that the NeoPixel on the board are +functioning correctly with Zephyr: + +.. zephyr-app-commands:: + :zephyr-app: samples/drivers/led/led_strip + :board: adafruit_feather_esp32s2_tft_reverse + :goals: build flash + +Testing the TFT +*************** + +There is a sample available to verify that the TFT on the board are +functioning correctly with Zephyr: + +.. note:: + To activated the backlight of the display ``GPIO45`` (``backlight``) needs to be set to HIGH. + This will be done automatically via ``board_late_init_hook()``. + +.. zephyr-app-commands:: + :zephyr-app: samples/subsys/display/lvgl + :board: adafruit_feather_esp32s2_tft_reverse + :goals: build flash + +Testing the Fuel Gauge (MAX17048) +********************************* + +There is a sample available to verify that the MAX17048 fuel gauge on the board are +functioning correctly with Zephyr: + +.. note:: + As of May 31, 2023 Adafruit changed the battery monitor chip from the now-discontinued LC709203 + to the MAX17048. + +.. zephyr-app-commands:: + :zephyr-app: samples/fuel_gauge/max17048/ + :board: adafruit_feather_esp32s2_tft_reverse + :goals: build flash + +Testing Wi-Fi +************* + +There is a sample available to verify that the Wi-Fi on the board are +functioning correctly with Zephyr: + +.. note:: + The Prerequisites must be met before testing Wi-Fi. + +.. zephyr-app-commands:: + :zephyr-app: samples/net/wifi/shell + :board: adafruit_feather_esp32s2_tft_reverse + :goals: build flash + +References +********** + +.. target-notes:: + +.. _`Adafruit ESP32-S2 Reverse TFT Feather`: https://www.adafruit.com/product/5345 +.. _`OpenOCD`: https://github.com/openocd-org/openocd +.. _`ESP32 development overview`: https://github.com/zephyrproject-rtos/zephyr/issues/29394#issuecomment-2635037831 +.. _`Adafruit ESP32-S2 Reverse TFT Feather Pinouts`: https://learn.adafruit.com/esp32-s2-reverse-tft-feather/pinouts +.. _`Adafruit ESP32-S2 Reverse TFT Feather Schematic`: https://learn.adafruit.com/esp32-s2-reverse-tft-feather/downloads +.. _`SparkFun Qwiic`: https://www.sparkfun.com/qwiic +.. _`STEMMA QT`: https://learn.adafruit.com/introducing-adafruit-stemma-qt +.. _`JTAG debugging for ESP32-S2`: https://docs.espressif.com/projects/esp-idf/en/stable/esp32s2/api-guides/jtag-debugging/index.html diff --git a/boards/adafruit/feather_esp32s2/doc/img/adafruit_feather_esp32s2.webp b/boards/adafruit/feather_esp32s2/doc/img/adafruit_feather_esp32s2.webp new file mode 100644 index 0000000000000000000000000000000000000000..b63d6c73977c668e6cc82562cb18507211e2f1fc GIT binary patch literal 45574 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 z z99N}jMP)K#j_0yFi*An!l&;@&vQ|aP1W4U&BJdL~G(m6%V`m`ffPmH! z@wY4ERIGuIyC;PJj{vdVO4lYV%Nq_r2y9PeQ2FVtYHB$iv6qG#%3G_cEZ@W}L(>S` z%FS)PEEYHkVjVYNG5Zyrr#EPuUa0oaI%eArD0EJpI(iq-@ZK~Om=-Uh_m^-ZaQaXG z>Ama0$Cqdh1JR%B0v?{Plxk=g1rW+sGvJTd_W+^N#N0+%2jF%pYAeITZ`S!0qd-pk z=wZij7w}5;!jegQo_;B^%u?w9Fg)&sn(E>N-Cchf#XnWeyoyo7d^%K^q(nITaozwl ze?cI)(#$z!)pxB?%xI(w^1VqOCNvq}t@)0I$u z2U3G~hfC!UZ~ERogLh~SR%>Mw;mN$1=R9=A0-1buSr9b2+)ZB;`LZjG_dI4HsN}u2 z=f(Z+?n%)zAqBO$#A55gfL`pq4=9(N9@d=YCjwz0ky} zx?)D&d~=Yh7qf)=$zQ!z;!BG`c508#NEv2y#e_^fMjxL$C|dWoOfD`pxMd^) zn%g8q0rXFj7G#6<*cCZ>_83c^0x{L=+1I2Vhq1NeA5Dr)xX7ilMKvlB-MJVJ#vjdU!SNWh;fMFH7T>Ap}ZjhdbP)?4VEC7l^z84 z?3m|j@lvZaIkpf73R*RFpjTh*o!9+B1y2%Ut-k3cX-BhevM&xX*$|owo^KhmTqJf7 zr>7{;JwDs7ysq|ncmq(oLzZhDF+e26)C{7AYo5NwgMotMH|G#ns^wVD%mWmve6N9u zjyk?%@>?cMK06$w$*+c5yq+y5+gV}mO{x-BmRfo``Z3SSTgS9gz5foVf2FHI85;A* z5@PJr`%^F~pn6D^=_QOxPssRuX+%%oIj6J?V*KDJ=!0|T0WE+;|M#!Y!52qhdHyW} zZJi!Atjgzp%YykXq(ltoVPV4&5;z$boLw@?pD;FTu40Rqgqj$!$*ta#v81K#kJhsm zroGoKw^cA&*EPoN{2~Ks9&-gKH<$l{q(5(_7=@SH-0{8D_c&GfJ?@1GBtD%W*!|df z_cz&dyr~*wptZi}iGOtDL2_S&*nIDUcwM}52;CiFhNy@lEk}NAtw!5b>{PvQtC|U> z+EUvdvly)=p-p_+O$YG*>DVNisPKW3_A-doWc!N>K0`ghN`uT*s&Re?dZaZXWU{Oa zUA4dPrsT*BW$@#9Wkz2NbDQp0@aDTtttHQ*9Nft+zpTJmA1iaGWT{Ca#r3=4eXrKq zl}K5C(+5Do5?pXVfKSvu8>{tx#|@iD+MuxTCF8PzxzBV=E#z=QlGD6+18mzo$+i%n5;WpdR<_6q8q!WqdY|r(9u~R z$3BTboLjJ#C8uGsN^1(f9df57_uhH}g*7T~)_q&MUUD>nB^R3%1N%61!2fn43v}?U zH$X(m;XYNHn6 zlJ}`&Ip)`SJsY|`6i{J?-*x!OXU& zC;LdKSl$f4j@CUxg#F$sUE~KLhC7@lSI9$uFyew*CqZms&`1?xhK_l0i$&9y7>@_* z*cM-sv9Z^F(5HL<(Dqo0MG`C?iwr;63G9R0s+HSS-C>2|#k8ZcyEj+82S~oeHnTR* zy3KAnp@PebmeBcyxs5^NdJVJA`zrGVgo(#2szM2NNI}*D!Tfw%@V2j~617mjd#}Lr z(U*>0W3C5NqJjn$laKe?$m=U;f@w1F!%8rQSpu#0C&;MVb{~HGZ}bV51^4>Q9mP4{ zzvrmV3_H;}PjoQ>5b4NxMgs~@jaV$Cw?7=sJjM1pnU1zMs?GUKkaS4r_M#5GUZAhN zVTi*gr|iDXRW2|0P5z6~=S77An`}=RTf%6&qW1-j$leEEt0orUuI~0`!Tk368H3UQg*80}c1|$VyQwE-Z~Q*+?HMt6ksQffVeQh<^nTp) z)mS`O%+B0+b$wL4(ZgkKgM&+iw_g*QrxKm6Afe%BBL#|j<_uXftMSO~CHwB&xEFaY zwU5viv6osQNbNW$sJ0M)j1imE;6MM)T`Sk{{%0F5W8)!@Gm%vv4u^Tv8FBE z*>Ana{ozdQ+W}sUR7De&BV~K;S$<0@;MIFy3-AeLrk#hvPN_bl9cFP=)g<#_je_1e zT0MQ(ud?f+sY+A-oYtVs2s1 zfKimp=^gYTHOi>bT1$MqAk7?LLqbBhZ**}7Bfe>vVUifB!&o0{f(>S`FBR@IWPZ`V z8j%2~>vOs?_{!B?a4 zybSZk`y94H$ga0GJg%aAjGr8yZZ~4CC=>K%XT_JTy1?&3Qpp_k{d+);L!_hjl zixMoWhV2_1t>Ki9sV$J-!_ErhJGPQ3s z-NjQJdUw@b61pMKa_K?4W;9u2U)<@Fz8Ys=S$D$R@J;o&mC=ZNSmxousTO)OZr^S= zw*ZdBW*7d#w9B3cBECRu0#Tij3Ixx}7VhD!w!G4iUL0g!rK6u%fnP)$M&)~=dc4`> zcAQiEkG_tp)Djl4rOx~jNPkKS&HHIO*RY89Ytu748+z(uCRdQ;hf3_zKA}~S#VJXz zAJ%h^=&*|E5?7hSBq&k@Dc#`D^r5ooiKtTGhsu$`fTY!A{P z(&}5`G;UDi_#G+P^)M>iI%7D!a|v>|dZ3o|2(|kq#2_mLp7$c!!UZC;1Hcf>^oxs{x;oE~xAxU>ghbhUSBT zH#36Lkg!_0w|>=SIahhT`0}EO^7u^2&QFDBv!`lqaSy%=?x;R=UGN#6lgln`JMF4_ zSOu{SLMbP(-~6Xz+aX)pQ#zRwp-Mb+sPB1+wVtq6t{rDor5~5nO;2amt?b`?<)}2# zveVyK4W95@lbo{YWW>N-*z1s+K(|Hq9BTy}8DN5U^&22077mXpLTU8ma}9(~Y7`e( zdmc7y^FGPX)1n(W?f1DXv@;R;Owh=>Y+L?Cy0lKcVY6VH^eVTUIx|_4S|jhu!;v;2 zlXrGz*hqF&1W)PsF>CH#BJy+uEnXN!iC|YFC3VG+H6e&kzR>b7t4Xd!VX+KDCu;!y zdu~VwT`+u9O21bBbhO|7Q6vka_5FhVTwn(G<=D1woWdbNeQE=?g|H2ksUVZXz|vXM z3(vs0uf`3~x@5cHtDo>pAO(Y3M$uDg+zIL63jEwZOK;8@P4sXQmyAu(X?4Lpc18M^ zRs`Su*5YCLrnE^QYN}OvEj-Uv{!FL0R`@)btS^pd&(2bZoy5KsxHsa2|je3jxkdZ3#;^ixJR zhG@@C`W5vl%26=gh;vp*RPW&4PY;j4g46=6qF9)`kr|YKWbViF%+>i6 z(K1R>kzheX0?OvIPXJ-IJL3$Udt^)z8GSCL`|BOl1B;lO2P;w4C@C-RaL`Q# zI6j8fH>EslS>DgKcXjmZ9)bg_6R1HI3OitelOBMmmdK9ql{i&UkBt zQ7@>&dzMcq9?v7Nr}9S-0{Ze0e7wKeNPGih2LQz==kN_DNNMPWPmWVZGwVxAveKZ$ z5Q$b8%XMYD>|8lZqwj~(_y>&~%j#n3VT<-DGEY`c){hdC39-;2y;1LzPU>?meq1f& z1MxxPR9lNBD{C0hJY`oTLC#GZ+VW7nBSm z8B6-OPQK7Cqc^d!1_%^mB`PfD`MH17dQJ76ACi4|=x2rDcyQ&}eMaa=P8)k|U1CeN zXItC2-Sv@Z+dI2=^zu`RHx6MuXYYk2(+Gb#BlJ--bWD|Me}=^I5xP1f)yD&u*yrH_ z@0@eXhKl2D40*Ni0`zKazTEVrG*(=XJy58@QFKEQl;czbyBQM79vat(5!3@jhI+^2 z^!%OnTOCa7{ae-m&`?8nUO_^!C7bGGDy`R{r9IPEOrO2ZDtUHR(SWP~Gs$N2*cvU| z4AFSdU8W#!-=q~mIzqlR&AQ}S4m`tq!@kFzJ}Pg@#)hxisJb*l8GTl$qTH>HH3SfP ztA|P5TrUwUvd*-_HzIx-lC>&$w}oI6LbmVkGUeVs*GxH2Dn6FBMS=(pHF;-G+e4#M zLK^-CU%VAfx=V6FP)6HW0h%WHJX#@|xvaG)?`Qtp2OX)vWB&vz_R+-PH;>c1S`G;~!egIAS4X6Y`OVXDaYS;WFSX{uaw1tg)uY*O%6 zg@$r6^zLaF+T~Vu@5rjMdjU|e6KOndhRw^#@~sQ=bqTiMkfPB=sG@LwdprR=?Rio z4i=O`+;B6o-d$DudZhq)l9bKqYJ&mRrCSmi3=U=kxO6s;&)2m<6tG%+zES!Ruh%5I zb?VqO9HTRtg&oJDt-uDVymMzqu5-oWtNw^Upej$wnlsk`og*f1NI+ce0Z+lwT|c+s zfFI?-`H8rJrUB+n6w|Vtv+y9agq#y4*epUD&M)|d@t1l#T7ReATv{pY?mG7BaJi_ge{D(2D3v>EZb8iL!7PBD(#6 z>CgR=C^rG%b1>onkF01Zhc1KKhRI*Ju!1Z+7 zO_duAxn9rPFgdTL^S=NY0nco%q^`6T4r+%;Bj_e_A(Nh5vdac`8lS~+R3Q8 zjO2-tJP{mVjt^Z5dB5yp6{`D<8j`-gs}>c{xAu@>^S=^eJlJ*zy&M;~q#1Txdw2LG zI4&7k`e0G>lai?3laIG0v)2VQuFlRG06BXKF=KHz1RuWJ^_fWo@v0#KVBkm3>mIrW zl!O`x^PL8uG!4Sr>Cl=86(rvrf6PI%sxt&bvCdYOit(G~46pL70sUdLj!FLk20lJ- zf616v?D3vW!IvnlzkyWp7#SQQ64D1Jz8OV6M$OcPjK>o96;$)bleGh(9bIv#2s%DF zWMiEnk7x}!<{=NP;XUGj&Tkz@CM17MDS|bd63?T09kJLC^OBMpBU$V-P$VF`1s+O; z`g5EY0h%7-#u$fibGJO;*2iPz>O|9IFp?G6rt-x@-9VcY{m`Jrh_*6FNOfPAAUGg* zo*Ai)lH*6b-y)^{=Z8kOXn8mv!4)|Kv}VFQbZz99n9jZIxT+MtG%~ur&|>zzk`=gE z9BGZ+7M3$BN-R$H^TuUFvuuW8Vk{Y>)c{!NFd|@sO84==Dc_Q$=>eHz80zr`dvW5FI4<<|-Rfwvqbr z40auc-wYtnDP}RSMLWpsF;5^#>khhx_QU1)!=+X-wJt%h**=IJ^0AYTbMT`j$>YOs z)}rp6m&P9zQ}Y%D&o!YDU$dH9(lNOYT&EQ0*kLEdMKB^#o{Rhch`QqRXG+KtnnNd9 zuik|L-?M{8>~et?l0H7%siCP>x8&DJ3D%(ftU6NoZ5kbS$E0$?-){f97Ir!L3?eau zqW7@`SC%C|0kluaI)fXfamd^Awmz88H0V?cR0>o!+BDfX zx?}M4g|dSC#0h5fc&?@dVwVLw*4IM}&BBpLIM$#2gRyG&gg+U9dw0j| zG>J;*h!6Y$5(CgPOXz9Hs2hrq`_{pQot0GOY1oi!-cdr9yOn9&23K+oXKozQCqAJ1 zN`30_W|MbK1A+v*eh|~)7I9n-4$=hss6NA4BdQHXk_NFK23R(G5pMOKa_~qfeROTx9h&oF;m2o7v~oLFvCctOF$E5LJK{E}^gb%W zwaX!e>yo@U8hsSVIW&!J53J9;t?>U?&cQ03CZ@eQGNNZ#J=HC|#H_7Yp@gMoDC^GW zD;ENBrQSDFj%^MQ;HcWDQ0<{mZF&1=0ciGPd1hj3y$Eg-!r zox4Pm1nm>GfogWxy9-sm?uyc|(c6O(xJh5H51io=lct(fAYWVh?G~~mQ=K;TWWGvy zL@ihR=}hdMS385_Mu?<<&+?6|%L{icq3$faz;s0si9JuhsCawuHj*b^Q-c^}Cd@g7 zban1Zu|l;*6Z|v=bv#%x>-0bR^kB8keCdj4nU93l6d=zS$1H3Gv6&EEoVec%o7PZ( ze>Y1dM0A@{Y21GgU9OYybJ*?5Q_x$*W zNjmP`Rqsmb^EHO`H2U)@eyQf=y11tf^VspP7BLKm!m~LpypvDf9)NZ! ziC#77Ol)-MZLt3Zophk|K>)P>9%JpR0WSNF-?AMbX=#Qg^WCsN#TX8Lg08xo>IKy@ zf&5;VzR}8|g~mCxmOq3A%vusl+YqGXhx;RH`I<>@ns^n$psmGhxu=1Tx46Va$W;Mz z;8rOKO=x!EP3)HQYAU|bQk+JI##;{E=0z$`8s_50e!X1M*F`)+J3u?PpEtwqkJoby zXR|9wkWN7N*f-Psb0DDV_=H+Q{Bs{aueIgmt>a{oL1;Wb;)bV7c5&%UH8;n*xM^lV zg1%eBw0MJLRGMgh6VcsixS;s|H}HO@E#?i{X$~=2&9~4+#X7yoGDP zXIN=%5K*<7Oz>eM-i(jpT;z2|W7#`KI-0dHUh6=>m`HA+E=`|`#)9mv*o8Dyq8lZv zgY-oc)WP}J;FubA++C6OUwm{fVD=!}y*Fo-uF$X<2j4&$kHMW51K2%uh~|+kZ5A2B zFZ$0S3k-GoEf%2da+U5_YuRIQ&M1t#9UVjv~vCidni$I?OCM*Dw@n% zBu+TeJq3#S`0W0J`h@3Q%>}VF;Jj-}QMQ(l@=BuzQw9NaM20az!V~L5jOrEIOu(TM zz3o~nrWjNvkjTpAX!3jSm*V{hQh40MlUKHt{rr`WNNB@j3x_GEDSXq)GI9dPYaFjIm?_ z*mFTzWr;lhWWnxJMC?a{kmOway4DkIa(5Zf_$fzz0KZvK(3hREaaFsfydmo^p)SzF z57IUz<*<;%a`-8lGGy*ZeS`0aZQkFF0r8LaFY;iQ3a_s0`sA-9bAKNUpQ0Q(elK{Y zBr`Ea<^WZSOt$69{hW<EcKNH*f-7_p5d8q<03N4NmgNVz;=@RJ;{NKaJCVb#) z8!g@|Vr(d7GX=mAs9VFxI0QwX7EvHwH@mUYj|U}MDT_M=MS^g0>7n(g*^JA_$G=$# z4!DgxALg)t0p$ZxJ$bm|%u1iD3|xJr#uxJorRXUgF=E zLS_iGQ4U|O5I83p3+r-8`y#DU2Sr3)2LOP|=NTXlti#>3fjRLDfno9r_A*%zE1lH6 zhn~|9gwuW{OoPdPAP!cX5$TTkB*XwLexu5;fUM>wYQi_Hy9+VbWF1@I2;*2id<;Z| z1QCGvl9TR2#7c+7j;E_L_G`F|pU>pXxXw2pOMN;%_WGR z9|V;d#!I#!>Sq=bxE~L==4I515kihR-jth;mfL}dSK9Ixw={D+U|$wrcuis=DADTG@+=Rh;HZw@8KJ({WTv3bt0XVr z`bl0yB*1F+DmR7Ce%ouwZfQ#l166{lfcS6#2af^x!wm8^2v)hat&kQ)+!W{_|ibL{7tM8tze!yWLB-lsz>7ASZ0!Y z%UUHUXT`WHws0+(%c@mgQ78WHAg6)65hKKK6#ZI8CARmf!>Nj0cAPC8@utBOu?@cxxhRJ6GZNv#cGvG2psj0`GX| zMI}!ojNjZr=Cyve$$3D1?a^p6G-EWuF=;U?+FUd2DOA*Q&LqVbg&c=v4=|OdKTy5o zRH5$1RWuLNfywAj4@q^LSX>mJd;|eK#4hB_(J7f81R27C-1g0a@Ls?r_V9U24(ZGd}DX z4*C*ZTrWbcW#H5J}(V zq8L9`F zJ!O6cI>;^R0%S!yt$bx{<5EGgqZqZoM$zwwWhSE32hyxM56vMCJTo(#XF%PhqUQ=v z7F{Gw7yrP0jIw%1MMCg6OIVvhuw}O-_VHoLWo`0Z`MAvrEa|#cQ8E>d$&nUF@@qMXvCwjfsC=?{iQq=;q zS=JDHmAA&e3|w>@nZe!d<3y#^5G9)vF5Ja<7&>`LkfranSrHYeqQ#k!`(Vg4lio{S zQJMQvBIxd@3b#;XQlfw+Qfs9;V|s;;d{`D3et4V2Fm0rNkD~@e)k~dU{}pkPCwKUn z0PXk|CPe2-zMK4-&`=2m;#N%BGuP>PWVrTFb(eBHRc9SZ)?Ttx4+4)l`|8gd-}LwJwe`}oH8MK=k^qPK5QzmcB$vHU)xjO=^Q6ENvwHm@ z;AvZ<;?sfLmVmaf81(Jj$2-AJ@{wu8(HR9vrm1Dy5hq}#ZbUl3{_QWfT17S&rdewxqmJw=17$;#UGy)m&fJ9#+nQrFCYC!}ixR6BY* zmZ=54pDK=FKPY?B^>^NMOT=KJ%QGn_Z%QJ-)F{0AEsss5xF|$2B_b_BQDUKADsFoy zSG7d7IvxHqiSBoTIv7;mg_|sOkt{D8S-3Gvbq)wp#oUy|wUGq_nrLg#2AUt^BD-j- zw+DFp-=E5&W}1ON?nC${0D{RKD1f2Dn3qvOJiR*|keM5JA{w+Q${5{{jKt<>|2qe= z=G%2>%;MiXLq84ND#oKREsXpN0dC7!(zPgt9Q|51GxIbaSm@kpaj^H(my#7`T>xb& z$)G^PAd=^!!nGG2V3&Lm`C`Va1DakrutPmF>V3@|7Gk={1PS`c__RSr0^qBspFyLAp1GE`YGLT0~*@^t8U4H?4RKf|rjq(ty~PSi$6DG3mSNysG;2XUsBETN{D%d^!c@BV!4WwF$)i&Q=rh{QF-K&@jAYvOH1aK>voObPZy9s&`=Kd=;>TVQjf!U9e(&X zB*#_nQ)1TrQ_h45ePaG>f^!SNT{zbSfe$ma zOuhJAPZbKBMNs@ccmq=iPEb$|rv2Y*6s@TDe|R9_61FBQ2GPpkPG4wG)7HgP)Dv=$i7Tngj zI>Dj7S*@!UKLn=iBm3M#0MP<}>StQ05Q4NSVwkG2SimR4!9I)NDd|WOJ`OY{u$cuIjM0t#)&@=&{H=`ETGY+fSwkD2bjV&Z7Y;~kyCmbA*0 zwOhP0sd)_2X+Gzv%gO)1KzRFsUko^*HM-eE8zOuW-d#78$yVi09b>!4p!S2McV%P! zuB_8=UkB*>tp@N+ySavMyCsrmOyNqJih}4?Q5KeS&$(W-u6o16^QLJqW!NW0-Se0u zk6Q<90y`r<&&u0Y3V^bRlVUO$EhMa}QmH5H^_cWn zh#|MjaMj63;V`|Tx4v7r)p-B+0~*aYjqzJUqH=qrGD(=1|lD*{((F!Qidv_RsY=)<0!j`DYdbIwq#{fUedpW~ssaGVW z!f!9oz)PcA6D?A0Nx_(oT#UV-5Oiht)8t06%}k}8hwbz?@SW7%+Bhhk@)Q8=E<)Mk%xOtS#iQV+uM``gEuC{-CNH?XL z`OR2DQ}?S8_bzV(rxSs>cUn6>WZKvYJqq8@u`!@rk|h?@CgLRBd4YtTy>^Lsd>L1} zgq85^Y3!T%W~vr?Ki$lMnMmAa-iL+ZIgf`jpz- z#SKiS{p=yB8uH=_&PW8>(vRW#0%_hu!XXpwYInQ$0i~@x@RtXHDD4dPlA#24t82Y` zY9_nHOlSC<%hg*({JuyI^lji6+!RqUOWOjxA4axC5+yuubB1A$Z5RrnxvawjpquR} z{tL$IEYO)SF;WmU3&7<>!~>mblc-j`(hgG%_{`YvE*C?BNe6(vv!-Lr6u`@nG7^%Y z$AeSft|C zoLUDRtn}lU3+$xnPEg~P5I9!`$08}vPO$_2?G2eMv#_w3jEID_ga4$a5EJfAGz+nH z*v1S||7kHC&fR__oD`5#-rU7B9*43&UB<}HyDnWR471*=5v5%Z!AFqslKi_MpMh>m zn*Ir$W}-{gQa)rGe0i-X(^9aQDRshQJhh+CIT&@H2L0p)%fq+2Fd)dokb348q1M#M zJ<$kUbCXZUMm9!tU#iVLX`S+ktJE5Wa1q@O8azyD3zjCV8XJ-NEQmw#r>ll`urP?f z#(J%LA=~$D2FFI*Vjv=+>e%`3DK^y4s0}U{(w$fxCyycak>GOW2|7!9?&F+3)a)tl z+tHQ6bxwmKkSSOnl2-Y3uJ&V>oV|qfRD+No*4_?*fF`I>$ODdrdiY$#qf5|{ZPqbe zXZ(YPq0|d3`-4Dj&dlmC(;{lYj1xuQj(5NvOs!e#VMVqkVo{x(r(EoHLf(d-XdLfL z=_F#&`NSnjhM54rg=F85BF%1ex<6RTc3!c>L^s|;-{iT0>N-G1!}SG2v(?DDJPSo8 z-{h{j(ex$b@7DZZx{c6^YJ|^vpmTJ+j{F`s#i(eM;!3P3iwiFMDDLuA9p3XqhUfAh zWWjp~tyHGR`b8PL_SDgKgWE%-Ahr$>(7w(6P!ZrTz33|0a3t2cp6IG7`eoXhQ9>lP zS73sqJ1iR0b0U;*B>4t6Ha=zdgtY;g?Vn^|Qc(=PX(nH~SKOW=P6yF2O`P#;&);Uy2FdvhBMs-9Z_KHq~KqB`Y3bR$MZKcU~F7y_(vT*Q(H2m!WF&cb93Y^Y< zC*LefC)8Yf(O?wf)!+aNs9&!aU=rd)S#QA_r-^y!WvAig12g1vLGo}BrLm;{4@~L7 zn8+hP7-qn}I{+jiwKW4lyCXp`>370?=S7g3eB)at{@MIcFzS4UgoJgeUH>hZg=%|q z)M7rX_T#-*ii%U(Ii}8~eAJo{gKBCQL6GPf{6kTw*J)JjqMT0^`y-_{vaMwxn+@?$ zsIg>8qAv`T(0rui{|!)SKqqNadzzG+{cRZzU~&J=th?}l!SCCD_HYNBmE9uL3{Qgd zXQx4_Nk1eXm%D`csdMzmS@>8Xl(iEHXq0(C6s74)IeBq5KPFb{Py;C)gOgrAV4wfN z0+feh>!m_zvi_Sy>6Iyu{h>6eP9y2_7Ku9w4OY=k?iz|xdIY6mOlNzDG7G5T3Mp*j zmg6#ybV}NM>LOH-*&|(MB$THrk?AG9O6JMoVf|a*fwtWj_fKRY9h3}a)V(p`R*50~ zcZbx;o6A<|jG_$pE-?9)1cu}Y#N(9L>&j(bdsCJxJE`Dj(s&0Ha*Zj7TC?u=udBAr zG2jn7+Pk|-q;K~`S_VUmG*SF=I$S~={a*t%Oqz=}&}ojW3qbY7^weH!;y(@5(LIDv zSgIIG*^cT3|8XsZy4k`O0bzQ2&&L2&30k@Q{<{UIUI>>Qzi2Fe%bD-bv>+8$(y4bJ)OaEvpoIpE#H?n zJ-Ini+C_&-#7=0zWAwEb)E&7UjahvkSJ=1e;8b&d9Hf6q2{rLRX^J3NLLvj(5Sykh z*p=i=^wF#E?-VPJZCi=T2E!Crif6D6lo1ZeDm||)I|zasDCrW z6UJPq490a-5-Ni-H4Sjy-Abacon}EV*JV^fOzm~*CPJ1zizf-!7bZIfk9m)2!{Yx0 z6%!0WW!L*X68t=vL1~q(tQWX)Lol9gVx_4#p(Ul7D+yC>Ni5q1mN^`-928s%-+fQz zol0RR2C|MbdVs!#YeG*wG!3Q>!F5w4VcT}08~2QY7uV7bx%F31%3SK|-n%9|hfXqT zJ~oOx^6XVqq88NJXru;jFd-Zyj<#k}Sx=J`+tBmW3<@{NUJZ0#3%K8Y3z9_Uqq{bW7qLn>VnO# zGo<$*sZ$)FN}U3ege?gLHbdNje3IUnXPN|nzHv3xivLDfhWz=|Im+Nwb_nWx!f!Eh z0Pzf(m2DZ(Z^e)4@bw9dj+*)lgdze;e#ca;D~HnHRnvQnsiG@N5}bPgQJBA5Z#z4m z8dOerhWEgRn_QSHAGTpib~?sq%DTesar8N9)9=RVU@`BC{U^j{?y4Rw+7=xTke z;;!0msQmuTKfTS-rb2?uD^u&ycHFWa9}WYGlq0_{b?=o6?=WUAf~y{$!V1M#Nc$`| z!3^&1so|^Fu59wMCR|{LJburOQ#?-M|3XC-&p~qm%@tyOD_d2IX2h;fNO%2my8!j zHMsnwFc0#!zR90M0dPqQV~q~fFe(WLNqK|-LIGp`{qJkfs~bA0V8j2B3+U8|(v_9{ zNE`R}l5jq8XrVmuExA&cAtNggTS^3;{J0)!+%+~UBZ{V!6JzagN5#OFKlT6To^GX? zYKT!A;@i}Yp|oYD6%Y@E)Js@^x|kTEqrc8Tb|Dv1T+l4tqtB+^eC|Ph3K#$bV+@XT zKoAUUl9=Y)<>W#2;bwm+o5t7FHWwo3?skIFJUFiR@MvCl8+Po2{o@4@2+GJU+4E|R zOSW15-Pbr1=Lm3g#V3L0F)?Xcl?ut{cz(Hw(Ji4(Kr?jLhqz_^nQqNX7g0x`uRHjl zML;<|=3>;R_Q1nj3z7x7S2fSo49AseO4246v~IYVmo}Dz&R(IOE(n$v;#yb_&iI(g zw9~>Qd|c3X46=n|M~Fk?fLpZ-I_!)}TmZ`|`MsYRYHUpFE;C^_DwOZ~wS6ZIEB`|>UNs-T{4rnJh^Z;4Oedogt%TGkDI)C*T4WU_HjIj^7_7AvLkSGncIj2P#Q*_{FhpP zLa}nbRcY|U-+tleFwbHKES6TSt&qhw>@P-6`bzXk%)qWxzyAZzlND$Iq0-l}1l>h4 zNXD-vTjd%#Pb^Zn2w<<%Riu{BsNsvR>f^}nd;dwzM_Jr>sj`pEFB;T-T#2_upYIiL z9xG@L*aa55N0ykZ{((P0B7PgY>`=ihR524sHNYN-POzh-00f9t5>*g?5AwokpbRfg z3oJ+Rvha3pK?JzVVB>9hBUYX9IRFV`yGz;tO>r<^iOQvW;bZieW=DY7k+}wextR0( z;ZSFynXSGQ${YHP<>%tARb8v7wTjFIfF3e?ABJg$(@ZFMs(uDl4$gwaIF!VIkb7d=34paf7C14{(PNNZDZ!!mk z?CfikX`k`BO$RsQf?WsAD1Z6;63sV2x8qe+;WMKed4N*`PMxxN9ojaVOfgeOR~sJN zI^DWq%2|EvEWM@Q=L11sXWds_ZQGRp*;t8kug?Tj{T@@q=~x&zR}mN&@b|6NnsLRb zXZY9+pfn(eLd1_%4B>I$;9dJWGOiDd*7~#09JLpg;a_}=pov6QC-;oQH_a{_MXhla z1Y*7|?Swnk73$^Bp=II6#7k`E%M~Mh`*Q=Fe#Q7Sm7@VE+j$9DuU?lS>c11pqQ1IE zC_f=I1Y2=sFR7edo~fbB*e3Or^IVKl^D0`J?0F;RF|0IeF-eCIW|>fy0RH?m+8NsS z^7H!H4XYQ6F!$m>75bKE^Cc=@{MDE&FDI_|=GCz-vP)^ep>@>8VXGnA<8zNMhGZvh z!Hglk{qM&^jb3+Q&RMUSX9s0s$#!(>bR=|0q-^a^Dx}@YriMg4U!LSUJ3yb5PmA5{oeFF$XFz+dWbwHTK-j*fZdLV*o@g8>W1xJ zFhx@^yWTL1hk2P}*x<9xdOr(uKn|aXxu0{1vp9~AUnSoFpHRU#dfI&Cg{K5%a>BXs zN-9vJzW_V??Lixw8NE@7lCa{=L^XsJ3#soM#t?7cy6vo@%nF6x8XLb(P;2rRwB6ST zl>_KF1AVbhKJ2uSqn4EM0@cOB7zKI&$V{s`ps&I*c(YM{NSCnHC)H#iX4T>0PX=^E zO>gKEtyt6pkMq734zP(y-`NQ&wqGo%rq3H8z?rCPeW1CH;y%*gjyn8MPg#J

<$E9QdFUvExxdmO4T`KLE6)W!* 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�hJ76wwjpk-n_rj8eS@q30O&h76vFVh6Zn(Nc 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 Nqt6IjTT;0m literal 0 HcmV?d00001 diff --git a/boards/adafruit/feather_esp32s2/doc/img/adafruit_feather_esp32s2_tft_reverse.webp b/boards/adafruit/feather_esp32s2/doc/img/adafruit_feather_esp32s2_tft_reverse.webp new file mode 100644 index 0000000000000000000000000000000000000000..8b607c89f858fcc25d4ca68a4788c09aeaeda479 GIT binary patch literal 27636 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Ξ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 literal 0 HcmV?d00001 diff --git a/boards/adafruit/feather_esp32s2/feather_connector.dtsi b/boards/adafruit/feather_esp32s2/feather_connector.dtsi new file mode 100644 index 0000000000000..8414fbbfb106c --- /dev/null +++ b/boards/adafruit/feather_esp32s2/feather_connector.dtsi @@ -0,0 +1,42 @@ +/* + * Copyright (c) 2020 Richard Osterloh + * Copyright (c) 2024 Leon Rinkel + * Copyright (c) 2025 Philipp Steiner + * + * SPDX-License-Identifier: Apache-2.0 + */ + +/ { + feather_header: connector { + compatible = "adafruit-feather-header"; + #gpio-cells = <2>; + gpio-map-mask = <0xffffffff 0xffffffc0>; + gpio-map-pass-thru = <0 0x3f>; + gpio-map = + <0 0 &gpio0 18 0>, /* A0 */ + <1 0 &gpio0 17 0>, /* A1 */ + <2 0 &gpio0 16 0>, /* A2 */ + <3 0 &gpio0 15 0>, /* A3 */ + <4 0 &gpio0 14 0>, /* A4 */ + <5 0 &gpio0 8 0>, /* A5 */ + <6 0 &gpio1 36 0>, /* SCK */ + <7 0 &gpio1 35 0>, /* MOSI */ + <8 0 &gpio1 37 0>, /* MISO */ + <9 0 &gpio1 38 0>, /* RX */ + <10 0 &gpio1 39 0>, /* TX */ + <11 0 &gpio1 43 0>, /* DB */ + <12 0 &gpio1 3 0>, /* SDA */ + <13 0 &gpio1 4 0>, /* SCL */ + <14 0 &gpio0 5 0>, /* D5 */ + <15 0 &gpio0 6 0>, /* D6 */ + <16 0 &gpio0 9 0>, /* D9 */ + <17 0 &gpio0 10 0>, /* D10 */ + <18 0 &gpio0 11 0>, /* D11 */ + <19 0 &gpio0 12 0>, /* D12 */ + <20 0 &gpio0 13 0>; /* D13 */ + }; +}; + +feather_serial: &uart1 {}; +feather_i2c: &i2c0 {}; +feather_spi: &spi2 {}; diff --git a/boards/adafruit/feather_esp32s2/feather_connector_tft.dtsi b/boards/adafruit/feather_esp32s2/feather_connector_tft.dtsi new file mode 100644 index 0000000000000..3a2eb8c3e0da8 --- /dev/null +++ b/boards/adafruit/feather_esp32s2/feather_connector_tft.dtsi @@ -0,0 +1,42 @@ +/* + * Copyright (c) 2020 Richard Osterloh + * Copyright (c) 2024 Leon Rinkel + * Copyright (c) 2025 Philipp Steiner + * + * SPDX-License-Identifier: Apache-2.0 + */ + +/ { + feather_header: connector { + compatible = "adafruit-feather-header"; + #gpio-cells = <2>; + gpio-map-mask = <0xffffffff 0xffffffc0>; + gpio-map-pass-thru = <0 0x3f>; + gpio-map = + <0 0 &gpio0 18 0>, /* A0 */ + <1 0 &gpio0 17 0>, /* A1 */ + <2 0 &gpio0 16 0>, /* A2 */ + <3 0 &gpio0 15 0>, /* A3 */ + <4 0 &gpio0 14 0>, /* A4 */ + <5 0 &gpio0 8 0>, /* A5 */ + <6 0 &gpio1 36 0>, /* SCK */ + <7 0 &gpio1 35 0>, /* MOSI */ + <8 0 &gpio1 37 0>, /* MISO */ + <9 0 &gpio0 2 0>, /* RX */ + <10 0 &gpio0 1 0>, /* TX */ + <11 0 &gpio1 43 0>, /* DB */ + <12 0 &gpio1 42 0>, /* SDA */ + <13 0 &gpio1 41 0>, /* SCL */ + <14 0 &gpio0 5 0>, /* D5 */ + <15 0 &gpio0 6 0>, /* D6 */ + <16 0 &gpio0 9 0>, /* D9 */ + <17 0 &gpio0 10 0>, /* D10 */ + <18 0 &gpio0 11 0>, /* D11 */ + <19 0 &gpio0 12 0>, /* D12 */ + <20 0 &gpio0 13 0>; /* D13 */ + }; +}; + +feather_serial: &uart1 {}; +feather_i2c: &i2c0 {}; +feather_spi: &spi2 {}; diff --git a/boards/adafruit/feather_esp32s2/support/openocd.cfg b/boards/adafruit/feather_esp32s2/support/openocd.cfg new file mode 100644 index 0000000000000..2f740b4a36ab1 --- /dev/null +++ b/boards/adafruit/feather_esp32s2/support/openocd.cfg @@ -0,0 +1,7 @@ +set ESP_RTOS none +set ESP32_ONLYCPU 1 + +# Source the JTAG interface configuration file +source [find interface/esp_usb_jtag.cfg] +# Source the ESP32-S3 configuration file +source [find target/esp32s3.cfg] diff --git a/samples/drivers/led/led_strip/boards/adafruit_feather_esp32s2.conf b/samples/drivers/led/led_strip/boards/adafruit_feather_esp32s2.conf new file mode 100644 index 0000000000000..8230eb9896b4f --- /dev/null +++ b/samples/drivers/led/led_strip/boards/adafruit_feather_esp32s2.conf @@ -0,0 +1,2 @@ +CONFIG_GPIO=y +CONFIG_GPIO_HOGS=y diff --git a/samples/drivers/led/led_strip/boards/adafruit_feather_esp32s2_tft.conf b/samples/drivers/led/led_strip/boards/adafruit_feather_esp32s2_tft.conf new file mode 100644 index 0000000000000..8230eb9896b4f --- /dev/null +++ b/samples/drivers/led/led_strip/boards/adafruit_feather_esp32s2_tft.conf @@ -0,0 +1,2 @@ +CONFIG_GPIO=y +CONFIG_GPIO_HOGS=y diff --git a/samples/drivers/led/led_strip/boards/adafruit_feather_esp32s2_tft_reverse.conf b/samples/drivers/led/led_strip/boards/adafruit_feather_esp32s2_tft_reverse.conf new file mode 100644 index 0000000000000..8230eb9896b4f --- /dev/null +++ b/samples/drivers/led/led_strip/boards/adafruit_feather_esp32s2_tft_reverse.conf @@ -0,0 +1,2 @@ +CONFIG_GPIO=y +CONFIG_GPIO_HOGS=y diff --git a/samples/fuel_gauge/max17048/boards/adafruit_feather_esp32s2_C.conf b/samples/fuel_gauge/max17048/boards/adafruit_feather_esp32s2_C.conf new file mode 100644 index 0000000000000..0968fb220e006 --- /dev/null +++ b/samples/fuel_gauge/max17048/boards/adafruit_feather_esp32s2_C.conf @@ -0,0 +1,4 @@ +CONFIG_POWER_DOMAIN=y +CONFIG_GPIO=y +CONFIG_PM_DEVICE=y +CONFIG_PM_DEVICE_POWER_DOMAIN=y diff --git a/samples/fuel_gauge/max17048/boards/adafruit_feather_esp32s2_C.overlay b/samples/fuel_gauge/max17048/boards/adafruit_feather_esp32s2_C.overlay new file mode 100644 index 0000000000000..66298554285cb --- /dev/null +++ b/samples/fuel_gauge/max17048/boards/adafruit_feather_esp32s2_C.overlay @@ -0,0 +1,8 @@ +&i2c0 { + max17048: max17048@36 { + compatible = "maxim,max17048"; + status = "okay"; + reg = <0x36 >; + power-domains = <&i2c_reg>; + }; +}; diff --git a/samples/fuel_gauge/max17048/boards/adafruit_feather_esp32s2_tft.conf b/samples/fuel_gauge/max17048/boards/adafruit_feather_esp32s2_tft.conf new file mode 100644 index 0000000000000..0968fb220e006 --- /dev/null +++ b/samples/fuel_gauge/max17048/boards/adafruit_feather_esp32s2_tft.conf @@ -0,0 +1,4 @@ +CONFIG_POWER_DOMAIN=y +CONFIG_GPIO=y +CONFIG_PM_DEVICE=y +CONFIG_PM_DEVICE_POWER_DOMAIN=y diff --git a/samples/fuel_gauge/max17048/boards/adafruit_feather_esp32s2_tft.overlay b/samples/fuel_gauge/max17048/boards/adafruit_feather_esp32s2_tft.overlay new file mode 100644 index 0000000000000..66298554285cb --- /dev/null +++ b/samples/fuel_gauge/max17048/boards/adafruit_feather_esp32s2_tft.overlay @@ -0,0 +1,8 @@ +&i2c0 { + max17048: max17048@36 { + compatible = "maxim,max17048"; + status = "okay"; + reg = <0x36 >; + power-domains = <&i2c_reg>; + }; +}; diff --git a/samples/fuel_gauge/max17048/boards/adafruit_feather_esp32s2_tft_reverse.conf b/samples/fuel_gauge/max17048/boards/adafruit_feather_esp32s2_tft_reverse.conf new file mode 100644 index 0000000000000..0968fb220e006 --- /dev/null +++ b/samples/fuel_gauge/max17048/boards/adafruit_feather_esp32s2_tft_reverse.conf @@ -0,0 +1,4 @@ +CONFIG_POWER_DOMAIN=y +CONFIG_GPIO=y +CONFIG_PM_DEVICE=y +CONFIG_PM_DEVICE_POWER_DOMAIN=y diff --git a/samples/sensor/bme280/boards/adafruit_feather_esp32s2.overlay b/samples/sensor/bme280/boards/adafruit_feather_esp32s2.overlay new file mode 100644 index 0000000000000..7259b070ebb79 --- /dev/null +++ b/samples/sensor/bme280/boards/adafruit_feather_esp32s2.overlay @@ -0,0 +1,6 @@ +&i2c0 { + bme280: bme280@77 { + compatible = "bosch,bme280"; + reg = <0x77>; + }; +}; diff --git a/samples/sensor/bme280/boards/adafruit_feather_esp32s2_tft.overlay b/samples/sensor/bme280/boards/adafruit_feather_esp32s2_tft.overlay new file mode 100644 index 0000000000000..7259b070ebb79 --- /dev/null +++ b/samples/sensor/bme280/boards/adafruit_feather_esp32s2_tft.overlay @@ -0,0 +1,6 @@ +&i2c0 { + bme280: bme280@77 { + compatible = "bosch,bme280"; + reg = <0x77>; + }; +}; diff --git a/samples/sensor/bme280/boards/adafruit_feather_esp32s2_tft_reverse.overlay b/samples/sensor/bme280/boards/adafruit_feather_esp32s2_tft_reverse.overlay new file mode 100644 index 0000000000000..7259b070ebb79 --- /dev/null +++ b/samples/sensor/bme280/boards/adafruit_feather_esp32s2_tft_reverse.overlay @@ -0,0 +1,6 @@ +&i2c0 { + bme280: bme280@77 { + compatible = "bosch,bme280"; + reg = <0x77>; + }; +}; diff --git a/samples/subsys/display/lvgl/boards/adafruit_feather_esp32s2_tft.conf b/samples/subsys/display/lvgl/boards/adafruit_feather_esp32s2_tft.conf new file mode 100644 index 0000000000000..cf023663fe53a --- /dev/null +++ b/samples/subsys/display/lvgl/boards/adafruit_feather_esp32s2_tft.conf @@ -0,0 +1,6 @@ +CONFIG_POWER_DOMAIN=y +CONFIG_GPIO=y +CONFIG_PM_DEVICE=y +CONFIG_PM_DEVICE_POWER_DOMAIN=y + +CONFIG_MAIN_STACK_SIZE=4096 diff --git a/samples/subsys/display/lvgl/boards/adafruit_feather_esp32s2_tft.overlay b/samples/subsys/display/lvgl/boards/adafruit_feather_esp32s2_tft.overlay new file mode 100644 index 0000000000000..bf62c27670add --- /dev/null +++ b/samples/subsys/display/lvgl/boards/adafruit_feather_esp32s2_tft.overlay @@ -0,0 +1,3 @@ +&st7789v_tft { + status = "okay"; +}; diff --git a/samples/subsys/display/lvgl/boards/adafruit_feather_esp32s2_tft_reverse.conf b/samples/subsys/display/lvgl/boards/adafruit_feather_esp32s2_tft_reverse.conf new file mode 100644 index 0000000000000..cf023663fe53a --- /dev/null +++ b/samples/subsys/display/lvgl/boards/adafruit_feather_esp32s2_tft_reverse.conf @@ -0,0 +1,6 @@ +CONFIG_POWER_DOMAIN=y +CONFIG_GPIO=y +CONFIG_PM_DEVICE=y +CONFIG_PM_DEVICE_POWER_DOMAIN=y + +CONFIG_MAIN_STACK_SIZE=4096 diff --git a/samples/subsys/display/lvgl/boards/adafruit_feather_esp32s2_tft_reverse.overlay b/samples/subsys/display/lvgl/boards/adafruit_feather_esp32s2_tft_reverse.overlay new file mode 100644 index 0000000000000..bf62c27670add --- /dev/null +++ b/samples/subsys/display/lvgl/boards/adafruit_feather_esp32s2_tft_reverse.overlay @@ -0,0 +1,3 @@ +&st7789v_tft { + status = "okay"; +};