From a55c5601c03f5f240b34bb76352664420d691699 Mon Sep 17 00:00:00 2001 From: Eduard Iten Date: Sun, 29 Jun 2025 12:13:32 +0200 Subject: [PATCH] Initial commit with basic project structure and Firebeetle 2 board definition --- .gitignore | 1 + CMakeLists.txt | 8 + README.de.md | 1 + README.md | 1 + boards/dfrobot/firebeetle2_esp32c6/board.yml | 46 ++ boards/espressif/esp32_devkitc/Kconfig | 7 + .../esp32_devkitc/Kconfig.esp32_devkitc | 7 + .../espressif/esp32_devkitc/Kconfig.sysbuild | 10 + boards/espressif/esp32_devkitc/board.cmake | 11 + boards/espressif/esp32_devkitc/board.yml | 6 + .../doc/img/esp32_devkitc_wrover.jpg | Bin 0 -> 77420 bytes boards/espressif/esp32_devkitc/doc/index.rst | 256 ++++++++ .../esp32_devkitc/esp32_devkitc-pinctrl.dtsi | 107 +++ .../esp32_devkitc/esp32_devkitc_appcpu.dts | 30 + .../esp32_devkitc/esp32_devkitc_appcpu.yaml | 27 + .../esp32_devkitc_appcpu_defconfig | 3 + .../esp32_devkitc/esp32_devkitc_procpu.dts | 146 ++++ .../esp32_devkitc/esp32_devkitc_procpu.yaml | 22 + .../esp32_devkitc_procpu_defconfig | 8 + .../esp32_devkitc/support/openocd.cfg | 5 + .../esp32_ethernet_kit/CMakeLists.txt | 6 + boards/espressif/esp32_ethernet_kit/Kconfig | 7 + .../esp32_ethernet_kit/Kconfig.defconfig | 15 + .../Kconfig.esp32_ethernet_kit | 9 + .../esp32_ethernet_kit/Kconfig.sysbuild | 10 + .../espressif/esp32_ethernet_kit/board.cmake | 9 + boards/espressif/esp32_ethernet_kit/board.yml | 6 + .../espressif/esp32_ethernet_kit/board_init.c | 28 + .../img/esp32-ethernet-kit-a-v1.2-layout.jpg | Bin 0 -> 36871 bytes .../img/esp32-ethernet-kit-b-v1.0-layout.jpg | Bin 0 -> 13217 bytes .../esp32-ethernet-kit-rmii-clk-from-phy.jpg | Bin 0 -> 11085 bytes .../esp32-ethernet-kit-rmii-clk-to-phy.jpg | Bin 0 -> 12250 bytes .../esp32-ethernet-kit-v1.1-block-diagram.jpg | Bin 0 -> 49883 bytes .../doc/img/esp32-ethernet-kit-v1.2.jpg | Bin 0 -> 58758 bytes .../doc/img/esp32_ethernet_kit.jpg | Bin 0 -> 40794 bytes .../esp32_ethernet_kit/doc/index.rst | 621 ++++++++++++++++++ .../esp32_ethernet_kit-pinctrl.dtsi | 72 ++ .../esp32_ethernet_kit_appcpu.dts | 30 + .../esp32_ethernet_kit_appcpu.yaml | 27 + .../esp32_ethernet_kit_appcpu_defconfig | 3 + .../esp32_ethernet_kit_procpu.dts | 107 +++ .../esp32_ethernet_kit_procpu.yaml | 14 + .../esp32_ethernet_kit_procpu_defconfig | 7 + .../esp32_ethernet_kit/support/openocd.cfg | 5 + boards/espressif/esp32c3_devkitc/Kconfig | 6 + .../esp32c3_devkitc/Kconfig.esp32c3_devkitc | 7 + .../esp32c3_devkitc/Kconfig.sysbuild | 10 + boards/espressif/esp32c3_devkitc/board.cmake | 9 + boards/espressif/esp32c3_devkitc/board.yml | 6 + .../doc/img/esp32c3_devkitc.webp | Bin 0 -> 31546 bytes .../espressif/esp32c3_devkitc/doc/index.rst | 219 ++++++ .../esp32c3_devkitc-pinctrl.dtsi | 52 ++ .../esp32c3_devkitc/esp32c3_devkitc.dts | 103 +++ .../esp32c3_devkitc/esp32c3_devkitc.yaml | 18 + .../esp32c3_devkitc/esp32c3_devkitc_defconfig | 6 + .../esp32c3_devkitc/support/openocd.cfg | 11 + boards/espressif/esp32c3_devkitm/Kconfig | 6 + .../esp32c3_devkitm/Kconfig.esp32c3_devkitm | 7 + .../esp32c3_devkitm/Kconfig.sysbuild | 10 + boards/espressif/esp32c3_devkitm/board.cmake | 9 + boards/espressif/esp32c3_devkitm/board.yml | 6 + .../doc/img/esp32c3_devkitm.webp | Bin 0 -> 31046 bytes .../espressif/esp32c3_devkitm/doc/index.rst | 219 ++++++ .../esp32c3_devkitm-pinctrl.dtsi | 66 ++ .../esp32c3_devkitm/esp32c3_devkitm.dts | 109 +++ .../esp32c3_devkitm/esp32c3_devkitm.yaml | 19 + .../esp32c3_devkitm/esp32c3_devkitm_defconfig | 6 + .../esp32c3_devkitm/support/openocd.cfg | 11 + boards/espressif/esp32c3_rust/Kconfig | 6 + .../esp32c3_rust/Kconfig.esp32c3_rust | 5 + .../espressif/esp32c3_rust/Kconfig.sysbuild | 10 + boards/espressif/esp32c3_rust/board.cmake | 10 + boards/espressif/esp32c3_rust/board.yml | 9 + .../esp32c3_rust/doc/img/esp32c3_rust.webp | Bin 0 -> 16424 bytes boards/espressif/esp32c3_rust/doc/index.rst | 264 ++++++++ .../esp32c3_rust/esp32c3_rust-pinctrl.dtsi | 45 ++ .../espressif/esp32c3_rust/esp32c3_rust.dts | 134 ++++ .../espressif/esp32c3_rust/esp32c3_rust.yaml | 21 + .../esp32c3_rust/esp32c3_rust_defconfig | 10 + .../esp32c3_rust/support/openocd.cfg | 11 + boards/espressif/esp32c6_devkitc/Kconfig | 7 + .../esp32c6_devkitc/Kconfig.esp32c6_devkitc | 9 + .../esp32c6_devkitc/Kconfig.sysbuild | 10 + boards/espressif/esp32c6_devkitc/board.cmake | 9 + boards/espressif/esp32c6_devkitc/board.yml | 6 + .../doc/img/esp32c6_devkitc.webp | Bin 0 -> 22016 bytes .../espressif/esp32c6_devkitc/doc/index.rst | 285 ++++++++ .../esp32c6_devkitc_hpcore-pinctrl.dtsi | 45 ++ .../esp32c6_devkitc_hpcore.dts | 77 +++ .../esp32c6_devkitc_hpcore.yaml | 22 + .../esp32c6_devkitc_hpcore_defconfig | 6 + .../esp32c6_devkitc_lpcore.dts | 26 + .../esp32c6_devkitc_lpcore.yaml | 19 + .../esp32c6_devkitc_lpcore_defconfig | 20 + .../esp32c6_devkitc/support/openocd.cfg | 4 + boards/espressif/esp32s2_devkitc/Kconfig | 6 + .../esp32s2_devkitc/Kconfig.esp32s2_devkitc | 5 + .../esp32s2_devkitc/Kconfig.sysbuild | 10 + boards/espressif/esp32s2_devkitc/board.cmake | 9 + boards/espressif/esp32s2_devkitc/board.yml | 6 + .../doc/img/esp32s2_devkitc.webp | Bin 0 -> 19062 bytes .../espressif/esp32s2_devkitc/doc/index.rst | 228 +++++++ .../esp32s2_devkitc-pinctrl.dtsi | 83 +++ .../esp32s2_devkitc/esp32s2_devkitc.dts | 135 ++++ .../esp32s2_devkitc/esp32s2_devkitc.yaml | 26 + .../esp32s2_devkitc/esp32s2_devkitc_defconfig | 7 + .../esp32s2_devkitc/support/openocd.cfg | 4 + boards/espressif/esp32s2_saola/Kconfig | 6 + .../esp32s2_saola/Kconfig.esp32s2_saola | 5 + .../espressif/esp32s2_saola/Kconfig.sysbuild | 10 + boards/espressif/esp32s2_saola/board.cmake | 9 + boards/espressif/esp32s2_saola/board.yml | 6 + .../esp32s2_saola/doc/img/esp32s2_saola.webp | Bin 0 -> 20460 bytes boards/espressif/esp32s2_saola/doc/index.rst | 228 +++++++ .../esp32s2_saola/esp32s2_saola-pinctrl.dtsi | 83 +++ .../espressif/esp32s2_saola/esp32s2_saola.dts | 131 ++++ .../esp32s2_saola/esp32s2_saola.yaml | 24 + .../esp32s2_saola/esp32s2_saola_defconfig | 7 + .../esp32s2_saola/support/openocd.cfg | 4 + boards/espressif/esp32s3_devkitc/Kconfig | 7 + .../esp32s3_devkitc/Kconfig.esp32s3_devkitc | 7 + .../esp32s3_devkitc/Kconfig.sysbuild | 10 + boards/espressif/esp32s3_devkitc/board.cmake | 9 + boards/espressif/esp32s3_devkitc/board.yml | 6 + .../doc/img/esp32s3_devkitc.webp | Bin 0 -> 17434 bytes .../espressif/esp32s3_devkitc/doc/index.rst | 253 +++++++ .../esp32s3_devkitc-pinctrl.dtsi | 116 ++++ .../esp32s3_devkitc_appcpu.dts | 31 + .../esp32s3_devkitc_appcpu.yaml | 27 + .../esp32s3_devkitc_appcpu_defconfig | 3 + .../esp32s3_devkitc_procpu.dts | 153 +++++ .../esp32s3_devkitc_procpu.yaml | 20 + .../esp32s3_devkitc_procpu_defconfig | 7 + .../esp32s3_devkitc/support/openocd.cfg | 7 + boards/espressif/esp32s3_devkitm/Kconfig | 7 + .../esp32s3_devkitm/Kconfig.esp32s3_devkitm | 7 + .../esp32s3_devkitm/Kconfig.sysbuild | 10 + boards/espressif/esp32s3_devkitm/board.cmake | 9 + boards/espressif/esp32s3_devkitm/board.yml | 6 + .../doc/img/esp32s3_devkitm.webp | Bin 0 -> 18464 bytes .../espressif/esp32s3_devkitm/doc/index.rst | 253 +++++++ .../esp32s3_devkitm-pinctrl.dtsi | 116 ++++ .../esp32s3_devkitm_appcpu.dts | 31 + .../esp32s3_devkitm_appcpu.yaml | 27 + .../esp32s3_devkitm_procpu.dts | 153 +++++ .../esp32s3_devkitm_procpu.yaml | 21 + .../esp32s3_devkitm_procpu_defconfig | 7 + .../esp32s3_devkitm/support/openocd.cfg | 7 + boards/espressif/esp32s3_eye/Kconfig | 7 + .../espressif/esp32s3_eye/Kconfig.defconfig | 11 + .../espressif/esp32s3_eye/Kconfig.esp32s3_eye | 7 + boards/espressif/esp32s3_eye/Kconfig.sysbuild | 10 + boards/espressif/esp32s3_eye/board.cmake | 9 + boards/espressif/esp32s3_eye/board.yml | 6 + ...ESP32-S3-EYE_20210913_V03_SystemBlock.webp | Bin 0 -> 12058 bytes .../img/ESP32-S3-EYE_MB-annotated-photo.webp | Bin 0 -> 5094 bytes .../img/ESP32-S3-EYE_SUB-annotated-photo.webp | Bin 0 -> 4604 bytes .../esp32s3_eye/doc/img/esp32s3_eye.webp | Bin 0 -> 8068 bytes boards/espressif/esp32s3_eye/doc/index.rst | 288 ++++++++ .../esp32s3_eye/esp32s3_eye-pinctrl.dtsi | 55 ++ .../esp32s3_eye/esp32s3_eye_appcpu.dts | 34 + .../esp32s3_eye/esp32s3_eye_appcpu.yaml | 27 + .../esp32s3_eye/esp32s3_eye_appcpu_defconfig | 3 + .../esp32s3_eye/esp32s3_eye_procpu.dts | 210 ++++++ .../esp32s3_eye/esp32s3_eye_procpu.yaml | 20 + .../esp32s3_eye/esp32s3_eye_procpu_defconfig | 10 + .../espressif/esp32s3_eye/support/openocd.cfg | 7 + boards/espressif/esp8684_devkitm/Kconfig | 6 + .../esp8684_devkitm/Kconfig.esp8684_devkitm | 7 + .../esp8684_devkitm/Kconfig.sysbuild | 10 + boards/espressif/esp8684_devkitm/board.cmake | 9 + boards/espressif/esp8684_devkitm/board.yml | 6 + .../doc/img/esp8684_devkitm.webp | Bin 0 -> 30462 bytes .../espressif/esp8684_devkitm/doc/index.rst | 225 +++++++ .../esp8684_devkitm-pinctrl.dtsi | 23 + .../esp8684_devkitm/esp8684_devkitm.dts | 67 ++ .../esp8684_devkitm/esp8684_devkitm.yaml | 18 + .../esp8684_devkitm/esp8684_devkitm_defconfig | 6 + .../esp8684_devkitm/support/openocd.cfg | 5 + boards/espressif/esp_wrover_kit/Kconfig | 7 + .../esp_wrover_kit/Kconfig.defconfig | 11 + .../esp_wrover_kit/Kconfig.esp_wrover_kit | 9 + .../espressif/esp_wrover_kit/Kconfig.sysbuild | 10 + boards/espressif/esp_wrover_kit/board.cmake | 9 + boards/espressif/esp_wrover_kit/board.yml | 6 + .../doc/img/esp-wrover-kit-block-diagram.jpg | Bin 0 -> 28088 bytes .../doc/img/esp-wrover-kit-v4.1-jp14.jpg | Bin 0 -> 42877 bytes .../doc/img/esp-wrover-kit-v4.1-jp2-jtag.jpg | Bin 0 -> 38263 bytes .../doc/img/esp-wrover-kit-v4.1-jp2-tx-rx.jpg | Bin 0 -> 35379 bytes .../img/esp-wrover-kit-v4.1-jp7-ext_5v.jpg | Bin 0 -> 32956 bytes .../img/esp-wrover-kit-v4.1-jp7-usb_5v.jpg | Bin 0 -> 32836 bytes .../img/esp-wrover-kit-v4.1-layout-back.jpg | Bin 0 -> 18996 bytes .../esp_wrover_kit/doc/img/esp_wrover_kit.jpg | Bin 0 -> 53973 bytes boards/espressif/esp_wrover_kit/doc/index.rst | 621 ++++++++++++++++++ .../esp_wrover_kit-pinctrl.dtsi | 85 +++ .../esp_wrover_kit/esp_wrover_kit_appcpu.dts | 30 + .../esp_wrover_kit/esp_wrover_kit_appcpu.yaml | 27 + .../esp_wrover_kit_appcpu_defconfig | 3 + .../esp_wrover_kit/esp_wrover_kit_procpu.dts | 224 +++++++ .../esp_wrover_kit/esp_wrover_kit_procpu.yaml | 20 + .../esp_wrover_kit_procpu_defconfig | 7 + .../esp_wrover_kit/support/openocd.cfg | 5 + boards/espressif/index.rst | 10 + prj.conf | 1 + src/main.c | 7 + 205 files changed, 8183 insertions(+) create mode 100644 .gitignore create mode 100644 CMakeLists.txt create mode 100644 README.de.md create mode 100644 README.md create mode 100644 boards/espressif/esp32_devkitc/Kconfig create mode 100644 boards/espressif/esp32_devkitc/Kconfig.esp32_devkitc create mode 100644 boards/espressif/esp32_devkitc/Kconfig.sysbuild create mode 100644 boards/espressif/esp32_devkitc/board.cmake create mode 100644 boards/espressif/esp32_devkitc/board.yml create mode 100644 boards/espressif/esp32_devkitc/doc/img/esp32_devkitc_wrover.jpg create mode 100644 boards/espressif/esp32_devkitc/doc/index.rst create mode 100644 boards/espressif/esp32_devkitc/esp32_devkitc-pinctrl.dtsi create mode 100644 boards/espressif/esp32_devkitc/esp32_devkitc_appcpu.dts create mode 100644 boards/espressif/esp32_devkitc/esp32_devkitc_appcpu.yaml create mode 100644 boards/espressif/esp32_devkitc/esp32_devkitc_appcpu_defconfig create mode 100644 boards/espressif/esp32_devkitc/esp32_devkitc_procpu.dts create mode 100644 boards/espressif/esp32_devkitc/esp32_devkitc_procpu.yaml create mode 100644 boards/espressif/esp32_devkitc/esp32_devkitc_procpu_defconfig create mode 100644 boards/espressif/esp32_devkitc/support/openocd.cfg create mode 100644 boards/espressif/esp32_ethernet_kit/CMakeLists.txt create mode 100644 boards/espressif/esp32_ethernet_kit/Kconfig create mode 100644 boards/espressif/esp32_ethernet_kit/Kconfig.defconfig create mode 100644 boards/espressif/esp32_ethernet_kit/Kconfig.esp32_ethernet_kit create mode 100644 boards/espressif/esp32_ethernet_kit/Kconfig.sysbuild create mode 100644 boards/espressif/esp32_ethernet_kit/board.cmake create mode 100644 boards/espressif/esp32_ethernet_kit/board.yml create mode 100644 boards/espressif/esp32_ethernet_kit/board_init.c create mode 100644 boards/espressif/esp32_ethernet_kit/doc/img/esp32-ethernet-kit-a-v1.2-layout.jpg create mode 100644 boards/espressif/esp32_ethernet_kit/doc/img/esp32-ethernet-kit-b-v1.0-layout.jpg create mode 100644 boards/espressif/esp32_ethernet_kit/doc/img/esp32-ethernet-kit-rmii-clk-from-phy.jpg create mode 100644 boards/espressif/esp32_ethernet_kit/doc/img/esp32-ethernet-kit-rmii-clk-to-phy.jpg create mode 100644 boards/espressif/esp32_ethernet_kit/doc/img/esp32-ethernet-kit-v1.1-block-diagram.jpg create mode 100644 boards/espressif/esp32_ethernet_kit/doc/img/esp32-ethernet-kit-v1.2.jpg create mode 100644 boards/espressif/esp32_ethernet_kit/doc/img/esp32_ethernet_kit.jpg create mode 100644 boards/espressif/esp32_ethernet_kit/doc/index.rst create mode 100644 boards/espressif/esp32_ethernet_kit/esp32_ethernet_kit-pinctrl.dtsi create mode 100644 boards/espressif/esp32_ethernet_kit/esp32_ethernet_kit_appcpu.dts create mode 100644 boards/espressif/esp32_ethernet_kit/esp32_ethernet_kit_appcpu.yaml create mode 100644 boards/espressif/esp32_ethernet_kit/esp32_ethernet_kit_appcpu_defconfig create mode 100644 boards/espressif/esp32_ethernet_kit/esp32_ethernet_kit_procpu.dts create mode 100644 boards/espressif/esp32_ethernet_kit/esp32_ethernet_kit_procpu.yaml create mode 100644 boards/espressif/esp32_ethernet_kit/esp32_ethernet_kit_procpu_defconfig create mode 100644 boards/espressif/esp32_ethernet_kit/support/openocd.cfg create mode 100644 boards/espressif/esp32c3_devkitc/Kconfig create mode 100644 boards/espressif/esp32c3_devkitc/Kconfig.esp32c3_devkitc create mode 100644 boards/espressif/esp32c3_devkitc/Kconfig.sysbuild create mode 100644 boards/espressif/esp32c3_devkitc/board.cmake create mode 100644 boards/espressif/esp32c3_devkitc/board.yml create mode 100644 boards/espressif/esp32c3_devkitc/doc/img/esp32c3_devkitc.webp create mode 100644 boards/espressif/esp32c3_devkitc/doc/index.rst create mode 100644 boards/espressif/esp32c3_devkitc/esp32c3_devkitc-pinctrl.dtsi create mode 100644 boards/espressif/esp32c3_devkitc/esp32c3_devkitc.dts create mode 100644 boards/espressif/esp32c3_devkitc/esp32c3_devkitc.yaml create mode 100644 boards/espressif/esp32c3_devkitc/esp32c3_devkitc_defconfig create mode 100644 boards/espressif/esp32c3_devkitc/support/openocd.cfg create mode 100644 boards/espressif/esp32c3_devkitm/Kconfig create mode 100644 boards/espressif/esp32c3_devkitm/Kconfig.esp32c3_devkitm create mode 100644 boards/espressif/esp32c3_devkitm/Kconfig.sysbuild create mode 100644 boards/espressif/esp32c3_devkitm/board.cmake create mode 100644 boards/espressif/esp32c3_devkitm/board.yml create mode 100644 boards/espressif/esp32c3_devkitm/doc/img/esp32c3_devkitm.webp create mode 100644 boards/espressif/esp32c3_devkitm/doc/index.rst create mode 100644 boards/espressif/esp32c3_devkitm/esp32c3_devkitm-pinctrl.dtsi create mode 100644 boards/espressif/esp32c3_devkitm/esp32c3_devkitm.dts create mode 100644 boards/espressif/esp32c3_devkitm/esp32c3_devkitm.yaml create mode 100644 boards/espressif/esp32c3_devkitm/esp32c3_devkitm_defconfig create mode 100644 boards/espressif/esp32c3_devkitm/support/openocd.cfg create mode 100644 boards/espressif/esp32c3_rust/Kconfig create mode 100644 boards/espressif/esp32c3_rust/Kconfig.esp32c3_rust create mode 100644 boards/espressif/esp32c3_rust/Kconfig.sysbuild create mode 100644 boards/espressif/esp32c3_rust/board.cmake create mode 100644 boards/espressif/esp32c3_rust/board.yml create mode 100644 boards/espressif/esp32c3_rust/doc/img/esp32c3_rust.webp create mode 100644 boards/espressif/esp32c3_rust/doc/index.rst create mode 100644 boards/espressif/esp32c3_rust/esp32c3_rust-pinctrl.dtsi create mode 100644 boards/espressif/esp32c3_rust/esp32c3_rust.dts create mode 100644 boards/espressif/esp32c3_rust/esp32c3_rust.yaml create mode 100644 boards/espressif/esp32c3_rust/esp32c3_rust_defconfig create mode 100644 boards/espressif/esp32c3_rust/support/openocd.cfg create mode 100644 boards/espressif/esp32c6_devkitc/Kconfig create mode 100644 boards/espressif/esp32c6_devkitc/Kconfig.esp32c6_devkitc create mode 100644 boards/espressif/esp32c6_devkitc/Kconfig.sysbuild create mode 100644 boards/espressif/esp32c6_devkitc/board.cmake create mode 100644 boards/espressif/esp32c6_devkitc/board.yml create mode 100644 boards/espressif/esp32c6_devkitc/doc/img/esp32c6_devkitc.webp create mode 100644 boards/espressif/esp32c6_devkitc/doc/index.rst create mode 100644 boards/espressif/esp32c6_devkitc/esp32c6_devkitc_hpcore-pinctrl.dtsi create mode 100644 boards/espressif/esp32c6_devkitc/esp32c6_devkitc_hpcore.dts create mode 100644 boards/espressif/esp32c6_devkitc/esp32c6_devkitc_hpcore.yaml create mode 100644 boards/espressif/esp32c6_devkitc/esp32c6_devkitc_hpcore_defconfig create mode 100644 boards/espressif/esp32c6_devkitc/esp32c6_devkitc_lpcore.dts create mode 100644 boards/espressif/esp32c6_devkitc/esp32c6_devkitc_lpcore.yaml create mode 100644 boards/espressif/esp32c6_devkitc/esp32c6_devkitc_lpcore_defconfig create mode 100644 boards/espressif/esp32c6_devkitc/support/openocd.cfg create mode 100644 boards/espressif/esp32s2_devkitc/Kconfig create mode 100644 boards/espressif/esp32s2_devkitc/Kconfig.esp32s2_devkitc create mode 100644 boards/espressif/esp32s2_devkitc/Kconfig.sysbuild create mode 100644 boards/espressif/esp32s2_devkitc/board.cmake create mode 100644 boards/espressif/esp32s2_devkitc/board.yml create mode 100644 boards/espressif/esp32s2_devkitc/doc/img/esp32s2_devkitc.webp create mode 100644 boards/espressif/esp32s2_devkitc/doc/index.rst create mode 100644 boards/espressif/esp32s2_devkitc/esp32s2_devkitc-pinctrl.dtsi create mode 100644 boards/espressif/esp32s2_devkitc/esp32s2_devkitc.dts create mode 100644 boards/espressif/esp32s2_devkitc/esp32s2_devkitc.yaml create mode 100644 boards/espressif/esp32s2_devkitc/esp32s2_devkitc_defconfig create mode 100644 boards/espressif/esp32s2_devkitc/support/openocd.cfg create mode 100644 boards/espressif/esp32s2_saola/Kconfig create mode 100644 boards/espressif/esp32s2_saola/Kconfig.esp32s2_saola create mode 100644 boards/espressif/esp32s2_saola/Kconfig.sysbuild create mode 100644 boards/espressif/esp32s2_saola/board.cmake create mode 100644 boards/espressif/esp32s2_saola/board.yml create mode 100644 boards/espressif/esp32s2_saola/doc/img/esp32s2_saola.webp create mode 100644 boards/espressif/esp32s2_saola/doc/index.rst create mode 100644 boards/espressif/esp32s2_saola/esp32s2_saola-pinctrl.dtsi create mode 100644 boards/espressif/esp32s2_saola/esp32s2_saola.dts create mode 100644 boards/espressif/esp32s2_saola/esp32s2_saola.yaml create mode 100644 boards/espressif/esp32s2_saola/esp32s2_saola_defconfig create mode 100644 boards/espressif/esp32s2_saola/support/openocd.cfg create mode 100644 boards/espressif/esp32s3_devkitc/Kconfig create mode 100644 boards/espressif/esp32s3_devkitc/Kconfig.esp32s3_devkitc create mode 100644 boards/espressif/esp32s3_devkitc/Kconfig.sysbuild create mode 100644 boards/espressif/esp32s3_devkitc/board.cmake create mode 100644 boards/espressif/esp32s3_devkitc/board.yml create mode 100644 boards/espressif/esp32s3_devkitc/doc/img/esp32s3_devkitc.webp create mode 100644 boards/espressif/esp32s3_devkitc/doc/index.rst create mode 100644 boards/espressif/esp32s3_devkitc/esp32s3_devkitc-pinctrl.dtsi create mode 100644 boards/espressif/esp32s3_devkitc/esp32s3_devkitc_appcpu.dts create mode 100644 boards/espressif/esp32s3_devkitc/esp32s3_devkitc_appcpu.yaml create mode 100644 boards/espressif/esp32s3_devkitc/esp32s3_devkitc_appcpu_defconfig create mode 100644 boards/espressif/esp32s3_devkitc/esp32s3_devkitc_procpu.dts create mode 100644 boards/espressif/esp32s3_devkitc/esp32s3_devkitc_procpu.yaml create mode 100644 boards/espressif/esp32s3_devkitc/esp32s3_devkitc_procpu_defconfig create mode 100644 boards/espressif/esp32s3_devkitc/support/openocd.cfg create mode 100644 boards/espressif/esp32s3_devkitm/Kconfig create mode 100644 boards/espressif/esp32s3_devkitm/Kconfig.esp32s3_devkitm create mode 100644 boards/espressif/esp32s3_devkitm/Kconfig.sysbuild create mode 100644 boards/espressif/esp32s3_devkitm/board.cmake create mode 100644 boards/espressif/esp32s3_devkitm/board.yml create mode 100644 boards/espressif/esp32s3_devkitm/doc/img/esp32s3_devkitm.webp create mode 100644 boards/espressif/esp32s3_devkitm/doc/index.rst create mode 100644 boards/espressif/esp32s3_devkitm/esp32s3_devkitm-pinctrl.dtsi create mode 100644 boards/espressif/esp32s3_devkitm/esp32s3_devkitm_appcpu.dts create mode 100644 boards/espressif/esp32s3_devkitm/esp32s3_devkitm_appcpu.yaml create mode 100644 boards/espressif/esp32s3_devkitm/esp32s3_devkitm_procpu.dts create mode 100644 boards/espressif/esp32s3_devkitm/esp32s3_devkitm_procpu.yaml create mode 100644 boards/espressif/esp32s3_devkitm/esp32s3_devkitm_procpu_defconfig create mode 100644 boards/espressif/esp32s3_devkitm/support/openocd.cfg create mode 100644 boards/espressif/esp32s3_eye/Kconfig create mode 100644 boards/espressif/esp32s3_eye/Kconfig.defconfig create mode 100644 boards/espressif/esp32s3_eye/Kconfig.esp32s3_eye create mode 100644 boards/espressif/esp32s3_eye/Kconfig.sysbuild create mode 100644 boards/espressif/esp32s3_eye/board.cmake create mode 100644 boards/espressif/esp32s3_eye/board.yml create mode 100644 boards/espressif/esp32s3_eye/doc/img/ESP32-S3-EYE_20210913_V03_SystemBlock.webp create mode 100644 boards/espressif/esp32s3_eye/doc/img/ESP32-S3-EYE_MB-annotated-photo.webp create mode 100644 boards/espressif/esp32s3_eye/doc/img/ESP32-S3-EYE_SUB-annotated-photo.webp create mode 100644 boards/espressif/esp32s3_eye/doc/img/esp32s3_eye.webp create mode 100644 boards/espressif/esp32s3_eye/doc/index.rst create mode 100644 boards/espressif/esp32s3_eye/esp32s3_eye-pinctrl.dtsi create mode 100644 boards/espressif/esp32s3_eye/esp32s3_eye_appcpu.dts create mode 100644 boards/espressif/esp32s3_eye/esp32s3_eye_appcpu.yaml create mode 100644 boards/espressif/esp32s3_eye/esp32s3_eye_appcpu_defconfig create mode 100644 boards/espressif/esp32s3_eye/esp32s3_eye_procpu.dts create mode 100644 boards/espressif/esp32s3_eye/esp32s3_eye_procpu.yaml create mode 100644 boards/espressif/esp32s3_eye/esp32s3_eye_procpu_defconfig create mode 100644 boards/espressif/esp32s3_eye/support/openocd.cfg create mode 100644 boards/espressif/esp8684_devkitm/Kconfig create mode 100644 boards/espressif/esp8684_devkitm/Kconfig.esp8684_devkitm create mode 100644 boards/espressif/esp8684_devkitm/Kconfig.sysbuild create mode 100644 boards/espressif/esp8684_devkitm/board.cmake create mode 100644 boards/espressif/esp8684_devkitm/board.yml create mode 100644 boards/espressif/esp8684_devkitm/doc/img/esp8684_devkitm.webp create mode 100644 boards/espressif/esp8684_devkitm/doc/index.rst create mode 100644 boards/espressif/esp8684_devkitm/esp8684_devkitm-pinctrl.dtsi create mode 100644 boards/espressif/esp8684_devkitm/esp8684_devkitm.dts create mode 100644 boards/espressif/esp8684_devkitm/esp8684_devkitm.yaml create mode 100644 boards/espressif/esp8684_devkitm/esp8684_devkitm_defconfig create mode 100644 boards/espressif/esp8684_devkitm/support/openocd.cfg create mode 100644 boards/espressif/esp_wrover_kit/Kconfig create mode 100644 boards/espressif/esp_wrover_kit/Kconfig.defconfig create mode 100644 boards/espressif/esp_wrover_kit/Kconfig.esp_wrover_kit create mode 100644 boards/espressif/esp_wrover_kit/Kconfig.sysbuild create mode 100644 boards/espressif/esp_wrover_kit/board.cmake create mode 100644 boards/espressif/esp_wrover_kit/board.yml create mode 100644 boards/espressif/esp_wrover_kit/doc/img/esp-wrover-kit-block-diagram.jpg create mode 100644 boards/espressif/esp_wrover_kit/doc/img/esp-wrover-kit-v4.1-jp14.jpg create mode 100644 boards/espressif/esp_wrover_kit/doc/img/esp-wrover-kit-v4.1-jp2-jtag.jpg create mode 100644 boards/espressif/esp_wrover_kit/doc/img/esp-wrover-kit-v4.1-jp2-tx-rx.jpg create mode 100644 boards/espressif/esp_wrover_kit/doc/img/esp-wrover-kit-v4.1-jp7-ext_5v.jpg create mode 100644 boards/espressif/esp_wrover_kit/doc/img/esp-wrover-kit-v4.1-jp7-usb_5v.jpg create mode 100644 boards/espressif/esp_wrover_kit/doc/img/esp-wrover-kit-v4.1-layout-back.jpg create mode 100644 boards/espressif/esp_wrover_kit/doc/img/esp_wrover_kit.jpg create mode 100644 boards/espressif/esp_wrover_kit/doc/index.rst create mode 100644 boards/espressif/esp_wrover_kit/esp_wrover_kit-pinctrl.dtsi create mode 100644 boards/espressif/esp_wrover_kit/esp_wrover_kit_appcpu.dts create mode 100644 boards/espressif/esp_wrover_kit/esp_wrover_kit_appcpu.yaml create mode 100644 boards/espressif/esp_wrover_kit/esp_wrover_kit_appcpu_defconfig create mode 100644 boards/espressif/esp_wrover_kit/esp_wrover_kit_procpu.dts create mode 100644 boards/espressif/esp_wrover_kit/esp_wrover_kit_procpu.yaml create mode 100644 boards/espressif/esp_wrover_kit/esp_wrover_kit_procpu_defconfig create mode 100644 boards/espressif/esp_wrover_kit/support/openocd.cfg create mode 100644 boards/espressif/index.rst create mode 100644 prj.conf create mode 100644 src/main.c diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..c795b05 --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +build \ No newline at end of file diff --git a/CMakeLists.txt b/CMakeLists.txt new file mode 100644 index 0000000..91f8b59 --- /dev/null +++ b/CMakeLists.txt @@ -0,0 +1,8 @@ +cmake_minimum_required(VERSION 3.20) + +list(APPEND BOARD_ROOT ${CMAKE_CURRENT_SOURCE_DIR}) + +find_package(Zephyr REQUIRED HINTS $ENV{ZEPHYR_BASE}) +project(firebeatle) + +target_sources(app PRIVATE src/main.c) diff --git a/README.de.md b/README.de.md new file mode 100644 index 0000000..b632f61 --- /dev/null +++ b/README.de.md @@ -0,0 +1 @@ +# firebeatle diff --git a/README.md b/README.md new file mode 100644 index 0000000..b632f61 --- /dev/null +++ b/README.md @@ -0,0 +1 @@ +# firebeatle diff --git a/boards/dfrobot/firebeetle2_esp32c6/board.yml b/boards/dfrobot/firebeetle2_esp32c6/board.yml index a630d1b..01c7b77 100644 --- a/boards/dfrobot/firebeetle2_esp32c6/board.yml +++ b/boards/dfrobot/firebeetle2_esp32c6/board.yml @@ -4,3 +4,49 @@ board: vendor: dfrobot socs: - name: esp32c6 + variants: + - name: firebeetle2_esp32c6_hpcore + board_name: firebeetle2_esp32c6_hpcore + meta: + name: FireBeetle 2 ESP32-C6 (HP-Core) + type: mcu + arch: riscv + toolchain: + - zephyr + - gnuarmemb + - xtools + supported: + - uart + - gpio + - i2c + - spi + - wifi + - ble + ram: 512 + flash: 4096 + testing: + ignore_tags: + - net + - bluetooth + - name: firebeetle2_esp32c6_lpcore + board_name: firebeetle2_esp32c6_lpcore + meta: + name: FireBeetle 2 ESP32-C6 (LP-Core) + type: mcu + arch: riscv + toolchain: + - zephyr + - gnuarmemb + - xtools + supported: + - uart + - gpio + - i2c + - spi + ram: 16 + flash: 0 + testing: + ignore_tags: + - net + - bluetooth + default_variant: firebeetle2_esp32c6_hpcore diff --git a/boards/espressif/esp32_devkitc/Kconfig b/boards/espressif/esp32_devkitc/Kconfig new file mode 100644 index 0000000..3187645 --- /dev/null +++ b/boards/espressif/esp32_devkitc/Kconfig @@ -0,0 +1,7 @@ +# Copyright (c) 2024-2025 Espressif Systems (Shanghai) Co., Ltd. +# SPDX-License-Identifier: Apache-2.0 + +config HEAP_MEM_POOL_ADD_SIZE_BOARD + int + default 4096 if BOARD_ESP32_DEVKITC_ESP32_PROCPU + default 256 if BOARD_ESP32_DEVKITC_ESP32_APPCPU diff --git a/boards/espressif/esp32_devkitc/Kconfig.esp32_devkitc b/boards/espressif/esp32_devkitc/Kconfig.esp32_devkitc new file mode 100644 index 0000000..b843530 --- /dev/null +++ b/boards/espressif/esp32_devkitc/Kconfig.esp32_devkitc @@ -0,0 +1,7 @@ +# Copyright (c) 2023-2025 Espressif Systems (Shanghai) Co., Ltd. +# SPDX-License-Identifier: Apache-2.0 + +config BOARD_ESP32_DEVKITC + select SOC_ESP32_WROVER_E_N4R8 + select SOC_ESP32_PROCPU if BOARD_ESP32_DEVKITC_ESP32_PROCPU + select SOC_ESP32_APPCPU if BOARD_ESP32_DEVKITC_ESP32_APPCPU diff --git a/boards/espressif/esp32_devkitc/Kconfig.sysbuild b/boards/espressif/esp32_devkitc/Kconfig.sysbuild new file mode 100644 index 0000000..3a2d17a --- /dev/null +++ b/boards/espressif/esp32_devkitc/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/espressif/esp32_devkitc/board.cmake b/boards/espressif/esp32_devkitc/board.cmake new file mode 100644 index 0000000..ad53de1 --- /dev/null +++ b/boards/espressif/esp32_devkitc/board.cmake @@ -0,0 +1,11 @@ +# Copyright (c) 2023 Espressif Systems (Shanghai) Co., Ltd. +# SPDX-License-Identifier: Apache-2.0 + +if(NOT "${OPENOCD}" MATCHES "^${ESPRESSIF_TOOLCHAIN_PATH}/.*") + set(OPENOCD OPENOCD-NOTFOUND) +endif() + +find_program(OPENOCD openocd PATHS ${ESPRESSIF_TOOLCHAIN_PATH}/openocd-esp32/bin NO_DEFAULT_PATH) + +include(${ZEPHYR_BASE}/boards/common/esp32.board.cmake) +include(${ZEPHYR_BASE}/boards/common/openocd.board.cmake) diff --git a/boards/espressif/esp32_devkitc/board.yml b/boards/espressif/esp32_devkitc/board.yml new file mode 100644 index 0000000..fbd9c38 --- /dev/null +++ b/boards/espressif/esp32_devkitc/board.yml @@ -0,0 +1,6 @@ +board: + name: esp32_devkitc + full_name: ESP32-DevKitC + vendor: espressif + socs: + - name: esp32 diff --git a/boards/espressif/esp32_devkitc/doc/img/esp32_devkitc_wrover.jpg b/boards/espressif/esp32_devkitc/doc/img/esp32_devkitc_wrover.jpg new file mode 100644 index 0000000000000000000000000000000000000000..9515257dd9a0e1ef73769e91d7226f0dcc9c6c98 GIT binary patch literal 77420 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 tQFb_)*MCSKWmiyOMatY +#include +#include + +&pinctrl { + + uart0_default: uart0_default { + group1 { + pinmux = ; + output-high; + }; + group2 { + pinmux = ; + bias-pull-up; + }; + }; + + uart1_default: uart1_default { + group1 { + pinmux = ; + }; + group2 { + pinmux = ; + bias-pull-up; + }; + }; + + uart2_default: uart2_default { + group1 { + pinmux = ; + }; + group2 { + pinmux = ; + bias-pull-up; + }; + }; + + spim2_default: spim2_default { + group1 { + pinmux = , + , + ; + }; + group2 { + pinmux = ; + output-low; + }; + }; + + spim3_default: spim3_default { + group1 { + pinmux = , + , + ; + }; + group2 { + pinmux = ; + output-low; + }; + }; + + i2c0_default: i2c0_default { + group1 { + pinmux = , + ; + bias-pull-up; + drive-open-drain; + output-high; + }; + }; + + i2s0_default: i2s0_default { + group1 { + pinmux = , + , + , + , + ; + output-enable; + }; + group2 { + pinmux = ; + input-enable; + }; + }; + + i2s1_default: i2s1_default { + group1 { + pinmux = , + , + , + , + ; + output-enable; + }; + group2 { + pinmux = ; + input-enable; + }; + }; +}; diff --git a/boards/espressif/esp32_devkitc/esp32_devkitc_appcpu.dts b/boards/espressif/esp32_devkitc/esp32_devkitc_appcpu.dts new file mode 100644 index 0000000..62427d3 --- /dev/null +++ b/boards/espressif/esp32_devkitc/esp32_devkitc_appcpu.dts @@ -0,0 +1,30 @@ +/* + * Copyright (c) 2023-2025 Espressif Systems (Shanghai) Co., Ltd. + * + * SPDX-License-Identifier: Apache-2.0 + */ +/dts-v1/; + +#include +#include + +/ { + model = "Espressif ESP32-DevkitC APPCPU"; + compatible = "espressif,esp32"; + + chosen { + zephyr,sram = &sram1; + zephyr,ipc_shm = &shm0; + zephyr,ipc = &ipm0; + zephyr,flash = &flash0; + zephyr,code-partition = &slot0_appcpu_partition; + }; +}; + +&ipm0 { + status = "okay"; +}; + +&trng0 { + status = "okay"; +}; diff --git a/boards/espressif/esp32_devkitc/esp32_devkitc_appcpu.yaml b/boards/espressif/esp32_devkitc/esp32_devkitc_appcpu.yaml new file mode 100644 index 0000000..8f2cf6b --- /dev/null +++ b/boards/espressif/esp32_devkitc/esp32_devkitc_appcpu.yaml @@ -0,0 +1,27 @@ +identifier: esp32_devkitc/esp32/appcpu +name: ESP32-DevkitC APPCPU +type: mcu +arch: xtensa +toolchain: + - zephyr +supported: + - uart +testing: + ignore_tags: + - net + - bluetooth + - flash + - cpp + - posix + - watchdog + - logging + - kernel + - pm + - gpio + - crypto + - eeprom + - heap + - cmsis_rtos + - jwt + - zdsp +vendor: espressif diff --git a/boards/espressif/esp32_devkitc/esp32_devkitc_appcpu_defconfig b/boards/espressif/esp32_devkitc/esp32_devkitc_appcpu_defconfig new file mode 100644 index 0000000..4854664 --- /dev/null +++ b/boards/espressif/esp32_devkitc/esp32_devkitc_appcpu_defconfig @@ -0,0 +1,3 @@ +# SPDX-License-Identifier: Apache-2.0 + +CONFIG_CLOCK_CONTROL=y diff --git a/boards/espressif/esp32_devkitc/esp32_devkitc_procpu.dts b/boards/espressif/esp32_devkitc/esp32_devkitc_procpu.dts new file mode 100644 index 0000000..b92d20e --- /dev/null +++ b/boards/espressif/esp32_devkitc/esp32_devkitc_procpu.dts @@ -0,0 +1,146 @@ +/* + * Copyright (c) 2023-2025 Espressif Systems (Shanghai) Co., Ltd. + * + * SPDX-License-Identifier: Apache-2.0 + */ +/dts-v1/; + +#include +#include "esp32_devkitc-pinctrl.dtsi" +#include +#include +#include + +/ { + model = "Espressif ESP32-DevkitC PROCPU"; + compatible = "espressif,esp32"; + + aliases { + uart-0 = &uart0; + i2c-0 = &i2c0; + sw0 = &button0; + watchdog0 = &wdt0; + }; + + buttons { + compatible = "gpio-keys"; + button0: button_0 { + gpios = <&gpio0 0 (GPIO_PULL_UP | GPIO_ACTIVE_LOW)>; + label = "BOOT Button"; + zephyr,code = ; + }; + }; + + chosen { + zephyr,sram = &sram1; + zephyr,console = &uart0; + zephyr,shell-uart = &uart0; + zephyr,flash = &flash0; + zephyr,code-partition = &slot0_partition; + zephyr,bt-hci = &esp32_bt_hci; + }; +}; + +&uart0 { + status = "okay"; + current-speed = <115200>; + pinctrl-0 = <&uart0_default>; + pinctrl-names = "default"; +}; + +&uart1 { + current-speed = <115200>; + pinctrl-0 = <&uart1_default>; + pinctrl-names = "default"; +}; + +&uart2 { + current-speed = <115200>; + pinctrl-0 = <&uart2_default>; + pinctrl-names = "default"; +}; + +&gpio0 { + status = "okay"; +}; + +&gpio1 { + status = "okay"; +}; + +&touch { + debounce-interval-ms = <30>; + href-microvolt = <2700000>; + lref-microvolt = <500000>; + href-atten-microvolt = <1000000>; + filter-mode = ; + filter-debounce-cnt = <1>; + filter-noise-thr = ; + filter-jitter-step = <4>; + filter-smooth-level = ; +}; + +&i2c0 { + status = "okay"; + clock-frequency = ; + sda-gpios = <&gpio0 21 GPIO_OPEN_DRAIN>; + scl-gpios = <&gpio0 22 GPIO_OPEN_DRAIN>; + pinctrl-0 = <&i2c0_default>; + pinctrl-names = "default"; +}; + +&i2s0 { + pinctrl-0 = <&i2s0_default>; + pinctrl-names = "default"; + status = "disabled"; +}; + +&i2s1 { + pinctrl-0 = <&i2s1_default>; + pinctrl-names = "default"; + status = "disabled"; +}; + +&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_default>; + pinctrl-names = "default"; +}; + +&timer0 { + status = "disabled"; +}; + +&timer1 { + status = "disabled"; +}; + +&timer2 { + status = "disabled"; +}; + +&timer3 { + status = "disabled"; +}; + +&trng0 { + status = "okay"; +}; + +&esp32_bt_hci { + status = "okay"; +}; + +&wifi { + status = "okay"; +}; diff --git a/boards/espressif/esp32_devkitc/esp32_devkitc_procpu.yaml b/boards/espressif/esp32_devkitc/esp32_devkitc_procpu.yaml new file mode 100644 index 0000000..7a1a124 --- /dev/null +++ b/boards/espressif/esp32_devkitc/esp32_devkitc_procpu.yaml @@ -0,0 +1,22 @@ +identifier: esp32_devkitc/esp32/procpu +name: ESP32-DevkitC PROCPU +type: mcu +arch: xtensa +toolchain: + - zephyr +supported: + - adc + - dac + - gpio + - i2c + - i2s + - watchdog + - uart + - nvs + - pwm + - dac + - spi + - counter + - entropy + - input +vendor: espressif diff --git a/boards/espressif/esp32_devkitc/esp32_devkitc_procpu_defconfig b/boards/espressif/esp32_devkitc/esp32_devkitc_procpu_defconfig new file mode 100644 index 0000000..ea5684d --- /dev/null +++ b/boards/espressif/esp32_devkitc/esp32_devkitc_procpu_defconfig @@ -0,0 +1,8 @@ +# Copyright (c) 2023-2025 Espressif Systems (Shanghai) Co., Ltd. +# SPDX-License-Identifier: Apache-2.0 + +CONFIG_CONSOLE=y +CONFIG_SERIAL=y +CONFIG_UART_CONSOLE=y + +CONFIG_GPIO=y diff --git a/boards/espressif/esp32_devkitc/support/openocd.cfg b/boards/espressif/esp32_devkitc/support/openocd.cfg new file mode 100644 index 0000000..338e6e4 --- /dev/null +++ b/boards/espressif/esp32_devkitc/support/openocd.cfg @@ -0,0 +1,5 @@ +set ESP_RTOS none +set ESP32_ONLYCPU 1 + +source [find interface/ftdi/esp32_devkitj_v1.cfg] +source [find target/esp32.cfg] diff --git a/boards/espressif/esp32_ethernet_kit/CMakeLists.txt b/boards/espressif/esp32_ethernet_kit/CMakeLists.txt new file mode 100644 index 0000000..1185669 --- /dev/null +++ b/boards/espressif/esp32_ethernet_kit/CMakeLists.txt @@ -0,0 +1,6 @@ +# SPDX-License-Identifier: Apache-2.0 + +if(CONFIG_GPIO_ESP32) + zephyr_library() + zephyr_library_sources(board_init.c) +endif() diff --git a/boards/espressif/esp32_ethernet_kit/Kconfig b/boards/espressif/esp32_ethernet_kit/Kconfig new file mode 100644 index 0000000..a629719 --- /dev/null +++ b/boards/espressif/esp32_ethernet_kit/Kconfig @@ -0,0 +1,7 @@ +# Copyright (c) 2024 Espressif Systems (Shanghai) Co., Ltd. +# SPDX-License-Identifier: Apache-2.0 + +config HEAP_MEM_POOL_ADD_SIZE_BOARD + int + default 4096 if BOARD_ESP32_ETHERNET_KIT_ESP32_PROCPU + default 256 if BOARD_ESP32_ETHERNET_KIT_ESP32_APPCPU diff --git a/boards/espressif/esp32_ethernet_kit/Kconfig.defconfig b/boards/espressif/esp32_ethernet_kit/Kconfig.defconfig new file mode 100644 index 0000000..5a36768 --- /dev/null +++ b/boards/espressif/esp32_ethernet_kit/Kconfig.defconfig @@ -0,0 +1,15 @@ +# ESP32-ETHERNET-KIT board configuration + +# Copyright (c) 2022 Grant Ramsay +# SPDX-License-Identifier: Apache-2.0 + +if BOARD_ESP32_ETHERNET_KIT_ESP32_PROCPU + +config ESP_SPIRAM + default y if !MCUBOOT + +choice SPIRAM_TYPE + default SPIRAM_TYPE_ESPPSRAM64 +endchoice + +endif # BOARD_ESP32_ETHERNET_KIT_ESP32_PROCPU diff --git a/boards/espressif/esp32_ethernet_kit/Kconfig.esp32_ethernet_kit b/boards/espressif/esp32_ethernet_kit/Kconfig.esp32_ethernet_kit new file mode 100644 index 0000000..338226e --- /dev/null +++ b/boards/espressif/esp32_ethernet_kit/Kconfig.esp32_ethernet_kit @@ -0,0 +1,9 @@ +# ESP32-ETHERNET-KIT board configuration + +# Copyright (c) 2022 Grant Ramsay +# SPDX-License-Identifier: Apache-2.0 + +config BOARD_ESP32_ETHERNET_KIT + select SOC_ESP32_WROVER_E_N4R8 + select SOC_ESP32_PROCPU if BOARD_ESP32_ETHERNET_KIT_ESP32_PROCPU + select SOC_ESP32_APPCPU if BOARD_ESP32_ETHERNET_KIT_ESP32_APPCPU diff --git a/boards/espressif/esp32_ethernet_kit/Kconfig.sysbuild b/boards/espressif/esp32_ethernet_kit/Kconfig.sysbuild new file mode 100644 index 0000000..3a2d17a --- /dev/null +++ b/boards/espressif/esp32_ethernet_kit/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/espressif/esp32_ethernet_kit/board.cmake b/boards/espressif/esp32_ethernet_kit/board.cmake new file mode 100644 index 0000000..2f04d1f --- /dev/null +++ b/boards/espressif/esp32_ethernet_kit/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/espressif/esp32_ethernet_kit/board.yml b/boards/espressif/esp32_ethernet_kit/board.yml new file mode 100644 index 0000000..b7a9626 --- /dev/null +++ b/boards/espressif/esp32_ethernet_kit/board.yml @@ -0,0 +1,6 @@ +board: + name: esp32_ethernet_kit + full_name: ESP32-Ethernet-Kit + vendor: espressif + socs: + - name: esp32 diff --git a/boards/espressif/esp32_ethernet_kit/board_init.c b/boards/espressif/esp32_ethernet_kit/board_init.c new file mode 100644 index 0000000..1afe1e4 --- /dev/null +++ b/boards/espressif/esp32_ethernet_kit/board_init.c @@ -0,0 +1,28 @@ +/* + * Copyright (c) 2022 Grant Ramsay + * + * SPDX-License-Identifier: Apache-2.0 + */ + +#include +#include + +#define IP101GRI_RESET_N_PIN 5 + +static int board_esp32_ethernet_kit_init(void) +{ + const struct device *gpio = DEVICE_DT_GET(DT_NODELABEL(gpio0)); + + if (!device_is_ready(gpio)) { + return -ENODEV; + } + + /* Enable the Ethernet phy */ + int res = gpio_pin_configure( + gpio, IP101GRI_RESET_N_PIN, + GPIO_OUTPUT | GPIO_OUTPUT_INIT_HIGH); + + return res; +} + +SYS_INIT(board_esp32_ethernet_kit_init, PRE_KERNEL_2, CONFIG_GPIO_INIT_PRIORITY); diff --git a/boards/espressif/esp32_ethernet_kit/doc/img/esp32-ethernet-kit-a-v1.2-layout.jpg b/boards/espressif/esp32_ethernet_kit/doc/img/esp32-ethernet-kit-a-v1.2-layout.jpg new file mode 100644 index 0000000000000000000000000000000000000000..a7518757ba92a7c675458c00bad250ac55f11fc3 GIT binary patch literal 36871 zcmeFYby%C*wl5r93dJc7MT%SS6e#ZQPJsjnPH-*K(n8T-Ek#<~TigmQ(4xf&6oR`H zckNBrUTf{O@7d?m%L);48bAg0 z2l%-IkkoN>_jdPkboXEq;u8Rf%c*K&Vgi0$jCAM#0P01DE(^fbM^X7fTwLhTl>pcR zd_ZwNVZhHtK(V4f)E)p(RpkQUqPk!MNYO9=XsFV!n+6T*w|65{nfCXx6{^hfI}M6A zKoAWbK#Y1vF#$lIWBx|(iz@%RPzwI``H%NMbYS{jK1$Ntze_`Zi}xG#Bmn?`@q2j@ z=QlyDPuHjR(IVp8!8V@{zxXjh!>Zo5>d90CkgM z-fQ{9%mf8XF&m3$3TS%BLmZ(hfiQ@Epq7DMptGF>nE8=3lcYb$-_^qv;%&p^@9N^_ z1@f0-{*5^ZRsL1Y&&>22iMO*9vx%k-le{|&!X(Tm%qPH$0?rr6jN$03 zV0I8iUzD0Ge+cvP)`R>V&wtSF4`Kh<9Yy|UX9y~^|GDU2E&pJYH`M+=A^p|zC#eTW z9tN@Tc83|bySqp+%l?W(roWFrd3h$FfS@=Nho+4k)a}=x@X}M3V^UR=7ZsEc73Br;3I3*p zrY1<$&CA=y%?_ffAjOQbfDZ})8lWd^Z(a2{w*q0pucPm_+4*(i07XcF#VP&KsI)NL(T5jFoS@Z zf3JrAlW6?!`TcKf{Tv}ESNwJ434?@zAVI-DM&94Zyxi@*{cKJwTAaYZK3@{0^|W0 z=;*&*s0$PI!otPE!ojxPyP^4&hx=V#2#5ckkRGrX(gIBd4ICARxL& zMM+LYN=`xkiwPPAst+a>9u^iJIpG~b^8e%O=Vt&3F5na`5d)1GfKGyjL4x-43xEN& z1Br?8Yrpi*3kw?u7bOiH44-ATBwx ztS$u$(8e=)1dozcNKVfnJV^nbQdK*;cu!bVUf5J2m8U#Ln&BaxBQ2k6$ur!}(m-xkHz_^&&=gW~&uV&7(leS*M zc?b2TN@66B*pq;U5n1o2M!h_VUFgadJA%b=<}D-AgNRGR}kw3@APcl#+#_eK!i z4ckp3)!a{??K0{4Vg!`|s^Jgt5oo!LjBG5Rm$w%Y!;T2MdE|2GJzVDGK z`cQRM?k=lMWnkT$Ai)QUg zE&0-bvD_M&x5K5qsS{fD#4T)dq|&{%Cyb#RGjU5ryFrbL!p^#7VNV*mZ_X!kLJMz`?rr1j43iMn zOy@yorhk;k`>JwiiOR~2$kGCtZ*X9f;X|3iyBHFFpRlHB{>Phh2(eWA&Ph7#gTkDJ48>o#aJ9 zyaahF&RrUV^AHcOg6P2cDyExQ?s^;HhSz7cuf-EFB*3Y*7oMVmF!X0d`s6xs@=BGCz?nNQF{` zno-(oqwL&5750);kJk^BpM_Gg8NWHeV4?V7ooXy52SK*PPc`odTI^6H8SC_!8aXD! zt9>=q3XU?;!xd+WxZB91HPCd%EL6iK^@xHsQ3!Vsr{AnTE@rF->L#FPf!S~AS=!WN zpNeP7o|^AN)!lK2Sla)D-Ry@LzD={A5X~!(At9L7mXAu+l zSN!_B-o|&XPm4L+eYXuM=W`44;c6RPEHAERvermHy7IiIgbv#62;TqjJv($f?=~H0 z+xT>o-E&gst8+zVyqQu(LE-C#S1As$`|OMCV`IuyDaJy%H9KxqK2FcUJF{Os;?>KI zW9&)1-2Yt|gn)@<1nYsKQ5j5%&- zc5>8pEHhEhfH9+~B}OPJeTzXOFi!-%-k~_wGppEPQxx;GQDP*$%UYC4lwNW?`b;k@k?T%C9JHfy}T@ z8&+xj0z!OhDECAng}_1WBy`fyTTF!|*_kIv)gE4LCcd3K_pVGm$e1b&^UO}Ln0{O@ zFY!=?i$}8GrTE!m`Ydbouu{)8e(D7$qjtZE$&Tl@8jgHZLriC;1uBj~fb`n{=|@tQ zsfuK((*nOH%69l;2^?;HWIOS7I!0>~qiHidpQ`8X(9>Ixo|)lpZaoMa;`fomc-3@pm^YkUlrb`OMe_OnJAtkxg;-`! zBZgR2hExEJfbt+)kAEGwZ;F5Y( zc&6^uuvqFu6*k)2AwG^i#8S0iTw4CEd&D5i-7-h$cQR_6tpa#1O1Yn+zyZ<o$aE63? zb(hy9h_c(B8(RHnDb0=g3DD*x)S51P9}^RQ<5VY7cvQchgZ?_704ETKFD8IPkJY05 zg({^>$s0zDJ=LV9cPrb(lUxl6T6PLb*epdv+3)vO+GV4#s=(`Z_Hi3 zFv8``-Z+N8cn~vhV4tY^0v0YQM6ySM5vKelI1z75>ug-Jw+TuK-wrOVh>+0erHjpr zd^G`7CdTb!M#o8b>OYj_`xOzgNUuKL-Ne0^wPI?f0w$?Zp)e3!!uk4CH%I@A11L)| zt75e6Ew@HR-TQ)ft244%KQ_P84;lnenaqB?PPsLm)f^33)whP_Q%)^YuE5nYO2FJ& zl%j@-<)5CNza}Qm&&;#~DJ7J&6oO)2>w6mK*V#N>(Tv|?U63b|Po?S}CMv8QbANMv zPwi!_U+MV!ob#y(TN-U`>!fS$OAny}Vjjh@ol)e(bEv#3>)G_&_oDn5o!P-9KeEAK z(l!qdB>~ThAbGHL!)V{ctL4`=a9l97l#)$eX#ZuBEr4K!gMCeAA|^C{eraXfB;sRO znGZ4hr`+&(ZXFyE3-Dt`Ii-(n7azsk)BdaO<1 z8}}^&b1Rw+M=%^77%rkQKyw#YJI%oBMke5B#ZFr~!#l8H8vDe%#(cGAXX_;vmZom- z!=QQB38u*S5ViF*0SR~jRQY>nQA^=T8~b}?jd?}-l&c{H<-^oIhaUZy37Qo$ECZ=^)OyU*?xJyg zzn|tL6w`Y9E&Cp}Mx)S5thsJX!y+t>SXt@x!NQ!mm`AU(<;M?ZHpWlt9Aj&QYVWQC zD=`J1JxdVlx%&jD9Mf9XxUfN(7o0G6UVjwDL^<14{48r(@2KJPsL=g&#u9Dz;jq^Z z(=B}X1DmpqVt1zP-@?_z1Z1Y%nAcqGiLS37Fs}baLRy277=Q*&- zXzyyqD~eGU!7J!Lv)u*f0F@-dX%n8t%Y^zFaxpxb=`BpMC?hPxKh$48N8lKcl}zxK zxS2hg^EoxYtfPwno7I?%bikFTQ$M_%a=?~*+`jYlNQZ9y`FLA;F=)9lo+`wsiKy8ed?Ejgv#-;mFCSFMZ4>M^T1k5|}>$4<`pRucGD~ zHck=E^;01wWlcj=&`s7sTlZD$gJw@y$wwE>+p**Nn(Ph~f>re3o3{$pbUDfNKJ6ZveZ>7t zdeSZ-o&`#qloy41;OTqk-9tYClm<^;zbChpoPnzwvDO)m2GwdDiGWEJ$QB#`5lvVT z#7$J}7}7qeY4Ncem3hT={iH9S!Vb}nW|wcQnlB4}BsY(~nOe91%0@W&ZZum591)|c z+jcP&g@I$u!%Htdb7t8@F&**Mqw*cx9{;$ux;L>5{u6+o)Hx0tDrT`(3rV>=7;7yV zb}fOn?U`fcZmJW!iZ(=^Rn6xf4 zde}TQzCD}nrZM`EsmY2E`&&Ih54EcUZo zyQ|H|EnXHb=}@s?xT+2kcA@S5EX`!8&@=$Ss{B-yC7P1C-83mN36A$cZ<@oQ?5v4n zbES0WRnP!w`a+0tno#8N@#Gr_eBM4vrI-Win48qptS?hlCMpOgC&+}F2^gq-aw44f zuid3-kqQAROqlH~JEb}%y_%+{q`~T>yC-x;m%IhQ>B>y2tai(2e&zBo(oeSPiX#2h zddr+6)Tn|`u*k^?I+@<`+`kCgn{edMpSFh?uD6;kjfy- zx9cZ&g9$D0I2KZ;<~U}j2sFNh!HX`~w;u7r%ujbp$Eek4UFm5^Rm}puV@YLj_QSUT zLmMdt2{MUdAJmtw230|;Sbvl~vWV>PCjZD%CeIZsPxH$G!FKfYFv zvSwjfVzjhh)k64g6_e4eMvtf-_v(pQLIVxQxd(^78-X%Rd@o&*K2oLSBUZ?B3uj(5 zKczT|6spbAdpJ0EaSr3T-FnT^#O6zGj%FVoTur*Sd|!K*DHLxJ;+aEzxvg*y>7!|; zr)aItre7ZafpyC=O$_fo{#_NL`zF`XfD43wa-Nh-)$U8F+bBo3;|V9H9;{sR{G?t> z#%ZA;d0GRKe&ViShP(bvdgUG%P|*C3zQyT&vLOJ7e@)8vo!Yx957 zoL&8LudF06eoAQt`tCd`m`B&a+07trV@|E~6*Ny}+5wu6OL31bGkGJAg?-q;s&sp^ z*iMzpiMc3l*3LM!1KVEQ5c9fsA7{ugesfq8;aM|P6f;C9bsIn6TPLD{gcs&l7;1Q5 zbIUjObF1E20|F(Y+9l9nExAEkEAHbW#^F-$_{jICM%6A}w+%TJmJ|!2OZG^-AV>G2 zyR+gY9yL8h3JNl^1xj>J{S4-*8+19wJlg(*I3BZ_X`>1Q5E#1pI_aU?pOce5@xK zCy_Jd=QRb2l&$sSzvJ4`oV6CgC8^CVkRhH1jJI1bEtF4V!jd>Du6@o;EoPN3)ywCh z45>$MI#0DEj(j1`cLizKDRmh@06pzXo*RJCth_REqdxo?`|n7%y23*8C9`JO8h;as zm&W6$o^`nD%9r&qQqiSTy7`HgEJq&fS9$ zepwUTfJr-8@zGwvEM1aJx7{acTEJ=)oa`kIGNrJxm6h-czS8VB;;)hWSaJt? zX3`^*)6s!;b;T7z+S+4p>YQim>q;wAcoijeUvI7lz|nrn`4}~P zPi>VE((;&sJ_=14C~C7x{i&RL5lMz zi1ng)+2pH}!o*7srw&8z7Tm_~GNc;2Ic2n^w5>L{_i?FKa+>aL(>yY>|kiNlfmT#87`SfOY*4SEA<@wB3$<#|_VT(`Ec$gfbV3nHFGo1*3U{wG2ACOmMHNe z7>ELTV5aYDDVeHZZoTK7ULED#@ye~8(JOIu@Tb^fA|&`6h8gw17UMC20BZs!y}JER zKtn_JWYFre*Eq5=apd!gIUi3`PGjNYCr?shSgH{icN@BIo)Vkkz4c%o*VBLJv)ZFWcG(0tNts9>N1tJ~ro~EcB z;^z`~J*|;Y#D<2lF_Gmk+|Bf`sJtiD-z2p$!?_%Vu+~b_-#yNcV~NfM(AXS(rb}mU z_UK>Ks_578D~Ub)2sh_K+QRahe_&KG(B_D?am0uwN@jJgdNGqMu#*N8`~ABu7wSDwJwd@~8~TG5}cZ218v<%1)cj8jVNB)lFE8AiB)(8RK{rX#fuU zu^kR*vkvhCce^yG#LFZ);e(BXZg=#W3VWJY0?ryy&$2}{vpM*sTQW50v(LvNa>$$g ziErA(T7v8CED7(6$gUS(beA2y$!XNrpU=;4e4{?mDYv}GWoMR=gKZ=(ey+_Zu@nNN zwj9u})nuW1P`u}P{?KNhw!4VOe}Aqm_|{Clt=+M-MMS3_>1Ipe6d15wyqvA@JXt_z zw;*Em`|?(|QRFJvBvRdZ%V@5~K<9W#>bofU>;=2}M|4ixwSsm0BzCm3DC;khE5TL8 z&&!d8+>ofaxE8lbgedY|*lXV}BmG34;_Gb#U;5s{*)VX1Lqs6u4Uxi$`lp<>;jf!I z2`tE?PI_<{l)RP)%O>k8GAiND1%#C}B^Bi3!}1g~ZXy)|U8z_yX0quf-5rg$s?>wn z4Nsd2_0*?mYD2$dsg!IAKRl~K*U?tvh9|Z;5R;@PJ?|ljIu^%ar|}J48#JEQadkeh|m3Eh^FSZqjcD!8lH90Q7qP{~j82*R7$_e916VxqZ_uIy0A=~rH zhh$#$vy=n9sz!cTQkIrA3HSF%^u=hNAL0Xp>`ok;_LOk7LB5wN+x@3~(HjEr#TVk8fer(~ zNLs!l_1fZhtvjt>O?iUivxB}7PdnQcXTMT6hmW4k7;^BFNY&}!kjgToqrI<3M3vfC z7Le%u1Td_5FWFcW~=4MsK3`8VKOFh{=)1>=OpT1;-Oyra>cmZ|P3}h9Pe5@|t)8N!DELnuTs8#j5eS#iyrF_zx#jT8tYyxYl`(3Ey*T zsIkB6h*QtPoih)D8puqVXeT) zXkE8GbY?L>4?P=|>TJ|p%Z-ZV^|>R5FdQDzC1>=bNnK$}U(};f6hG=&up4~!faD1D zDiFuqJ-(95pV=-bI=dj&r9Y4+s0neq`qV_}V>cb?xf6FrSpVGKH73LCZ34YAtl%lvC@}o~LYwh=_+~E7vd>@pQLz21=LX#U*<@%R>;_?Pp+5oRIWAIf9A|5E z$MxsFjfwjkfheUG24~E9I}jk_*~}-{B++YahSMQ z1Y~&vAU)KdCAvyFJEY;(o0EsoH_?MtT{U7w@n1#a56n{sP~LOu-2;`qJ@uI)tl#)L zS0%b+;qIkKUTAJ`$C69wP{5N``5`*BCEgeCdVJ}zDIE^eE!s+v_;td1iDte1iECB8 ztAOQzVj0YAWrqB8r4;;vO%nbYbLPXl^xByKhC4$Db^1WMq0Z?ZQ7fO*VsVna%-Qca%#(xc})sK>tjFd%^z^lXQkw^K6A*Swz3*bC{7aD3?Xk z5YN|I0pR;FL0WJ-hoQN&n_`6Wq?d((|e<$^|SoH{EVmtto8- z?DLJfA4uz`8QkIoOX1*L%K+3lc%(X43M zUyXased|a7DG~xiggILC*(SZ$An=)KH(@`KRQ*uhsU`hj^LRsl#cW{|WpU~RmqN5* z03e?-F>M9tfh`F&_Hn&qH2VEiUt80yw7fC`Z|!|xw^MBZjsVNk$2|UY0dy-j!V@7= zusU5sbC$xGMW>RbZ7d&-*A!Pa3eiW(UDyVt4Eg-$?ex=tX`bMAn!cs6woYK%$g47(G_jvJX)L`PD`OZ?~unw7^AUWOc)6Q5># zvsrK$sg7B@i+txZrPh#{p3szlN3X{CL#_09PfYI=IYCR(>m-A+3I%z5gwh5$4~Y2W zsfW<-;>9IE4k?Z~9cBH>iv@ZzCXewk&R@v7hO7ewMqHFR;2z|t)3a@#FlXJB>`@6J)%`ZtTsw$7|qky4U ze!SczJnDk&48q@Ltp@I?OR-h=yJh!#^Gj(e92h;8wa*W{3``c5+KeqVuH6EoH3duD ziL;=W39;Y68Y^j4N;^_F#cGbx{B%mM@hqU#lBY%u;r$fsNy_hV7lx+4u+_F(oLadg zSPg-& zZhJw}X|C@KB+@bTA~_MBszJJ8k|0Ly(do2ik-E)5{`%GW?-g}|hKA~M<&7O#O{KU! zijRUr0Y&@Z5(!(N_iDa1L&l~B=TE>JQ;`QHJ=ML@u5kgMn(*EDAp_5v_*2hJUC#PA z%N{`I?u01le2(pAfBM))3FaY5lqQ@J5?{}qKFpB+i8Gk+!Ali}kMZ%vNK=o4_;sw0OR-i+c%tjWdhABoVO^cqw>+@f>@h=!5ah zkB2m!=Akk88D^;!MYTwqvPws@td(x(WNg6uVh=eXl8C#Y^=^1Ej0Qu zpwWMX%gA_>^J=0Vc|xvE+f5FOrVSI|L_L@=IoTnl9v01~ym`hscLAFl8K8bw(^_Gq zy0}vkz}6*)mKhjEjw6lNDOdPVc`pzv=JDixLEvX{n^5J|g~vo=S@Ov*&1OGgl--pK zRsfFbuEuS1H9IQ?wRQ4g`BQlr$L6pkvaql|8CNR6m~i&``k`cths3zE{&dGOCO4xo znx$e-Q)e{_S1?vPcI87m%j)|ep}Z=$D1TQoOHA9Y+YJ&>xg$o z|Gk#!Iot7r1o*A|W@gfY{{@lk>^VLG3A}Eu+egsOLxiuk;5X#PFrO%wd_L+I{YUn@g6{57^?)jVo=_dUeKm@?{&T1Wd zQ}}iB2SsXysi`Vwlez9ra!CPfKOf$JeIL;hteejT&;byJsb{x0@z!41#!hjSW<1+| zP-t3No2*WrvY-g`?0-%m%T(mW#DSS8;O*)fC( z1x6RSxU~3mh2|i1^vc@yitZ>JC~^yXcIt9rC(&rM!761ryLoV#I0)Fqc)R80;N#z& z9K~gH408?c@}%A^id0{DMNTSXu}`(wj+i+{4sKFzBYQRdVj{Aa&2^1pQxH*3UNgna zjw^~CN=pu*+`Xm{>h8{RFD0)ycI$WZ?eC+Re(K5F&JA#wlv` zy|STO*V1_UeHzcfl^P}>oP9}&8i%V*Iwv10=IN^01TG3Fad^EFRiHa;G&T;C{|3`( zY;0@`=E>g_rq>S7(zpLiLba@)bWeXg8?bX3JiSWi?;I>bwQ4`nWbKSH06BMbcY zCgQVkSN)43l#<@KRfsZ^8liR7$*Zz=NqSx@YAI8FkB*ugEB3vap0uX-^T1p5yf>TN z(-&FqUnSZ2!S0Y6gLR$wkuJ@YZrdiQLPJK{JC|OpL#L8(id1DHtrb=tTucroPA=Jg z)QN!55mGZC`#f?lz)VcT+v<#Kv_J~K(>bhXd@SN6U5uTr>6dr@jO=g$eE(FMhMR}; zZ^rzt)O51?$2zO@s}!v69yWAUGZ1*>rNK4;hv5QqTBYe`C9WPBB%1o#>aCmGoScOb zaKk7r|8s7o)Zus@$$;6bOWg6~N_-wIV?8F@pzY-Zj-Nz9G$=5cvlna{G~_v*7A>V5R+E1){1o&7E$7mr4#<^7qSXwLjL z0)9fFLF=Z{5S+eIepZUXse772MiZtGVtbwKOFrb{OOK*ESh{F;5kC$8q>>FrTrMxOiJ&SamzbpvbtbmJBU zEp;b3I}VljBTE60%~<~~V&o>t2B5YhD`;+1vkGU|xENUsnpvWfV-}hV(AG+OC*AH2h%^IT3R4kjzi7&bsmjvzM{;kmgEj<(Mp zk;lzE#+G*I%DEwX`_b&O!7&09gkbBg(&?wqPQ#BGB-FfrZu@4z!&ox>s5?!XN#y(K za61`$waajkK3__b(fycQ#C?^DNotxjds$ji`#pu3^ref${2pBVJD7c0%`Gn-cW}#! zV)Z&*%d*il_P;VW_>=W!2vDo6cv$4%5H2qTT=BTH%nlVlj5$%34Ja?E*OgUE8rL0b z=l;0yPIoL(flBA|ViPm5;p^kRh}=amGAK0NU3ZR~PmIPqOR{&5Op!!3-m(_Wcrk|b zTllNT;VWpRU+2CI$BmtR2npvbbxo;TifQd>cBi=tfl3Nd2_M`b1CD5jmWh^*M-eq{ zE*l_)29*+!|5el-l~#x zZ=|Oi40X9)h3;Q{`=XMEvqw~#(7tYw65{@0{5X)l=)u`cl~KRFd62n1^7KnRZ26gT z8Fk4Hk=5gS2gT-9W4c*m+%pdo{6>e}I8Lum16Y!Z%)dlC<%#PVw-^(I^eFS#JTF-) z>ZDhHC;E|gzqPr+xvK^#eM{fk!ul!Z0!!{$^ja}~&#DX>OK%rZ0w@M#V{SWTzB}o! zi4f*i+tU_4uHPukG93#`%jSyh;#&Y+yMG-kzPhjw z&biB|@`5o-L*205$)?~+w9!zN%KPbP??C$2y?B-DgQE9x1P3Re!QhSjbeu8<6;c!%(AC_j}Ju@O0@TQ!np&~OnT45$QWNlt^qG|d^K#WpbJ^0PVH7cV ztWGhVI383b#KqhLc@~D>&04O8$IhUHzHH^%O7aHgmhmRF4|Xh4cM?r6NnkiNo__d4 z`7MO~GrP1<0{7`nxK)FA`S|IwXJNfgx4fn<@FC5!z-SsV{G@uIy}_f`m|#XKaB{50 z+xIKJ`~LU8tVhu$>*#HbK?9sTcGQq_d(AgFiiQ-;T==2i3*uS08fH}q{0XMm42SXv z)_aGNSie^q_;Q&;3n;hO8{1i*IW&xScjD64F7z~Y1!L)VCwvW$6S(Ae7af?=6&6Xm zdL|SNT~Cu>i?d0!OGPlY&?ILQNE6Gj46SXoRy-KXYeZI(NwI0VDwJq_5IRdUjLPZ= z3og2!NTWf7sp2`^mHDw>KTd>l!|6oKbu2zQt9wq!0AVn!Oxo3&AAv_OdTNQsmamt$ zcMn%NjA)7PZrJcF)RnkfL5x{%puUVfvE3yvo2h)bCJ}u8)U29(!V*A!C+x#r2j?wCSg5=cOb9=Tw*p5OM`2iWT|BYI_Ejz6zU(F`q#6z7q1E1r2Zh2kM zv&_4SZbL-4bu6SVW_vuSLy2)pFnWd(aJEkv^xw|6iqDDM!++y;5h0HyoQfdnbuY!{ zFs6Imw%txm-7c-wy!6n-qR$?=fD%c$#yZl=SS20?b-ck&bNnLH}^}IrKxvJRQl%@Ek^>*vpK`CSQc> z+PXHqa$B#AqcW}=WsJ&34n->8GbfV-YU}4s@NSk1rtP-X9rM~zbr<8EJqKZ@5k%>T zDOiszql&4Uv7!ZE!jYYNn%K4R{yq^GGn_!cAKD4Gi=oyJY=@H2gbmyVVMWhBOJy2e~(cXjD|(MB;gMW41!iu$%@ zcr((N7qzQ&&tcAPx2sRZ&68oOM^bj*fZl3Q42SS1!22h_CfW0}IbuGbO}B6^Vv(Xg zL$y=KiY417e13#QbgE~^2it4fVLETB0+Raxvxa(P@i^Y2%^T3#+y_iuc z3v5H%<7-%w(Ac+_>+kTlsXCvxpS$aN!!6T&kirxO!bW8k)wHRuC1tT*imJOGn1wjq zJi`e*ZWHv+tNnLHvhGi%bNikJeFRE%RBiLtez0V4WGl;%#jGPA|9I}Fu3C&eOvJd*9g)tZ>T(~vSUl>!b>Svh6l2=MDLf~wN`TnLP6}{v;k5!z$sp#%u!KVF^ zh;P=`8OLV%kNs{oi#oD-yKJM1;-@U|$6&#gScUHZA{=e*6Va{Ecas*h?$(u)YGt)B zbFQn@L_K{otJgRkBoiE~aaZLBS|76#h88=Hzo)zuki7ABD)cr6`w%%9x#H6fu+52w z4%f{%5f~bhj^-FjJ!Y~8o50754 zcNLD#DDi3Kmg_P!7n-LJZhuT*;C5gl#h6_@9VDc!n7kM&4)qT`i=g?N2ATL+nx6jJz+ty-g66Oj-Sly{ya`4S`RBo7@QYa;^`FpCPF9Mwl zCDAs+gt}|HCL5dZJ;xo8Q zDPG*^;r->D+`PFtxw(H#viBr=_GD*gJ?mNPyFTBi_K&`_{{VD8pQ+M;q9OZUO%Fa! zR5D9KO)ql3sl=BFqq6sU4PrkZW4Y^Yf<^PQ&An`WuK9jblHdIdg-~*>#TDE&R<;iu z!&*3e>=gsaV2(6 z2|`DM5#^wMWfO=!ECGIe5GDS&NZ8h*y;kB%v zc7q?6*&>=~C{j7y{LPqm4DmrMqVHYffGVG)_ts873~8)qqCx<`oQ}p+g<2_vKI7F|mhNwA0qNrl~?cTGvZ81FqS#7!@$#@ZzXj z%+`x1{gJzu3ZSwGV^FqWoqJh%Wzl}uE~Fx#E}tl3k)HA+iLQFwnZVUxCXRCzmx9Qg z$6wB8rmo2I`MKJP6a9$MHVGI9f#=Pi>-g^PXTOAoa_dVgU%l0{#4bwzN&^fHlF8j_ zPo|_|S>qVK8mtZCS_I=bRH$0ANj|YHpEe&spSC44rHZhSHsBHU0OQG2m zzGIcbgU_TTHgbv3(caSkyU4N{tQ6jI3=Xh4HCb0~E|1uAzggU94fM)CKYGs>H>iuk zGN_$v3EuID<5KFNo#_-F_p30-vV&A)E1+-djkSdavV4eR)MiD4P@1A!4)MaAiqtz= ztejM~t1&>>#S++DBjieccXT;pgy2{vvd^i<^Utt0qaexJHY?2SO=Re);11reE6L?cDJpr>=yww1 zRP(ufRVOxasp_vPAoV2+BvKgB+Um2rX%XACIao&(jsB!NUN14;CVPy8*2 zTy9=4{=U&MdwjO0f&fNxVyDejgRh#{nhu##R6+-SvP*ZD7__{k^b%au8lH4L8jFwV zvusyh^bde@uyJ&BGu*16e@=X}<9qQB@UezB;5FPQ1$t_0fZXPNACvGaP}|;?YmFcB z$c5J%Dq6v+`S;*QdbVGCfQ+_2dW$NO?~+FRf_K)8tgt928fuT@JvlNYd%fBFX^_!Q zECfRxg?G;Edz4y}+n7*x>sg|Kxxlsu5#T>Y!UnGrCa)~xn1FN!TSREnKjIHzJZU|stpc-mWL{o0VP zzQc3SO~PnG%AIQDcMt5tkBn&~a*r|kbT3TsGX45DwG&K-ug%6*yvZ9J?NA-442zlj zHgmpNZUGu)c5B{;MVJ%h_}%BQ?kcZNaSV`5gx?3Sz`HEWHhcke;zpXkFN#~LZ~3}a zu-cc-;X2ATtD=+GsN9qYXM6N?4vwaClNW55rrJQ!>P6n*pKV(aAGFt;CGN%Vbrg#J z>^4!*&Id>2+f&PTrmzt-u8zld-^r57Z$-h=zT~EkNNKg9pkAVpuqw81&l)^LYCCmw-e7^`BvkD7 zk7m_|fUfVc>A+0fBtTbfMYE);els5T5L-C)OCkpk{V(O;U>x?J=|YwaEuXpT0tm-teD>Ya#y&ZR8@&qK_+tM?2KOQofL+Wh`A1G%;ncK+_AdzO_Oh6LK5nFTHn76- zYP+;f)QIDkJ$W-<70n+fy^9S37R1De^oT`}s;Rm$1usZnEt}5F>e4+?cXhljP{*ON4@1$`yn5`1I z?|I-YF_;h-)|pS<4a?gvQ)u~uq?TUG^RKGES5iMTp?Am@xAStS^Z; zOqVp=oUU$Te{kjjM=7_bVypz?7VL}(d`P;#(tWqAftw@TJk0>DtSt`CZ^M|>QrV~Ar<(*Qdy;=cz z?+7qO1zkM`VlAIQmkhtV_{gIQKpgKTW|#R4E8Gl^&a@`U5F^W|?nf#Ze=*KgIA50s z;5710>?u1`##UbPMg!eFV#;^SQYdE$`6VlQw=n(A(cvH2^?p926KxKiQHD?n?}>Jg zOkM;!H2cW-OD)CdZN$bFm#Q+OV6SxHk|8G+Z%^U#>EZwyMw~|!M8B?4J~c6BRMMkD zD|rv;l+`sA7UTUG&k0psaY5&Wc|87AjR)81+O;4KAC~IovvD4f!8$%_D)OCWio}jP zS|zQ(tiN%eKBLrNw&=P?^D_6_Nv@%jXO2)ts<$HCK^`@ltK-t=%5)USinNW5-ir7N zZdVKpR8cn5Kb{TJQ8Z^%`;|{s01x{iG{0`=%lx`mt;EhJI%IyKX)v-Kht)(>4D+k- z(~3r(;a#{0{`y2iodmqc7Gi1~Uwp zNk{IW7E3Kyu9;eqHs?Cw<>>#gTLgr?XJD923BrK`g#8cKmn1S0Th+pJ6Qmi$62T!v zb>|+B>s0yGDK$}h1+fA`jf6=)rH{a1o=d^|%{jvF(~dE4UncOT2zXMCMKK+(|6*tW zeuImK&0UimLCZkNckWgjv;W~KPcrvwm=ycV+!7>PS{GiIC2s`AP8+tE6t_Ib|+=EL8*D=A0SA`$3aud?xmdHKdm`Ew_=TJ zXa>%vPaz7YbU&8{CYNaVhLtd+Ko7sJIj;Xuz6T$oQXoZIt!#xsXdi8-Svr1V} z5_*UAhCcBFK5Hk-J(NCawU}udw0M1b4@7tTmB|3VO|xt4=xl@i{=0Nj^+qPqW_reW zKR=;XfsDgmH#))C&j;sgqTslcaqPXWVVtT>z}3kR;(<*YynT`ZNS99mVNUR80(X8; z=;4b~lau>DCd8-DAFhqJ49J43w0mUmVgy(|u#bR&-_PYZGN{qM+#QI<{HEn9a4U8e z=^nrkZrz*Tx)>89nn#{B)~U3wP1k~Zg0mH%(XTB`*08>@9)Z}=%B9{Ve#23+F{m6o ziEG5B2>6G`QUzX5Y;`?S2mX)N#z{#HB^@o{9Ov^))a; z7)t?(nG>xR=^}Ser#NE1ahXYw@A})D(S2PVTIeec$-$I_1*XT;vrowfT-&tronj4Y z>!&rS#-l=-eaHw2-e0+tmdqA$5wyb5gRk`-BWu$uy`5&-V|GY|l*_`U;TN-G?EZ1ImB0+w+&EmaW~H%-KF9CZVNEBB4?$iPKdv5L@cn9&D?2H zZg#{ruT46eK5DC~Q;7LPpr!cz;c1_6+mZsM;}VnzaCzYRPC16o>(J}tgYsGh|6#~> zbrmbQv?U2ZRPy{TK{^o`NQJ$Ydiv+k{)DQFEajopb9`chxgD=NDLWMWeW< zX4$pyu?AmLz30I@Z#y1w7clmIhg9NfkJ^-^yp4Ii>$hkW>0tok?0w0bJH_law@Zx)C zo9m2+GW1Rfh?HSX2asO-j&SUhl|{Qabj%f?7H$G_nUX>UHC61(p1&~&0R8hWK+5T* zHwNPMN}%Pfp4Qq_?-98RKnr-ocg?ZRZ<$u@v!u~D?S zhf;#OljpAeD!u>AI&Z@BD(t^7)T~_l%TuVQfDX50tUTGj;jc+CH{w*HBqAFb7E}wd zSjQy$tz5SgmHT_@WQI-6__hunq#nWZ=;4CGxv9*aa}f`SVLImvYrtVD{w1`oxIMXw@suRg zNKT17V{+w@f`KXAtNC;6$otjYvrZW1Dq8tf-joAtJGH(N%3G^Zi6(u$125*`X zbO*66$9gV(KA5}JP$ZwqV!|SRdj1&I4!k`u&zVieZXM+)muYsN$J6mphY4(r?zgwg z;@WxrS=pm`6Tyax7|y_0;+P<)z}Isbnxwv9UyapJSmNJ)yY!P9rXl1l!92z@p$Kzi z&X)pyd6`Zy>MZu|^ny;xxi7i2@3URTN=SFqE-MRjNs$&8s;m5U_u7*1W|a>l_Z2MD zQk2sXW}7n{?{d$aT=P-l8-8LuRrLNZs&W+=nR>}w*WtgtU! z9o|ymw5o<+;#NFK`xfPUHq=qhRUn!TmQH8VhCW3FRJ1A8Arq zG{Ch-)JtzC^^eWLelXu}ouw`+wnb^#JE8r7_<`}6&0Xy@qJ#=16l%Qw`B5P7-{)C zqTk-~Uy7oOiOABHF0VbwDQaC~T@6r|N4%hhgi0kyN{o>H5E@c;MH-an$D>B~LS*gd zLvD##v;kXhx~Nodr~q_N}}pVE(|#Fy(=8X}e6utm%4K4s&fb+K6F)pddGz1dk(aJmT9 z{E2<;>3U>Z@X%c1+S5GMQGWL$Y0mScd`Dd=*y*sHl_+OLZB=xrxT-V)6RMTukyj{k z1q{UJu;^8PY}}7$dC~k@i#V;kZcIF z7Tt{7p3L<<+s@}wD%UyG>6Y&PMynqLrYZ6zg?T8t^1|(0LdgQ%&c3i+Obx!p7;~+( zX4?jup`szT$1cv5BVf)S72eF47iE{H>?&Ee(2k*c;;1|g23xd|@o_&b_98{$gtodE z+W9B@t)7~9YOc)MBTPPnS9u0Vqu83xM}%q=<#w(7KEwbiBhV5BQaj2;dlo26_6KKM zhb&tjTK3uvk5kne3O2B`$r~SrTUk>Cevf>}0JC~v5vyTR>U8&8IQ>zW4dBsKZnv-9 zc2!C?a#mkq=Uv+)Ik~Qqv1B6nb{>hpmx>M6K#M?X+FhU^t=NAODkB`(_4r&`A7QVh zhJvH9d%WL#9`@FBTc-1cbzgcq#IsIf zU8qi-pf^tm)i;SAy)d4*_gxDuS7eTJ$MQ9opAMWl z*iN7_--VNTW(?PSA0&&*;&P>J>D>Tg;Xfm>q3sPz*;6@|j9ufgqKnN74ltY_(@SiK z>(~Ig7REI}`xptO&R^uhQ6<7XYKzpBcfZ~T_%<8-`SUHFvm$~&ApT%Qi(U1%TWzOR zkmviC*-EL0y}*^?1L$#mhto3ssb^v#W4J~78p__;rHMrLdk&xDASV0i#wUPc_QKl`P?uO1zl2@4N@gntN z;WHx23K->>ndMp33N}`(+%p?;n_(3iFx@JL_MkV{Rjyh*aJ{NSjqGJ?H7@6EqxVJI zYUX(S@zQ}mAQvkmj0cO))AMWyQwtawVeP!;3&RImOJp6BVry~Z7-P-lk)nA@jbdfG zwXhRbTI4us&w`M7yA*Td*q}A9LmCpm`{_N1T-DVdXkbf%k)pRKpb#EOxE-cwrZAm6 zomE}$e0g2skjF>2rD(I%RNBz1k#;O~{TZbCgCuCZrEw!Oz*^Q7{WIiwm+gu{-KiWl zj)OM>g#u-F?+MX|Dkjxm4_-&KpHK`mR-V2mGX}?cXs~Gm&y3c}7W1quzcKf7K7M9Z zJd-5D{G}DInC?XuZeK=_rnAV@_?H*qPMdu9g#`J*ivnxgWL_1%cN4$*^m^=>t!jgDivbdar)BrjJ}F)mUYU{)Y?i6Cv(nK;tC^oYBo-mg&p^Xz{V*vDd% z=sFve%sTG;uA+lPV)AV;&&B=y-5~FI^KwhT;_B}o#x(7iAmA}3pRKYy$4~0DA1d$I z-4aZN?Q&3B^hx832$L#V`gvKB&!{x0G(_jRkCqhtz1oiL*v*0c4Ux8_E=j;J-`u<5 z^B|G8?Vo|^_U_gLtf^^F>CXFn3XgmXcCxY}AllzvU7Vmhn~OUKPp#`K+FNA_>R|St zp<-eKHO0)ht?%I5{{Ze?ASOv@hZR04g23%b%j&s~qQV64}0^ zNlDP&c!L}BP7`N93{q^9^6rtUOVP4kA4e@B_2s!@eEQKZ7(ds$wF z(q3_k$jZST2)z$FJmbXa5DWWUF{b(E z%4})?|B(lu5b>GHx7FM@`rM=JK-JE>qIC`~x>npet3Ce`1a*1&xQOg5GUK=?QIgLo zgUBsQ5_qyN{nDaB%vy4@>`ZPvXtx1kUlFJ)QxjTlk7wJ4ZPS^3I65(ql@l$ z*N*KO2#0b@5KZlmvBJ6LAK4(eL}Nd+`R8qwRnW79~?H5KGX?mmL)UV(W zWa3+0OiuYnIpr<{(Yu=~%7PP?XYbs5$DyjREfa?mce$PISz1c3xUaR%36b;NngtVt zFS&=lZ6!!7M03aHHvQ#HbK(b8l9AAV-nLjWDf_ir4n?nKRVkDtt)MX-6{u45S@65u zxS(KzOu<#p`Wesc>;z{1=d~(GST=N1PK^>XvI1iaFA_kbI|48}p~2ge=$j=oMcHbo7;nvc$F8p17x z8B$VKzOQN3?WSJM;g1~C$tG{+efm}R@^}K8+Jn5-zK_#2L$u_yRb_*=G$Px0I3-2j zZ4d$rk}mcX$r8X6o9+7!9Iw%TL-{-qQ!_gGu3NmeS%zOoEc+~x^ZEJtXY0zqo0PrP zb){h`dha_;3}W^JR7XY0IiZVxDV07|vik1qI5c{!PaRjupl*eYUV`u2%To*#$=&CE zjbq1?PSR7QeO6??z1mvGL8`i_Xb6^Or&K(9N$IR^KD6FAA@X-!iW@cO4EN0pV%mxS zsP%u)OE=K{X@fN>JhFr3e+SQ+sxrSKgUl^6FEQEWmDm`jYa7)zv!Mj;?3`^1Cv_8; zxzPlvfa0xM7NHOy6!<3|nKs)gWm35E!fBy2DxQjToP>a>DGBmmX@O16i0i_WY*Dv% zK;G6eHXmM}OUk|~b|twh!v@+!;4K<0|G8Jp@b5AZ^z74QA3MeN?_8^2buS9;g0Dvc z{?meSG#b6Ycf!BTnB+q#Jh(e^Hq!pGB4D|eiS#_je{gt~u zkZOXj+gN3#wNH;@6QM&+Mr{ghXrnA|9C`eJafv9L6S5g>*B$Xc+m3%PhM4+G>rvmN z{p!uzbQP~a1*l~LkuqFp&+NIS^4W19^Sy33;ahHd5odPCA(CwSdzvM%+2w0X@648OUCfW4rWKBAHCF1v%&vj~ z#2ZU2Cfqt3C~-J;5b@%f#iHXI1eJL`=fOzQfn50uaON_lDM zBu)l1Ry#sG^MwM}6K{q@yM-|dZUmz!5f6$(H+&&?tl8ggy0%KXovXrsMr4Wrk81F$ z%MzGe@g#QYKcgjupkEG63g(D}T0H13eRY^k+%SSvB?c#MB)cg+$L~=sR*j72htnn! z4PDwSIPTZ~5RA53xcb=ckX!?<-J=}v29$*J8&rrhrfn~aIr|@A*Z1scWrlCz(_9pL`cer&S zL;*9=r*fBUxW0O|i()3Z?bxQ^ryO~l9gC}Hqbun3Q&3yG#*q8!OQTZs8XixpAx9z1 zDIcXHBfR>VKM7YeUwrgyEtZY^r#EkRmaZhvEEFl%TWZ))v&oFc2KSx1JV9BjZDWLx^QhHCdht;y??z(c0FY{m^Z0efw)aP7bv$!t-aN= zM>6vda9`{+tp#6u6#99@Y89aR{NvasK!4~$`26zDMld?EF@LL~L3x{R40r zl3?B8ke>d>|DdS5{o;+Gr-!u&9d&iGOWj}Ztg~#pz}w49#QCf)^u&DM`>*R$1K57< zEghcQL*&J;Th*tM{X>Xh^3>zCrs1jR9)&dALqoj^s>q|+FqiLEry1FROZAxVBH<5M64gScm`%;SI{UHIg z7>aYKNH4y6GFNdFwXP1vS&_ar;HO9A3EFZg&>m;*X zOyC6tJzh=P@LS5WPlsgJhcgIxfkAY)-a1Ux<@-N?RQJ>r6TR3mcZjdo;i}a|l;!i^ zL;pFgFVC$RFMr-M0HONs@xy<99Ufq5inIR5Jx0I&QK?Hf82N#(A%Bt2@q16b;E&q+ z*Nm=MxJWPf^8i9ZX`3~AstmW6*6(D6s^aM-*!a{L@Lo?v$P-DG@XG}`Q(4wN1x<=6g-3p8+pUj=Gz{>qX3J#*0`U*~% zS?=&YYd!Y%qkiCSdrza$?14eEGj|mM;$k46`njGD`WycxNqD4*h%~437kp+MT~*v`kD^u%|bd==V47P7VGux z`}TQ71>zN89F)T;g^AEA{woi}cb)sL7v(iOT&8~7Xj~Lt^&nq;D16127j-~X&!kCg z1$fc^yaoZe{?Nj-CVZt4W{0+*MJ+-(djcM2@v|>P`AAD((F$Q9iM*X-VSW&G4Z$!+%Po+q2$8FX8^*Mw zTNlYgDy5V~M4TAQBm8DKwWFdlHgCTJb%v=o_O!aRcI?xeqNeYarL18Z;~~&)4a9H? z@1cy7!Z5X#S*_Bv5H{pWGmN`J)D3b`v8*x$Hx{V~OL0ik_Tv4kKBA~8!h?uResEQ) z-;q9!2tnDDDgcsqRb6|}toUSODa)=cT_y7T_+W1^3Mu_2Fvg9nF>JUOfkIUfuY)!5 zP_aKSWIv_vLq30>>{60an;^OjQq;|VBQN`wly8vuoH|JaV~+n^I2mI5KsrI0U|_GH zJu|0sW$1X^oFD&Q&~DG)%kD$;-?Oye+atpxXi?0@iI5SGF-t?0kxpZ_Yo>nBPZ%Gv ze%B@MouI3ddYzt|fQE-bPk@6)4Qj{?mEdH~ zWElAGb+lgum9;sy!z*v(e|a`d4bnycR19MhvwB9Z_^Ff~J3ovp?6scz&_X`0{(PUB z_YRWSHb$pPxq$i{LMjTk43E^(ExqD{GF&KS_YT5^Obcfu#hDL$4$`r$B9jE`h4(~*cIAgCQg)waCB-A&{{ zFII3KDz>;sdd@U|)I$DR=w+3-WiZ;x3*6Ne%S2G0Jlm**^q!lJAShzGEOiv*m^X<( z(e=LF#l3%Az$-kyf2Qk1{6%uy4MNFlym$`jdrlPG{fu)S6Ow4KR-5vnu)*@)_X<%% zo1@uw{WM6I)JYyw31kJCQnX;cP`#6>Lrf=4mYt2vZ1C0F8%U5}=?*!*4k;MMRo$PF zGGh9W><2&_n+lHiHLS+|Rau`RYG6Pxunlu&R(Qz$^3|=E<*=_U(e!tqY01U(+tt=# zH9GP*qd_Q=DIL54$22?4bIz#`BTW_;`*zY{5XLskio43VNpPQ^^+qiG&#>KfP|-Usj^ zzz5NK4O&pvXY3zz+Q||d6#@WD->a*mq5}lfxXPw^4Cb7M(DJHL1C}K);G;=V$K{^~ zqVmuXUs+ECd6{(3MpM+^1qvcg`Xk7ZL_<gOuwr`laxcklZx_s}!Py2K zr-9ZcMOMWnE2x}_n%oDo2mli%NzSJF9}n<~h}waSj3;6J>Y-3XydAAbWve%xI{<6{ z?4zt(K{EgBq0{=kU`NQxNr#3|i6W*P-v=o+5v7K|;z#LJRD{;pf%2KuNuq4bvnzrD z!3T4_#`R5ag4YykSG^JvJ}^MVOTYOfTi|y`hz5(l8q&ASHgI31$mG1JwNn6ht`$IW zPx;b)x}t~Y?XP1jOFi(4TA7tKH4c}Kl~qbG@c(KdPk%@2A!1veC36aJ%4r5(UU|+m z^Jy_62)1bY3%9hGn2E4Ck%nepd}7}AL@uF)Xc_yPx)<2jU=B%H@<=912p760e@O!n zzrM8S6V00SDSjwp$1s%BrXWOXQ-7!qy3Z_%{c1+bn=)M3Vr~UQzReiKNeBTkF%XeX zt$zNQAxyujtMIH(?im^2g)Y}97Leh`PS6+Ux-?bNaJ}Vtj*3B}52F4kK3h?iqcJ{T zVB<^EEkj2URLaV^g8hAHtx{bhpnBKu^Xm7_=!w^FOP`8buAP6aHo=5~KF*c#)_=mV zb4~+8!tv{dgsz8sdbA1xCav+hSW5u*Mca*ipkwO{(f^auPtELT-TSPkW;CF|$KP!no1 z3ra7Z1s^F#5dHvaG4n!&H>iTMir30r6hDY-Z!l!NAefi;dT z1EV_@l3Z49<%*Uo`zX;Hxa03{Z;>p(e;e3;i#;`jUBjH+3|(3}n{_TTJUD8)T9s@= z%>25-)sj#Kge1R*k2w#4UVK?%M9v zz_A;AymMB)eji34W?4#kNYJ3kqb2i}YgwOvFN*SY5L%)#>jMU#66LH8DO|2ig~=gv z0O#k4(wo$bEm6O7uQ3vZ-SPUmsxgH+z8leI+u0zWH`7sQj`NH_>}DCU#Cv7AC!2$K zQxzWy>g;1>n68VEAq2F;aa@gONFlClX;M(ep_5*luPPBXW@IkIkM?TXjQ2{HLpKDMHM zoHy-U2B|ivmThjvE1M|?`&9CtM{SslWoqDbTMEmnaO!S(cuGM#U_mDj@uFKF1xZ1U z-eUt4EzzZX=*$+@9wTQfGPKcVC1}Wlo+=~7uKyXU`fma5f7t}-dFtaO!@0lrqFCZp z|Cu5WF<<@%D4Y#03$aeDclrmIvg_99ZZyv3MI%~h`3LwzunsX@EID%UDcB%buQXjO zRjFJ)bfMr|ZF#VC;Twg{>Z0Lg) znhb1b4AZ82wHj2?p4Nol%ayT_Se;xq4z#{?Gpny~5%)>a3d+GKeSe*p@!9v{AYTLd)sP{af7ql<+BAbO45Pf@w;1|8jgheU6C1#_*5)zS&{)2MErhZ-EcU>CzhR z;12L6k^-$Qs9cimiixq^e%VlZ&HJn_GmkiQtyEbRB_xcfrDb5~WV9`0eY3Lo31J=T zBnn4)H1pq24!RBsn(y?H8Eg-*YCw3y5bDA@F?O_-)pp-L(?hM@6aHp?k%Xc%zyT6R zCJ{OaPxWi3peuWh<}39TXIQ&$cEOr`yt&ro2WA-KxfXP@A(W#aQX3{EaSY=iQ}kLg zYct4R)dg`Tl|*S1d#{v!Ne{JR+^Bkm^kQ%(sGX8BjxRKVipgpQwwCWv69L^@(26M? zysNoZYZ>VZy3Q^Ji*)kl-De)qrUXROlWb+q zddQzb(|r|Rd;7AwTLnHiPHMnNc9V{)gHfNK3v&g_jR6f!K8W&6WU~x&7&`c1{}7ws|RIB9_`7jJta=jLskuH4Mn zAfjo75%L>+edCYJip>O>KgQEbBG5r$#Om7|sujPpYg3%6Su||F3EDa~{CwhUZ)cIO zKxHgGn4s_}<(hLQsKY7~b4da@qD#x$!o}27hvEKm zr|B3=xfm^mSvn&(o<&6bq=V~`&U~hH$A7F6cS^0fN!s{f^hsAT{E}hG= z2bvmX+ajk^H%&PeZ729Tj+NVQ{cbkD)lQD@r@%tO@8c?$_*sxr7<@$jtRB_yHNA%W zTj4x!wHBY%jUYxQv4_3cubLEb7j|^#rVStbajd#>mu%~elMxHxa zolL$RJ>|HS*R)J)`9RFGF}OuA?~%-$X^ zG;9%^g8UZSDN@Rateq6uis*c;;|>Cp_9u+H#4-Jt1azjke16&lRAM}4Kw)sAvh#Ey zU#GB!LW8jU3?p-`7CzDy;Mte7r!3q`Us@ihbzBurf^~_uzu`N#`v2t@_n(!4@9X}{ zIzZ??fKWu_ICf4{xUT$On^h$g-GCYYDGdl-*M)2XpHHG9VYokQfk=q2jks8-WE_Tq z=|K)2WeLmD%?=VuOb2XN0z3!_E$Q9Z1U$5e_ZzxN`tsJ;NQmU2{pVF1(il3v4egPj zGT3U*@%_P@iZ`g`$3jD@*EPb)!YR_1f5()LCORwZOe#yx9IKfnIe`gPLpt~A&L3kh zFa-)L%U9^%bg0^s(+pLc8k5M!xZ*G)PDk}4g$HEOw!on4{Oq?ytb6fobY+GiAe6Gn~Wt~n_XjjWy z09{)Bu5P3Ho0d4HcG83%R~c05z0!hFi{Ne6YTCD{?37yu=R<4~NIJM>$og1H6exf~)#DdI^od5z?=Fqbb5vf?tXzag19C5L!)VC;s%{@;v4eDoP<|x(&UvpWq{< zSM}IRj$BEy^$bQWVJ87^BFJLrb=Twx*7lG`V>91-a&sq!@;X+R-im><2}FOrABNHW zw2xgK4C+)rnIRM7#ZqVWKunHWZw`N<)6t?a?I~)rQ0OpST$*oYpIa_t-|A9zEy^YW zK`CGF5qK7-iI09j{t~SV1UyDk_c6$$*hvM*v93 z$#Z?FL_9(uCokg%{x8_#@6W3;W5v9Rgbob5{{Re~o&Nv@K5~gC3*95d@XyCcuOB*2 zY6`3tiAcw+WQ^HHBtJN`v5~C}^}^-!n6BJxE=>7IIqaVr!IhgOvO0*;IrrYm%q&ObTC4 zPme0Tqm^UmP?%_a^(pBLP*T9VHbWs-8Ps645yZO0rJ7};sz#$3X#EMH;i|j7SuFBYPibb zgN^a{Q2HCBofrD4hSq=a;QuGu{9nB*|0_%VKUSCjuj~JRelaEdVxB4XZ}EQtm?wuH literal 0 HcmV?d00001 diff --git a/boards/espressif/esp32_ethernet_kit/doc/img/esp32-ethernet-kit-b-v1.0-layout.jpg b/boards/espressif/esp32_ethernet_kit/doc/img/esp32-ethernet-kit-b-v1.0-layout.jpg new file mode 100644 index 0000000000000000000000000000000000000000..0a449f038d8a375ea428073944333b8ce76ecd68 GIT binary patch literal 13217 zcmb`u1yEeU_a-`6u;7-U0S31O5AHBSa0@U%g4;lFhlJqHU;%==yITl4XmE!B0|Xe{ zefjOa+V|?!ZvEe@+S66Hy82Xqr|<2$-F?1u`f2{@FMtrN08#*;pr8Vno(te<2_OqV zL;a8Z=ZW?#=r7R!BUmq9V7$P_!ok7D!p6pVN$?T}7atcJ8;=MNpMa2%h!E!`F$pmt z$#b3XKOiXo>4}Dp_1uvV7aRAv_5Y_l{Q?kS0Y0HrqoEK1P>E2`h)|w-0ki-V017%9 z3JTzV3ML9V#tT$5ENq--y)q#H1q~e)1r`0-I65W~0Dyvuh7Q1ZL4-+6Px20nltG$N z<8wS2uM_#ViAf3>%^V<;P9Uu2Hy^*Oyn?BPv)lKe;Dp4a?&D`L%4ajrrv4wc{yQ4R zi)WqK^Po^s&`{A{pkZL5qy1+zD5yke#Psjbr8Pc(!ysXBiqGM#nRp?SFnLVI7znHF zUMJOb&Ncmg^0WweiH7q0PH02`Nx*H96e|WGn-uk{Iu6SJi7KvL)HXEvM(8!RL0ZJn z>PM-?2u)aC&dom^Uh|LH+t=X7;FE4dTHsbIBd6qsC;(og;38Tdax!e5AKdTk*H5*Y zedG9pjhSPtpdqANB5g?5)fK-?Ur}{D<8fvnmgBo{hhe4Q-P%;lwhHw{f4I&TUlq?U zLD9TqFG&Gxgh$+x^c-%0^aWw^xCN`Hj5Pb6*o;A)hpfintqf6JvSgZBrh$nz! zYr_S^^XDnI&98U8M(PJk+gpooaMP?#MlVcPH1BLGx(onP(q!?gy?<8&VE!S%7Ny$%{8>R0x__sR-*fR0 zjiTCfDp`}wG4J11^M5xNV}8DUoJOnuPmgC!!~Z~Wr>i=U5+#_sdR2 za#B$jw=mKRI#n8_KiX<>e73*@V{3v{V|Vhj;n5b~zpt0xrVI$h*xDr`!!dg##96Q# z|5CK~KLNhfFJwkD1Mp-bHhKE385j$k<`vy)>vN{b>?sIg+1Vnql`5m=4_i>l7kAfA zc8Ikki&w>cJy*t~o>c_H|JsiX6lsrBxJ;_>7H`NQONpXUkqJ@B^K3Dj6+ie$gCqv@ z4BS4r>75mDGlJMo6O@>QO9qaQ&J$)#I94Ql7xD{O;r)<DqWutbV-t{jkFeEZJeq|5B0xmSXPJ6M0?7F`mc6I>xgc&sO#w<#MIoNFThMxU*5r zlwzb@b#9}Q6aw=v!lK;Y=Fit*M>Omhzm2#4y=^Jxmu9lj<==%ytB9$>-~W5LV9?w_H*u?84>E|WZXj7OzEh$z%PSr8Hcv|5+}#mV zV~=!#w7Rx)9alBPbNeJ9+I`ZDPaq}|9c`#Do6H*b9JqH8IdT{@9CEP^J!^(!RUG@F`I^8OL zvQ>F3$;p%T@n^XE`+i3CGFs=~mJ{yt%=1=Wqt*r^gw0FbF7)wof%mR4m33*jNJIg5Kg`Q4K4FQll>iEAKUB!rw zZu`To3Br)kBZ5iFwQOD#z&>045TjP_RQ}MYM)ml;>aR&fxj%IWO}>5=$m^Jr)8`+1 z*Ww_a=2OFS6(f^amBvHZ9s;qbg=>OMlc)cQ!!p-Z9rqTM&=g$?B~a4^jRBjLPS?Td zZcU~?D|~~t>b+xLdxV2;alqln|1OWk&=3#7X6ejgL^D7`l~$#0D~UZ}X6Z)KN{;Zm-B8K`dAT&COA)`Tc!uY$_s3oS3Q{qV%#zICp*;3U`247M7zQzn_ff8IMKOSpr_0O~yUU&3glmT7 zlD86pGkIf8zH9MNz1Oo=?{OL8kl5UPS|#m6G{bgmNNnR@BJ(S*+Q#Sd)H#;RNzREQ z!tWh4n3ad<3-w#z2D7dp6nY;CLAP6nG_$|5l{?U$w}>_Y_>$W`(@^%P4K}xYiino7 zk~%tZFe{u_IzQXu&HKE4?bF$u`EaJHn9U3L7yeus-^My!-NlaOfsd(Z zSl*4NSi1XoNob!dxTny4Xp!T07i07JBca%G7hz+Jjtyq)!o}|yKroz3H_i6 z`+0-z`&)d#(d>%yZhAKYDf{>CcsSe*SmaNtbw^pkV)0*XemGc|SCDL#l zS1~EPK&%nCfYh|NgjQ8SzFSc5$u8JIO>Dw(dVHIAgR)pyIN`ww@`O(IWSJWbOrFa#3wCSUTqGW22>n)0fU_ za-?24BI+CJ9i=REUe{fG4q3%1 z%3L2Ok5}21|4k{R!^xAKRwdw7vu)8UC5`)XaHnM7WPG5)GEv88%Ra{)q$tT z^o(9|_Oo&ofN(i*_h5k*=g*7M%wv9+ot2~K|1e*-;}5Op>vgV(YIBMA?bJWed+kE^ zqcKv5(Ad;Ag{Eg=z$ogqa+;d-ic~QTsu90dQ-I!W-1GR6c?9d5k6HtlKZ7-S+_x38 z#jVmOd$q0cd&Vw~^sWdi(r>$_n=YF)o&ffep|Llhx~RA5+t!crtB;ZLH9|tUp^SB_ zQf!JIYS6EO5{X62j^;NrPUiodhKpnT4kbKpGOtwbj1FGX4h|!K^wS=R7O8_Od5$Mn zlMe*j2xELqeaMF^U)`tXYQ?QMG5tC!sRc=Z&bp=!4vZ7reSHiJH)>X_F_igjBofD!z1TKQm5!F`LM*@H!Fz~f$o}`FS-}l z0XXIPxfRJP$Z+n1{<<&l+U9YF%~WTeF5V@E$K@2_WjD!x=W2z)Y)L`xlKauOnM!*Y z`l?*E5K<3UC0={6x#P)cVMm3K-XH4R?6I#5()|#MX~PE{^s4m@NkNTEz3zJJarj~7 zTQHL7q8k3G6)H&zOD{F?vlmRCwtZy;HeW@0rZYo?4q|$37Pt)!?Q+!LJYZS!{&p9b z&k}EdObtiAbla;Gy>7i9CADDDc37k0bHZn~UHIWdOJmx^!PlTxXU?8Pu|wlCeLkeK zFjJLR0wxu8G^@V4bJ^Z?x>E$2C3PJl@=F?8Pfm>G*I^&ErdBj)^@Y_ahI#i_8MZxz z)0kRUY@6G-a(9Z@RDW@^VN2w?l9SD2aEz;CI(i@NS*}xQOuKA)4AbK)rS@Hi$fXO? zWk7gE`Q4fenMWgFb4&eX~gGWEojy|mdj>;M7*eZ*8PBKXAFqvd!X{=U&* zW>!9hAbAzU^($842_R4)sO^rU{f~(r@HG<=_@aGAds=s^>{s0N9qM1ZhLD3`1a%Dy zc^0vDu}2#_XRJ7OxRMu$vt<0oy^%K;%q>@np@r`bOd~qQS48l<{?A}ownU%IGI|cQ zm{2-j1DC$sc@Aoag-C@nfj`#+8_8uO_tYy;1rw%;6@oR5r~5m`g6$Y>yveda3DjHE z>B4ySk`mxQ|YZ;d6D zp-g5ajAo-{8+uQGo+CC}|M;r0rd%?uCjiBaf`}e`=n25V%^mmtfpZNy$+CJ>z52+9 z&*A)8R&Aa4UPsyoN{^vzK*0peDgY_nYHHP4v)Xrr8)^8PcS5*o= z0p>uy`y&YC6CkYkiwUtwXD4@dia9g7X`AA`{RVMkx=n47ROl{oAZdZ8p811L#7qv$ zsQg-Hs$ka$?6lK*63nhr$!+Kbv3a2KciU8;244r6QMzy?I1VzHlYE+|5Tq8i)=Hpr z;H+T~4NxBK)o`uW-jRPpOzaBN&7hG-R<6vA5gz?5C~k=4@Xvm&9GW=477Xh6ak4;5XtiC)@A-nNTLppIHdXo08*f#n^Bl7_myeFhUN zt$=}DN7xjEaAk)%7U#~cVc2rmF5Jswt8nxu6WfmwnBYc_@}bm~xVx`sUOM<+ZOnaY zNKLsRf+T*O;-5a#Z>EV^J%_p;m{P=~LO#c|=FEirn^;q{?`|KwsPi{AED%>}F!cP!n}p%3u%}Gqjd)XpM}Hw-d$ND(BiymWxsY)(SY{^<~~2C&JCHL#=a)Bz7p7yRM*$0zHio*EneN>yn55%V>JGZQg zKK_Cn8-1C?`Vw}v_ySZr;R_l`tz>xo~JVGP)%Pxo9$q$S=tZsvsXSt zGt39580#t@91+QT-=;pZV()1c{!y6d5@Gxl(WIPJv{%zKHLR^=GZ*WstDY%zQfj#l z_aF%OZ4@t}Z<(+B!y-JnA=fVY#YTL?%~NFj&yqDO)5R4_%>r1VsdQ1;sn15)G%aK4 z{pX+bCzwO;Wq&FTw(z$B)AthCMUEo0;Ib7LPJM~M;QW%tI8nR7XE#NIOL$`|ni<~a zI&?1Q2X_*gWCVc5y^CLul^{%f0!%crhLCXyu=^U_p5>XY5g7 zH)^t3#xSAmkA(=C;2jA2C8;OZ+-oTjOqzrqCw5e-?N;^4R=25@il~V3lb7Er-ndYW zK7EUMtvtArn9?omLEDEW%B9R- za!{==cw0CW&x9Mcte46pp`JI_eTAbmKe1xM62U>X;f-}~@a2)^g~jYRv;*8}I7vhd zERKW{89{Mm)SIvX`K%c?djDROWr(Gc4_n%9=+#*|cY;mmx6J**&8?F1!3dg$x zbh=S+DTT$we|g-uR(~}SzZr7rl)uKc)(2ZF{e-P@|4X51X>!faZtS9z>#z;8!Ni4W z^OO{m0%DOoyFV;LB?C?@AOxVnfmsc*uEcdY`_T;{uVMG|qjgNs#-Z6g8HnZ}78oSL zB=;3?wHA?5S2So?CO?Bx?rhuR8xYr=Q=RUDh#lX}(f=|YtG7=}fNt6%pXSzb2Rl@! zj7ML^9DgtF-1zq$*6k~0DVvFE5EaY38TR;Ub3@bc1AMZc#iEE=u@`81-FvS{J`ObL z3h5CF?n1#goDO=I&&-ep(x8_L_K;l0-_P50bk*Ewi?g_$On=xLDSH%1XtVu%Uif#W zlX!|}LUN3Xno%_jyEhQ{w8CF2G0@D>)qx{?~zjjS6p*c_hcmB&D&N%T|HSW)i zd3j7x_PwNbkyXI3_P~*wuZ;%peGIHLO(3b9olTRAQg?WqYH(5^oN3Q<+=OYBODaoFNQp zI2}rl3n}YPZZpi{?Qy2Lk;zU@Rval|1E5utVv}uGwiWediFhtUh@BI(v#Pv>uJoB+ zO|`9)(DjC*f3c!lFSo=&fb`08*Gw0%DFhWKVN;oDnt%1o&)Gmqn6gX8c05*hS~+_x zhu(U$he_TYkvqF}n=$3#w`tp+1AT_~0YMOFTDf04`h|U7%l@3Y8Qi^!u3j#?l)%LO z8oj2pbF(~cSleS~2tlwV?$5Keut$>XuYE4u2II$Nogj=kN|oO)g^Z$UQZ|#5AyE3- z?2y@9R9~du-aA$>mwXLJC!Wa7=+Cwjsxjd)QB%b8dDXAzI#SR#4gEc##%>EmTY-&1 zVtw$7$j>Y$qqmcuC!0YH4sEcX=_<|;(C^c7^3$`H9UcQOjJBvP^ub058Q}Ipd+^+i}3uKQaQNj@`(AN8E*ebIti{qK7B{~u(ekMVXkJ*a#@i&zrth1 zk+G0haWPUu(7Z~^IqcGoI?8Brxvy7o{6~33-vu;&m&pJ`|0|fJ37}3lm>bBUZ>z52 zEK{~z$iX{*E<8K0v2qb4*YKu};+Rw!pUu_-OcSA|ao^*!8WQ%7vQ#=={s^OE>y@BI z($bB=gjuj@qcAcZcXH-TD4@s!k6(-~znCn`k?{!f1X$TKn0<&|FU^FZ)JsaNe6iT) zFHwR`75inw#RDfUm_8Ap2MQtm%1R2DJ`^;xv~Hkrb|Cn+S9$FUY8H_2o7BnA?blwa zM0+fynyv*HY=&sa0FfWk@-~JHEX=EgU;J+d2NMhAYT^0@)4Cg+jQhYW$t#|&uB&MQ z1W}7q*E=g2Lr>~ZvqFKf!|BvFJ<6JfZrCz1>iI#pHYg$AqyT;rOJ{m&w)Br4 zzK9#rq!o=G9_npv4tBcs z&)2UB^D}PjO*pvw)JIx4;9MYEw9cTSm$QK%T^@on7iGF+^K?2APPkP6{rmQFL+?X4 zQggvSl6#j{XiTgJ_d;B-EeHx$og^@ofcf}cl-8;&9X|oGCgLuuB(EPdddLtjB?Z$1 znoO@6i{Sm-c6BR;GUN%A2I@&Ab@TX(xOAHC8Nql5?5K<<(kfq$kh@O+<95vYpLFb5 zbFTLM|J$Gi=?cm=vM%(!;LeyHXB(YGag9k^e``;(l0SRiyWNG9m*w?TH?UiX?xg6g zoR_-DM80++FrnyV>IpE!#?!ib4RMrfbr5R3=DFvEuH`MZoz+BS^h*-O{DmC|E(MQK z9dUB=DY8StYqo_PSc%b#$g+Ft_!|U$Nb}v5ZP+zQd@ENrb%u=%`x8zUln30CX5!IP zHrImgp8#YH>m&ZLc6nT>Cv|AHD&1#b$6{H?rgl@Qlahc|_9-EZIc!5{ua z-xn=D{#ER+FcCqfcIM?!G&1HCbJ%dPVID)c#mLo+2OW1M?RL`r59TWUJ<4-Yb%y3!~26`ooUSJ~(EYk+4 zu)e)-?$F9)nXdt_Q@~En)CDtx!Uhgw1t1LhJOd(yBmvC09 z{VUCM0KxRE#3OBh;w??WrJ`2B5y6JpqZuO8jC*qLi@@T^KlMYdRr-2Fm9(fqU}G%= zv#ui%dqPC5nwBFWf8W@l)Kk-kcCMkzyzY)=eqOvHfs=A*|ASFOoo_`J)g0BUO6l=; z?~}z$m!cMGMU7U;TG2f8iFt6mIja%s`Q9%XjYGmTbjOz+I+(Y+h)xA)dsV!K%|2G? zmZV&muo#%NrxbRFdwMg%ULRc0a|eR4>GrKBT7;*K*O`2BKlUy3y`RELcii;lV607- zACn*36kPX8@a07-Goie>)sP6H( z&r7vK=Hyi2n>yL1kBpzygC&9UVDoZI8d#uIxwNT6F`1g9ox4^VQeU}L zi5E?>_f*c~5f&s9;J-tS#f~KYq6O$+t z8xsbI{aCdO(wN&-*{kRd`FIL?D-5AvB!qA8P#B)QZhJe}ZziYyK?qB=+s}wpb*BDe(SN}IA|i1L#Gx<& zTB$>`*!*erfHOQ?+10M6b_ci3CnYNm%nEsr$2XyAcJleiA(uFt; zV4l&W>hZ7fi54lB7J#`Gos83_#ra)t@uv`%qLsd07Mzp8_R&mahly<&uYS%>^!xhY zyr8lp)^UqDn={L%Q%V*Dj?G7woFxwjLMxvFP1>t<53qDo-)>9VQg zyMA*_0eOorJpX!yYvNLmeE2}}*XN`L7o@(lNCTMBPjOjjyG_^A>w)f{r^y11T9jmX z>`jy-o7v@|(PrBi^=Pl5`fel>oI=#_3Ba9LL*I11p=*Hr{_jFJ84EpQCJ)97gFVb< z?pD%V4R`TCJQZP3iuaE|CJ(01ihhxvhpGrMA%B{4(F zlScUdyuUNpM6g#Q+Q}#($t=l6BO74ive^Qh zM`X%4ec1nE)8l6Vj`LxHzv0k>d+c1qCQBmXe!#7M3lH9AQcj_4e`mW8ZaF~XS8tfW zPMMWB5?o)E`pmhA^4+h$$#2BbX(=v|UtMfEHApkzpLu5cfb#IZgU%FVN0nRA`jl-a z5AmHAJ&uOX8CnkuIH$YMt1m)OyX$uAlMI`l{Nao2=KJ9N&$ZE6A5gzTY(}|!9H~wl zFL+=&YKW^=t@z@lm^+cP;==SZN89rQ$3G{OUSUx+3}8g-l8wx&fo76$Hovxv6d=nF zfVri4_1USV&?V}6wvv8?TMNQ95NQe9FPjioPlSU1oVp77Y8yGoU4@@A-0+CE$W|+~ z<^(N%8K7!z;RfmtV}-wFL)HTa_F^eHbkDVYWis8AR$ zvWewDjcHB6t>Px0R$X+eg8Y}J*#tQhS_<+oRaQQk;0pYT z^F0C=515(5{Z%Xpy*LA>1;fP)&+I3gE5-Ko$S(3n!Gdc2*{&u6qo}R~z#+{hA%^Fl zga`AYBx@raem%+uUqJ3lH?;y~14lcW=DixS*>FtaY8GsDVKA|b>r*?n9Su0OTbs13 z<)|p350NDjnP>(+U$szaC*5_jMGq#6>&Pyv#@X|=x2t}%{WpC_mJ1oX-r%PC-0See z-~K!*g}u1}?7ku)QapBv1jz6rlb&)c}i;+?<#y1|syAs`SPz$|wSbQ~z0>QDY z=EqJvp<^1Irm6O#1ykgMoS* zlZ1d3hpMFI-^ilZV@+V~^j@#=PK(x_eDYKVIZxT`rAOvotk9_=s0d;LrXpf;;`-Y}`mS zDGX}cjYlMThn8r}>7d_T0BAHUBBJqt^01vB7?FfspHs$o8djX`ri~l#qc``&p$ae& z{y-`8#Dry3MYEinPkHeT1qaKE+-%~Iv_rmO!FgY(({Juej*7A4hwi%|kSSPJi9IT$ z{;%$I-b~%Wt!>Tdl&V+q$ND6#+tvQ+VY2A%io=N<*~4Ka5cJbI+Ns3MlJySn7s1L_ zWPy(z95{jMlQ1qAwFKC}CyzC2?r&MAXk7MoiLkHU(@tV6B_{YJt$t`n1@n`Cmue7LHW5t_K z)BFZwiZN^m=o9y zIbvQaywmiS4fcfwNhdSaHjKfR079JHBIIlNKKoLHqDhP&yv_Kx`q$)E3ygVH92c$* zH9c5`3pOuoSlf;xyHr|CZAr>jPs_)NH7BED$Hom|dH|(;+vAwk`7LASuLkmE9 z>sKVfbX{%@)KYxp(+@wka_ zA2Y@-LZJET&6v+l$XsIQ< z_uGkb+o^7urB=D7h+?=RNAxzR5$6d{;UKBhCWGn9O4c+w=+J&ua;M}ZzfAa9;2nLs z6}6G5qX9I}A{5K{v9e=vt&&IFv9RCe6i9@^{FVrMq3r$q^)2LPc^c`^op0Ueq zw0XcWag`Q}{b|_Z$kwRV^#mZaNjFMdYOn~gAR{09JxR^FC=S;R{nmkZ9d6e{zG>Kb znDPWD=zQH803AG}4s*vWzj-0#(Oef0Oiw&pP#?q~T2aCQg>sk|2S?vf9*bWYfrN&5 z1*5J~ZwO##*f)nxzNWjr&4NAnoe0ax#KuYQ#vs8s;;$$YJ#gT(Pji9P9L>;?!>;_` z6X5Kl(sQglZ>3j1J~dt9q83eXmc~>TnmFP%CrUpc=BK1Ir*ZW6=s?Ybidd=O zmSAAejgZaNNHa8!v#vnhlPg^o8$dkW4qEVtz4oMP^6bUfZLpMpd3g=L^D|5G&=h{{ zh&fhdne1^IxwuS$bP{@@!@WpNn{VY6d<0u=mOu`g-Xx&#B{(-7<~>ur6RDrzWfe!W<5U_}}0S z>{J)J=9h|YNxiA6R$IHlKB;<_o)_bLebxg1?*Or3F?un?&j6Pqpv+%&Rs2eKr%b2VX} zhcMTS%KhdTFSDSU{Ir1CJ__?5D<_D(gChIJ%Tk=ocEO={3o?I^!2(YJ?~>CvthKKJ ziPsb2Zc68#n==v>V1u99wvRMzb75YHlXCtN(N2U2gCF3&^x`OcvFmqh)JQ)U)Ewd7 zXr*j9KbRP*$F40eF>K_TtvgSr2?7w^KI-Uqn@0v^u-J_}|HGO{N9wQ#*v`nGT5a=W z!*iGf(AB#!gINQR|82JNRH}SxBiKU`H$_cPnkmdMIjkox+W4fZY0Sd zVEXajdAiosISVbqIt~blpj_}W^aQvRkMW6U_rjd9M77-u8Ib*_a{ugY9$Wu>5$Tp# zajIC+;H!tgar*({qmd5M_THtY+``T5Tu}>LY$ui0!>{OqiY)@V`_3MJS8|-1o)e>e zAJ?Q1v|{bzG>LM$6km)+2dC6O7nJalIN{NO!7JR&e+)<$u~i?w5!qfc86u{H&0hDe z)QrQ9ddVfflCI)LEuOv<-_K7mv;b+_a5%lJC?L83+ATTwC3^@#UR0zSLL!X?M&?GM zA^WjwNzAj&5nUbM!Tw@h>GTTwj#OxkwCqfmhkL~<#+bq`Qk*pGckKw72c(qx+!3vJfGDr2BBIM z+DOMBGcfXQbO5YbE#_qh0_l{#eiLnXOr*_eul>K}-v3|M2=G{+1{pqjL}o|3&y z)odt*~nno&a?}o?E5zF)2*L_h>+*NIxLVt~wFEsP#b4FNyq<_C7}9_t(95k(OONiH`U6n83fnwqkjdjV!lv z_5lmo@1r=#Xyrq&9^)q-NihOyJe%%=F`ocUir4BW!5cllYJSsAib($cT6HP(`c6ML z;9TR86zz^G`UwDk7kX|Zxi0mBCMMR-4DD7h>o~hM6mLN7k<0EeFyQysm!fpEvzJeR zf3e5eb#cA+jEgv!=VyGlS43`iFc<lF&wf8D#?Y{Ot{c!pbz=VLoVE`Zy005pn zfYT{}I)LolFZlH)I|Fh`@?StjNl8ITO+`aPO+`&jL&r!*L(4!*O-;{C&%nsU#LPrP z2f6@ax^R|e`XvPTi<69;>Wq5V5;4`1Yk%G`E!_li%h8l{$$RzuaQYu*XTs{!*%!R#IHx_SJT zb0(hkPl|uH;FnSC%xCmp@P|zRAoDfQ^>e3_06H?@ne}AMfE$1xM*qnF%M`FejFVXZ zu(lMs*;i`ou@z$)Fkd4^ueK7xrQuB#J|HI3K&`C;Y3q&+r+bn+;t(5Lk$7aUzn9Gw zrJJMzYBHOTxiJ{vD=K4tgjll+l{y6|09R`#?B|8^A738%zIy(D!9y(_Th^prOv=AG z;%`*z+{l!MBw6N~F6voP8O{q?Kvm%kM?THB!ObYZTJ^b`iwhOpPVC);SKa@=7D=`_Up>TpxWnk7)%TR@OFmT^b1Z3v$d1!RFb0 ztwmTXM&a&F-#ZtVyw(i`cgA;_&AnQjfxR3uiU@}*|n`mkaX z`^n>{d-s-GdLe&vYjfkw3U^RfUO3%-iumWm7}CV@%%f9kS0lpoWec>R(ih6FCL}YV6WIj8Xf(_p zMrLJkFw^RUn|C)VPi0j|U>)GgQ!2Rn)>#qzVBp%=_c;L1stZ5heu=IHHYxd*h3%6?CuamQ-R+bY?| zmSvrlCw!g1KeTtvbuoKDOAlp^RBF~2_osbGaD;b$^9;S%Mxs~CegCP zkW^x#vuFS94kEn??KBwrxt=sR+ABoQ-XjL0ujxEIY=rG>Z0CK~j5{fuOVYG(<;b7; zios@XL~9~1q*}aO#6U!;c+5PA#P0s62Us6QS+u9*+I0YM zxwQNvfDJHYK#AP_*+v)e_1~CF?zUf>?D@7Z-7=*u4W1bptQAvXawX>)E=81_m_mHF z5i(sa#0y0k!!*eB5yPUqd4_i<%^ZpKO=V#zu08JSF%6I;Z+lQ&Xws)e#|3*C*gU_F zW^`)!i;#X{BYh*U>kr2~GiMXz#;7GhZ{jcGKII4sM-sppD!LlA%UE9JU1bs&jE6Hk zY4GY9o;U@NGwUzYjYk~$!c6epXk@oeT`2g)xeoKq6$FR35Fib%^dWC+12K1u%6sWiVGqWib6Cf#5(#LdMdObu4f$!ksF|DbG6c4K_*N8+sYIR< z6Kzzly&0!ot0{5jpjm%3N3_W!CHbz*<4k-c&K-rx7o<#Vv99=*67Q0ds;jL^yN-MG zVbp>>%v=`rl}4(NqK$I-zjYdCb?x@w{mw99>Akf(vt7z% z&WJ=w?ZDu=ht4S}AHz$cU2kNbgZ-(|k-b?3($uVZOn6SstQj8-$sej|wk!%7E*GRgPogxz&Gm+4-<{=lJcP+@C!KlxhA{yG(uWzZs0k z?TwX1orl6#P65g0bem^V`Ts7Jvgy55{j0kc{HXdB7J26$fu%!m7(IDGh7vIemL8wa zXTd9WMZ3)&V!YL-WxN?>y^YAYlVOe7i<{AWR&Yy2?(%C6t!v; zJ$7gxoq{O{J@}BCl*oV@sP-hUhLjb<=o}+% zV9Y6UHvj#IMePS60w157mNvdZpMVpd8Il)S^kaK{m+iF&;I~Z*uJ6u04&L;(K|K67 z^sK^keUjf^&-ubPv*;F^ z#8h5Tzt$Lwek?I*^C{u`J4PI0bAV^Ld`ec5&^1$Vod&7@`spGy%5FKFL==6y!+Vz) z8zGz*Kz$DYpz=o=E~=Lg<*3$ev6qgHU_j|X)WSGg*J@Y6S=30vG)m`-xkwz1O*O=C zde&ykWiY_2J8|3H$Gh>B0&t4QtaV^{_S5%O;JQZ3gORkp)`4&D*oU;=7hTkRU+h_0 zk@48<>WsJi*u8k0fS!UZszs?x?aKLEJ?)mhC!td+2@)Kj$7MC}&`m_Sz0JG%F1?do z&O%;S;@!x^FuE@`{DG2f^tk^=4bwRc9?I0OS4%!cT-f*#Q`BaG*-)B&)4;oUC4-0k zhCS8Qi|lXKkiI`FMql;5I0r}k?2kC6{8to5OHe>3jJ{UBX(R%?4KfLmv~cZWxO$x*XJ@8IoI3Qs z^BYYRL*PgcN)e2*el$HR0>%gObTRPVl8K{opdCSdKB|uW?g&Ud>uwjt2t?na{-&RyHKgzwD zCw4=!FZmglCspi3yheO1yTuYgQVta?zWmvC|BE$~s%aa7T3^sH8A0IsUWHW%Z`Q=egwZFQclx=@Uw&n!g$ z8S*yu&F6TdPQOTKuYOrmIIU!2mH!1l*+*Av-?w*jc`$v|{XFv}aKw)Gs?R${jZXt} zRH8Cps?TQthuB?y@N!7mq^VDP`8w^cQ6=>~uq-!828jwH1KncYx+gp$-E;R>N)2yr zNmdoJkRJ64tz6^F9!<|P_szREok(dRFQ!Q}lWyy)X z=u8|HpU$X;2HJUP=n-DS>b26iKBBL1q2Xr{z1d&(HwN#iT}9Brt%|pVJ{Rb|?|WS5 zG+a;9D{ZUXR{6pocU?L{hSTOonXy3@0bEmQkDVHu$WC>uVoq zzzMl6SMHV=KddZ9focT~4fJ=dsbLSL_J0#o`HHlkc~-m79_wQ1rTfZr#N^sHUE_`G z*T%qdPG%mN4{+XacpbPDOor1b$GdCK=*_`wSs z7pXuq{@71%t>o8#WG<(fj-+bRDB>;f?xK?(mXF$H`up*EISEks3Z?miDl#6 zoW zr00Vzz1p5CS6C~>+9v<)2d98OgO+#n*KR-2GVPUdE=7zU+lU_5X?)U^#YnR;=Z|oB zel142q^2nrPa}4NPXQhg{G+rD*WVqyOu}Tu8@QD^VrFV?rf%?ax?u?6J2plzbl%PK zTJQiL2EHiQbE%Aq@N4*a^3;2!^FfQvW%73b!1*@?)i~IsH$mf}o@>H>%_x~ZhD9jv z&|+-8%2{@)K}{VrTbf>5Kwj5^@DjFe1lhv3vcGAdUw+j};0I}35Ji72YkDmFWIbTa z{OC`^Ze76-}^k|^U`!z4zJ zn&5b5W+sb`Vq^2_$+F?Kn)M5-W0%J+?_|HWZkVxh^zUT{7YiB2XUZO;w1VdDcPGU) z55vHcg~t1XhI>7XeTky{tRFh3wt8H-J<_T$t@Iu-MJZ@n)?k5U_`$-w@C%Vr&xg|n1|&I8bD5N`a?4@dgacG9SvRVs z-n_S3BTQGTFG=E21#@fG`fv=1x)K1OzjV)hf3@kQ2`0&i(5oSzcz1q`Jr1i7IBONE z$)j=#n1x@d`JNCdOOLL*mBNdllg&Pxu5FT!RvtgPOZ#>>K=+q-eFB&^|9utQY}qrM zunwD1$JHlTj@N-ugm`p+|1s6sC~u{=oj6y!9;35HTUc|E_*JgQbzr%r9Tg(88%5Fh zG6Wx?q!Zq!MIzz%4A_!9HsrnEk^@Q*bC>E2D}FRIjF+1Kq2^7{H1ZQ>zO5_~6vhfwI#f3LZ#SB?Nplv^=$ zCdP71b;96KiJZKur<~7{t~jE&DcT zOI_|f^%=CPVBK9?YgQ-e(I$zH^I} z$9Y?y=Dy(ORsf2OB`RCEQvl`6&j)1x2lPkEYNLk}u8DT0-!6os=z6ETLy=tlz$i`D zR#C4I)YET`NCAUY)-Yqd{yv6pq0i9cBFm%Hq3>egp`cq=IedLnHn_`Vp2vO!tb#qb zS8gnjnQgL@&i1|%x+)@T&~-z$D9+>HZoh4pltNcml_Mt}UMM`(pzQY9Zl5=Mz};Vr z*yRS-_D}4=s_leaDDv+prrBanfG4ee`MEtW{3TjU`ssG*hXbR!bxs($Jg(<9u>!~C z0Ivfj2Wdf=dPtIDeL_>2$ z>oWJ?o^&#w=6~$e@Z<9&RjKP^H*j4=W|AK4twL#>=XJcW=~2DtX|-FKv_4wXDSdX! zTSnj9II_uQEtG}DvLfe>v!y=wj?%h2TeUYDdknK*d}=uB?opl3Y>K^%K$gQE@`%+y z#VR>ocIE07zK%Dqs1Gb3pIu4l;Y0B0lk0ZDlM$9TAzW1{f;K`DAOiq^9e*^*6=iQN z-Ah-B&6hWp6GPfbx#oE;>PYv_sAHiY@4>cqikj<~?b!?|24wFk>Qz1T?=iw8@*l3l z3u>eyUfvwzpi^+>Z2n7mBaty?%UBzTyiuuGI5o8f`yh*R`HB!iaZ(}MoGF_OYbIQ>RfJ(zIt`F5)T!V zhi=g2dQRyjDv+~`Iyx4Mop z>BthPr86tmeeOYe~sK%%{CAyGlS%Juc;UG6+b*= z3NrIp&{Hf%`N}4=^~YX?*0ws;3LUaIsqwO^3@MvsXg^MU(UCk~!i!$SbBS(_c1ejT z#Lctedy$uUr9TEf{?(1nU2^y-KbOVUzTnpu!pJE0JW6u{IgaHgTJV<5^u_P+S4|%Oo?4}dlM89&Q z+$9bu$yDd#I6+1Vpm)B{+8euQ{je! z!tf-xh64!((~7%{Twn7YY_Kke5gSpDvhFAvrdh<7>opPXQX|H5;R2%=9IXXj2Oq)> zVE>j;@VW6prj1G(D(iYEDxZhPV98T{V0146`He@ao{+g)341bwh>i{yXRc*!RW|7? zB1E{&X1^}#_ZRl8C#}83Fn|nlrJ3^w_IM0Gk}%3k$pEI+<89)h$f4DX&${Ew-T7s6 zP{*4URy#3u+j-zz8G7pp1dri1TM|`xn@#(uKSfSIu|hhq#G^}gE z`oW>`f=&$ok^IMeaQ7FM3&jc)VjKhyOiQwSaavSxDpDS|FGr9Y_t9;)aDl-5rV8u= z^V!&#d`nLOswHchWuGz-_zmy`i?k63DsDGvioPDZEP*tX8s28FYQjSV5~l->!@Sn6 z@D(45a0)Jw_PYmUXeMyE{`%>BGY+G?e&n$HoYpsn%mOiY-@(Y_I!7-eh<#B!QPyf7 z)H2a&Ps4OSH8$C*RU)_O@Ah5|KLVv~#ej(^A->MT<4cVjIXd-DhNae}o09rBJAGV4 z8@0F-Ao(*LjYq;zOFSO(02NDwOg<^OIGE3qy;*Cd+vMKSI~{*z3fU;lEP6hn$AMN% z4%!70Nm8>W!ykM>Ir%zRCg_X7OT7y3cVt`xKlvI)v}PGAxW3OOL&zW5;PtE)ON0wt(olNVy74dc~>`PQc>r2^E3)9d&oR4!DB zjrpe=5IvKJfiBEoCy3XaWkQpP?e}7|)#z)9Cz)Vv6kc;Q0lF%|rCGB{B^39<^etzI z4l+Crr-tF%H9JDL@Has`3mgK*9^uG776}9>!R8A|>@bV7a`D z;}*d9Lc`V3ptuqf=oQJNwU%#P4)nVfY`4bCNutZQn)JhIX*=iLrgO!N<<=4n@wFX= znv$=z3G?%{+-2#92o)j(u?`$MK~D`#aqt-zJ6uEAo#fVYCktwZ!12p(fO<{Od-GE= z6{5(ksRBGmf7@M!wQPXOPfUv~1N+0!YS9g8&dSp3K~aVtkn0mr*AbOKgiiDiH{fq1 ztCEeTRVcr0{I&KX_qtuf%RxdylQB&hgN9JKVxQUG_?B5eLNP2s;z9u6N^`NoZ9m(| z#%rPFFYs&PHusVI!nF+rq=8_oQYU}ioX*4WEa*+H9cGc^eoAM(_&L-2Q3~-+*2xsM zo_rlI1d201Co?l&Fg6@xcAO*-rCRq;O!@2t-Fmn**IG(2EU2)-s>#RVPLPYuSA?H* zDGbey9pjPQ>c8!ZD5$G-M7Sn$>Aq3Q8LM5)80I<-T=<%8E8!CP*1c}ow%J$GyE6-3 zlrC6Nxy+P~PQyxda^Z?Fn3q;b4*k0Y$O z8Y8Jm!nD@3^T*}}JZV6#v2aDPF!pPbEYWmZi6u3@u zy6aYTul|qZ=ocaZ>M~#VCC6`=xRjJ8Rs2v=5ALXehWT_-Yqhn{_7w@e;&brD7E{P3I11(_qm0Mp$@E1?F<49< zL?Bc0HFMI|+Da@S@z(&jM}8Jc4e&in{mW|P7v-N82>%kQs3|mDGk)sk(d2P2{XlKG zd&vsy_WU`=mN2J~(nX!4On~h#{@-B-jv!$S(b1LYbCb!)LPNpfdtbvv)Pkr9S}|;) zJ@nO+NNP2dHC6Z-1l+UvH(?Lvv7)||TceB8oDH)N7868E;FbA`gB;U*<9f1T-VHuV zF9Ky{sYW#%Z}BuMkj!8W*kMkrFxL1}#!X3Ow*gThUdl;%O@*~orUdXctG6u#Py^C0 z9GCrf1J6GH8W02kLO1yH9Y%JnP65W0rGI(6d|r8TZT)W9)|TH*xPgA?5-r*w8h*XhOUD@@3zV#<;C!>19b+LTnPY6~FO#KLc4L1;M> z1(8YPH7KfKp%1IZGQJ^NPXN#P@0U{}s3NSEtmz^kPp{Rg{=;IY+8>ivmpuERSq@@V z3^jZr1ze7~Zxoy3Egj$}YbaFtQ~z;ycQ?i1Ovou<+erMC#P@8*X4%>8;G5$AEo>R!|H1C(KJ;Xdu@@N9%C`=g!J6PgrN&k(On8Na z?7XU2-klwF(JzCH9nqQzA7PIGYM7UQOqvX#|1j`ugOOkVrg9qxe@C-iTIj(tUb;~< zeD`gD+hoij4a8I=`9g0KIyj53_lu*y$}3f>9jBym&Gh?<#+^DpBvvzD{rt!thHWi9 zXdAJ)RBA)mOj-Ki(wV?qU4dv6G%5H1X(6QQ3B#Ohe|o!VPOm7dR^#ktlqdJ@a~hM( z#3G*#4q=5u%n~k_N^E>B;Xo5|YWRF=rb;CB4!n1QX1ffyiy_^!$}I=gM+_!69uo8g zm^N4HlH1&hPdajaR5|}CgRCKQ+z!}VxDAR}26*jF_I;E${;^=Fl+7^fXYuH~P*w|q zp8%X1auN?%Had*Z*bPwh*>w1FrR4FBK&An8CSe`+!uAqNq+|a5MQB@rEWLgm%6Glc zn6$A}%PiRgleE+!<(ED@!B2O=P~4h&Tldi?2VUqkQITIcdk- zb_x&+0Nwge_P>3Z{nk$+(6Gn`K@t{Jz%fnmx;V+`nq<6JA?Pe9h(HCieO>DB4sYtd zDmWS0C$0BzH8JdJ2mV=c@|6@H2D!X;lwauC01+dlFraE!kJdj0a`=h)L=QX zuY)(7iXL6P;E43xFPqsimzm~4RJFFYku*Cl4Geh2V>^>m?$#?mpL;fI&O1AKY_}cb zbhsdUc5A>2`D3U2@pstS{QxJ-lb2^j!e`CT<8b1KU3Dir9A}pa%JY979lUzX>vM~< zuJ+X&*Zb`b7ZI}hif4X{mOqYS&h8kDjW9lPvU|ncQpqscbo&p{W;)7$7wtFoE4}&n zyVjW+EGF!CH9ybP=t>-Ro~hwJQ&U{Pbu@ma=G!d+y)oVEa;O^{?C*aTKiLRB1U`^gmY%rO3J;B#{t4FK$ zj-6<^QMweXrGwi2yVEm+^pqr!M$ne_QJmOxmlKOzu=%I5@9pIB>H2qS_Nd5GIu3+y zNCe0e_3zZ3p{be&l6JpPJA3JWpnd~)PS~D5Q@t`SUX}VS82AS&TQ&I$wfE!vJ@?P( zq-@pHx8QTaUb8Z-Y;K$1M0I_$izrV4*J$GTEb<#<-vt>~lX?_;)w;v`qYrf``4QU) zwkfZ=oNKJwCg|b3hJh6nq@#D@>4XB_XaK@TT!~;_qI~;jub*MSA*sI%xdQ+ZBmPob zjNxl`d!GVwJbZ6YJlPiCT?0z~@5B__?X3XL#N4s?--!v;%%I^bF-s7#r%Np|&f{_I zAoe%A})Bp4_8P*eS+_F=WT%%`S*3sp|iW*fS;W1F~Z$Zja&(AGsR<-?jZ&trXYr#nx?# z2w8__chktYlSheqw4Q8&>R^W^Cj`^oV73Q_%oi1W>H2@GX|3`bx+6X1Iz5(0l$e9) z1TMo6aXZY;_|cFQ2Xbo=Oe-@pnl1GEpB0>8!0h7D$w;rw7bU&FUCn-u5ZD<3Pnv-X z5mm~tKwAkcIE5|AJ%|_hO7+jIM*g7=5=$7-YvUR4oO_mTiQqm;m=;NuPNLtGBZiGA eH3A1;qtXKr;%|kAH&Idi3;Umi{VT?OI`JQ?$Bj?` literal 0 HcmV?d00001 diff --git a/boards/espressif/esp32_ethernet_kit/doc/img/esp32-ethernet-kit-rmii-clk-to-phy.jpg b/boards/espressif/esp32_ethernet_kit/doc/img/esp32-ethernet-kit-rmii-clk-to-phy.jpg new file mode 100644 index 0000000000000000000000000000000000000000..c643f2e9514b1b8e2c933bb6c9334d7919dc15e9 GIT binary patch literal 12250 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 S&H7)4`uC&rXAADl)c*lqd3tLA literal 0 HcmV?d00001 diff --git a/boards/espressif/esp32_ethernet_kit/doc/img/esp32-ethernet-kit-v1.1-block-diagram.jpg b/boards/espressif/esp32_ethernet_kit/doc/img/esp32-ethernet-kit-v1.1-block-diagram.jpg new file mode 100644 index 0000000000000000000000000000000000000000..2ce77e6ae6f8e11506bd70d2e02c14a16b1488dc GIT binary patch literal 49883 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ⓈHz1@G@$1wt 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
    dN>cIMUP|V80{nhg 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 literal 0 HcmV?d00001 diff --git a/boards/espressif/esp32_ethernet_kit/doc/img/esp32-ethernet-kit-v1.2.jpg b/boards/espressif/esp32_ethernet_kit/doc/img/esp32-ethernet-kit-v1.2.jpg new file mode 100644 index 0000000000000000000000000000000000000000..9a756e0a2fce4890f2db7941399b9085bb27d641 GIT binary patch literal 58758 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�zcCzFgGtTM|F^V2^{oL|*|n;tqoNp@&l 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

    W(La3(aTwCmGqSu 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 literal 0 HcmV?d00001 diff --git a/boards/espressif/esp32_ethernet_kit/doc/index.rst b/boards/espressif/esp32_ethernet_kit/doc/index.rst new file mode 100644 index 0000000..22a9429 --- /dev/null +++ b/boards/espressif/esp32_ethernet_kit/doc/index.rst @@ -0,0 +1,621 @@ +.. zephyr:board:: esp32_ethernet_kit + +Overview +******** + +The ESP32-Ethernet-Kit is an Ethernet-to-Wi-Fi development board that enables +Ethernet devices to be interconnected over Wi-Fi. At the same time, to provide +more flexible power supply options, the ESP32-Ethernet-Kit also supports power +over Ethernet (PoE). + +.. _get-started-esp32-ethernet-kit-v1.2-overview: + +ESP32-Ethernet-Kit is an ESP32-WROVER-E based development. +For more information, check the datasheet at `ESP32-WROVER-E Datasheet`_. + +It consists of two development boards, the Ethernet Board A and the PoE +board B. The `Ethernet Board (A)`_ contains Bluetooth/Wi-Fi dual-mode +ESP32-WROVER-E module and IP101GRI, a Single Port 10/100 Fast Ethernet +Transceiver (PHY). The `PoE Board (B)`_ provides power over Ethernet +functionality. The A board can work independently, without the board B +installed. + +.. _get-started-esp32-ethernet-kit-v1.2: + +.. figure:: img/esp32-ethernet-kit-v1.2.jpg + :align: center + :alt: ESP32-Ethernet-Kit V1.2 + :figclass: align-center + + ESP32-Ethernet-Kit V1.2 + +For the application loading and monitoring, the Ethernet Board (A) also +features FTDI FT2232H chip - an advanced multi-interface USB bridge. +This chip enables to use JTAG for direct debugging of ESP32 through the +USB interface without a separate JTAG debugger. + +Hardware +******** + +Supported Features +================== + +.. zephyr:board-supported-hw:: + +Functionality Overview +====================== + +The block diagram below shows the main components of ESP32-Ethernet-Kit +and their interconnections. + +.. figure:: img/esp32-ethernet-kit-v1.1-block-diagram.jpg + :align: center + :alt: ESP32-Ethernet-Kit block diagram + :figclass: align-center + + ESP32-Ethernet-Kit block diagram + + +Functional Description +---------------------- + +The following figures and tables describe the key components, interfaces, +and controls of the ESP32-Ethernet-Kit. + +.. _get-started-esp32-ethernet-kit-a-v1.2-layout: + + +Ethernet Board (A) +^^^^^^^^^^^^^^^^^^ + +.. figure:: img/esp32-ethernet-kit-a-v1.2-layout.jpg + :align: center + :alt: ESP32-Ethernet-Kit V1.2 + :figclass: align-center + + ESP32-Ethernet-Kit - Ethernet Board (A) layout + +The table below provides description starting from the picture's top right +corner and going clockwise. + +.. list-table:: Table 1 Component Description + :widths: 40 150 + :header-rows: 1 + + * - Key Component + - Description + * - ESP32-WROVER-E + - This ESP32 module features 64-Mbit PSRAM for flexible extended storage + and data processing capabilities. + * - GPIO Header 2 + - Five unpopulated through-hole solder pads to provide access to selected + GPIOs of ESP32. For details, see `GPIO Header 2`_. + * - Function Switch + - A 4-bit DIP switch used to configure the functionality of selected GPIOs + of ESP32. For details see `Function Switch`_. + * - Tx/Rx LEDs + - Two LEDs to show the status of UART transmission. + * - FT2232H + - The FT2232H chip serves as a multi-protocol USB-to-serial bridge which + can be programmed and controlled via USB to provide communication with + ESP32. FT2232H also features USB-to-JTAG interface which is available + on channel A of the chip, while USB-to-serial is on channel B. + The FT2232H chip enhances user-friendliness in terms of application + development and debugging. See `ESP32-Ethernet-Kit V1.2 Ethernet Board (A) Schematic`_ + * - USB Port + - USB interface. Power supply for the board as well as the communication + interface between a computer and the board. + * - Power Switch + - Power On/Off Switch. Toggling the switch to **5V0** position powers the + board on, toggling to **GND** position powers the board off. + * - 5V Input + - The 5 V power supply interface can be more convenient when the board is + operating autonomously (not connected to a computer). + * - 5V Power On LED + - This red LED turns on when power is supplied to the board, either from + USB or 5 V Input. + * - DC/DC Converter + - Provided DC 5 V to 3.3 V conversion, output current up to 2 A. + * - Board B Connectors + - A pair male and female header pins for mounting the `PoE Board (B)`_ + * - IP101GRI (PHY) + - The physical layer (PHY) connection to the Ethernet cable is + implemented using the + `IP101GRI `_ + chip. The connection between PHY and ESP32 is done through the reduced + media-independent interface (RMII), a variant of the media-independent + interface `(MII) `_ + standard. The PHY supports the IEEE 802.3/802.3u standard of 10/100 + Mbps. + * - RJ45 Port + - Ethernet network data transmission port. + * - Magnetics Module + - The Magnetics are part of the Ethernet specification to protect against + faults and transients, including rejection of common mode signals + between the transceiver IC and the cable. The magnetics also provide + galvanic isolation between the transceiver and the Ethernet device. + * - Link/Activity LEDs + - Two LEDs (green and red) that respectively indicate the "Link" and + "Activity" statuses of the PHY. + * - BOOT Button + - Download button. Holding down **BOOT** and then pressing **EN** + initiates Firmware Download mode for downloading firmware through the + serial port. + * - EN Button + - Reset button. + * - GPIO Header 1 + - This header provides six unpopulated through-hole solder pads connected + to spare GPIOs of ESP32. For details, see `GPIO Header 1`_. + +PoE Board (B) +^^^^^^^^^^^^^ + +This board coverts power delivered over the Ethernet cable (PoE) to provide a +power supply for the Ethernet Board (A). The main components of the PoE Board +(B) are shown on the block diagram under `Functionality Overview`_. + +The PoE Board (B) has the following features: + +* Support for IEEE 802.3at +* Power output: 5 V, 1.4 A + +To take advantage of the PoE functionality the **RJ45 Port** of the Ethernet +board (A) should be connected with an Ethernet cable to a switch that supports +PoE. When the Ethernet Board (A) detects 5 V power output from the PoE Board +(B), the USB power will be automatically cut off. + +.. figure:: img/esp32-ethernet-kit-b-v1.0-layout.jpg + :align: center + :alt: ESP32-Ethernet-Kit - PoE Board (B) + :figclass: align-center + + ESP32-Ethernet-Kit - PoE Board (B) layout + +.. list-table:: Table PoE Board (B) + :widths: 40 150 + :header-rows: 1 + + * - Key Component + - Description + * - Board A Connector + - Four female (left) and four male (right) header pins for connecting the + PoE Board (B) to `Ethernet Board (A)`_. The pins on the left accept + power coming from a PoE switch. The pins on the right deliver 5 V power + supply to the Ethernet Board (A). + * - External Power Terminals + - Optional power supply (26.6 ~ 54 V) to the PoE Board (B). + +.. _get-started-esp32-ethernet-kit-v1.2-setup-options: + + +Setup Options +============= + +This section describes options to configure the ESP32-Ethernet-Kit hardware. + + +Function Switch +--------------- + +When in On position, this DIP switch is routing listed GPIOs to FT2232H to +provide JTAG functionality. When in Off position, the GPIOs may be used for +other purposes. + +======= ================ +DIP SW GPIO Pin +======= ================ + 1 GPIO13 + 2 GPIO12 + 3 GPIO15 + 4 GPIO14 +======= ================ + + +RMII Clock Selection +-------------------- + +The ethernet MAC and PHY under RMII working mode need a common 50 MHz +reference clock (i.e. RMII clock) that can be provided either externally, +or generated from internal ESP32 APLL (not recommended). + +.. note:: + + For additional information on the RMII clock selection, please refer to + `ESP32-Ethernet-Kit V1.2 Ethernet Board (A) Schematic`_, sheet 2, location D2. + +RMII Clock Sourced Externally by PHY +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +By default, the ESP32-Ethernet-Kit is configured to provide RMII clock for the +IP101GRI PHY's 50M_CLKO output. The clock signal is generated by the frequency +multiplication of 25 MHz crystal connected to the PHY. For details, please see +the figure below. + +.. figure:: img/esp32-ethernet-kit-rmii-clk-from-phy.jpg + :align: center + :alt: RMII Clock from IP101GRI PHY + :figclass: align-center + + RMII Clock from IP101GRI PHY + +Please note that the PHY is reset on power up by pulling the RESET_N signal +down with a resistor. ESP32 should assert RESET_N high with GPIO5 to enable +PHY. Only this can ensure the power-up of system. Otherwise ESP32 may enter +download mode (when the clock signal of REF_CLK_50M is at a high logic level +during the GPIO0 power-up sampling phase). + + +RMII Clock Sourced Internally from ESP32's APLL +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +Another option is to source the RMII Clock from internal ESP32 APLL, see +figure below. The clock signal coming from GPIO0 is first inverted, to account +for transmission line delay, and then supplied to the PHY. + +.. figure:: img/esp32-ethernet-kit-rmii-clk-to-phy.jpg + :align: center + :alt: RMII Clock from ESP Internal APLL + :figclass: align-center + + RMII Clock from ESP Internal APLL + +To implement this option, users need to remove or add some RC components on +the board. For details please refer to +`ESP32-Ethernet-Kit V1.2 Ethernet Board (A) Schematic`_, +sheet 2, location D2. Please note that if the APLL is already used for other +purposes (e.g. I2S peripheral), then you have no choice but use an external +RMII clock. + + +GPIO Allocation +--------------- + +This section describes allocation of ESP32 GPIOs to specific interfaces or +functions of the ESP32-Ethernet-Kit. + + +IP101GRI (PHY) Interface +^^^^^^^^^^^^^^^^^^^^^^^^ + +The allocation of the ESP32 (MAC) pins to IP101GRI (PHY) is shown in the table +below. Implementation of ESP32-Ethernet-Kit defaults to Reduced +Media-Independent Interface (RMII). + +==== ================ =============== +No. ESP32 Pin (MAC) IP101GRI (PHY) +==== ================ =============== +*RMII Interface* +--------------------------------------- + 1 GPIO21 TX_EN + 2 GPIO19 TXD[0] + 3 GPIO22 TXD[1] + 4 GPIO25 RXD[0] + 5 GPIO26 RXD[1] + 6 GPIO27 CRS_DV + 7 GPIO0 REF_CLK +---- ---------------- --------------- +*Serial Management Interface* +--------------------------------------- + 8 GPIO23 MDC + 9 GPIO18 MDIO +---- ---------------- --------------- +*PHY Reset* +--------------------------------------- +10 GPIO5 Reset_N +==== ================ =============== + +.. note:: + + The allocation of all pins under the ESP32's *RMII Interface* is fixed and + cannot be changed either through IO MUX or GPIO Matrix. REF_CLK can only + be selected from GPIO0, GPIO16 or GPIO17 and it can not be changed through + GPIO Matrix. + + +GPIO Header 1 +^^^^^^^^^^^^^ + +This header exposes some GPIOs that are not used elsewhere on the +ESP32-Ethernet-Kit. + +==== ================ +No. ESP32 Pin +==== ================ + 1 GPIO32 + 2 GPIO33 + 3 GPIO34 + 4 GPIO35 + 5 GPIO36 + 6 GPIO39 +==== ================ + + +GPIO Header 2 +^^^^^^^^^^^^^ + +This header contains GPIOs that may be used for other purposes depending on +scenarios described in column "Comments". + +==== ========== ==================== +No. ESP32 Pin Comments +==== ========== ==================== + 1 GPIO17 See note 1 + 2 GPIO16 See note 1 + 3 GPIO4 + 4 GPIO2 + 5 GPIO13 See note 2 + 6 GPIO12 See note 2 + 7 GPIO15 See note 2 + 8 GPIO14 See note 2 + 9 GND Ground +10 3V3 3.3 V power supply +==== ========== ==================== + +.. note:: + + 1. The ESP32 pins GPIO16 and GPIO17 are not broken out to the + ESP32-WROVER-E module and therefore not available for use. If you need + to use these pins, please solder a module without PSRAM memory inside, + e.g. the ESP32-WROOM-32D or ESP32-SOLO-1. + + 2. Functionality depends on the settings of the `Function Switch`_. + + +GPIO Allocation Summary +^^^^^^^^^^^^^^^^^^^^^^^ + +.. csv-table:: + :header: ESP32-WROVER-E,IP101GRI,UART,JTAG,GPIO,Comments + + S_VP,,,,IO36, + S_VN,,,,IO39, + IO34,,,,IO34, + IO35,,,,IO35, + IO32,,,,IO32, + IO33,,,,IO33, + IO25,RXD[0],,,, + IO26,RXD[1],,,, + IO27,CRS_DV,,,, + IO14,,,TMS,IO14, + IO12,,,TDI,IO12, + IO13,,,TCK,IO13, + IO15,,,TDO,IO15, + IO2,,,,IO2, + IO0,REF_CLK,,,,See note 1 + IO4,,,,IO4, + IO16,,,,IO16 (NC),See note 2 + IO17,,,,IO17 (NC),See note 2 + IO5,Reset_N,,,,See note 1 + IO18,MDIO,,,, + IO19,TXD[0],,,, + IO21,TX_EN,,,, + RXD0,,RXD,,, + TXD0,,TXD,,, + IO22,TXD[1],,,, + IO23,MDC,,,, + +.. note:: + + 1. To prevent the power-on state of the GPIO0 from being affected by the + clock output on the PHY side, the RESET_N signal to PHY defaults to + low, turning the clock output off. After power-on you can control + RESET_N with GPIO5 to turn the clock output on. See also + `RMII Clock Sourced Externally by PHY`_. For PHYs that cannot turn off + the clock output through RESET_N, it is recommended to use a crystal + module that can be disabled/enabled externally. Similarly like when + using RESET_N, the oscillator module should be disabled by default and + turned on by ESP32 after power-up. For a reference design please see + `ESP32-Ethernet-Kit V1.2 Ethernet Board (A) Schematic`_. + + 2. The ESP32 pins GPIO16 and GPIO17 are not broken out to the + ESP32-WROVER-E module and therefore not available for use. If you need + to use these pins, please solder a module without PSRAM memory inside, + e.g. the ESP32-WROOM-32D or ESP32-SOLO-1. + +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 +******************* + +.. zephyr:board-supported-runners:: + +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:: + :tool: west + :zephyr-app: samples/hello_world + :board: esp32_ethernet_kit/esp32/procpu + :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 (see :ref:`build_an_application` and +:ref:`application_run` for more details). + +.. zephyr-app-commands:: + :zephyr-app: samples/hello_world + :board: esp32_ethernet_kit/esp32/procpu + :goals: build + +The usual ``flash`` target will work with the ``esp32_ethernet_kit`` board +configuration. Here is an example for the :zephyr:code-sample:`hello_world` +application. + +.. zephyr-app-commands:: + :zephyr-app: samples/hello_world + :board: esp32_ethernet_kit/esp32/procpu + :goals: flash + +Open the serial monitor using the following command: + +.. code-block:: shell + + west espressif monitor + +After the board has automatically reset and booted, you should see the following +message in the monitor: + +.. code-block:: console + + ***** Booting Zephyr OS vx.x.x-xxx-gxxxxxxxxxxxx ***** + Hello World! esp32_ethernet_kit + +Debugging +********* + +As with much custom hardware, the ESP32 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= -DOPENOCD_DEFAULT_PATH=`` +parameter when building. + +Here is an example for building the :zephyr:code-sample:`hello_world` application. + +.. zephyr-app-commands:: + :zephyr-app: samples/hello_world + :board: esp32_ethernet_kit/esp32/procpu + :goals: build flash + :gen-args: -DOPENOCD= -DOPENOCD_DEFAULT_PATH= + +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: esp32_ethernet_kit/esp32/procpu + :goals: debug + + +Enabling Ethernet +***************** + +Enable Ethernet MAC, PHY and MDIO; add these to your device tree overlay: + +.. code-block:: devicetree + + ð { + status = "okay"; + }; + + &phy { + status = "okay"; + }; + + &mdio { + status = "okay"; + }; + +Enable Ethernet in KConfig: + +.. code-block:: cfg + + CONFIG_ETH_ESP32=y + CONFIG_NETWORKING=y + CONFIG_NET_L2_ETHERNET=y + +Board Init +========== + +RESET_N (GPIO5) is automatically set high to enable the Ethernet PHY +during board initialization (board_init.c) + +References +********** + +.. target-notes:: + +.. _`ESP32-Ethernet-Kit V1.2 Ethernet Board (A) Schematic`: https://dl.espressif.com/dl/schematics/SCH_ESP32-Ethernet-Kit_A_V1.2_20200528.pdf +.. _`ESP32-WROVER-E Datasheet`: https://www.espressif.com/sites/default/files/documentation/esp32-wrover-e_esp32-wrover-ie_datasheet_en.pdf +.. _`OpenOCD ESP32`: https://github.com/espressif/openocd-esp32/releases diff --git a/boards/espressif/esp32_ethernet_kit/esp32_ethernet_kit-pinctrl.dtsi b/boards/espressif/esp32_ethernet_kit/esp32_ethernet_kit-pinctrl.dtsi new file mode 100644 index 0000000..1b6bd6b --- /dev/null +++ b/boards/espressif/esp32_ethernet_kit/esp32_ethernet_kit-pinctrl.dtsi @@ -0,0 +1,72 @@ +/* + * Copyright (c) 2022-2025 Grant Ramsay + * + * SPDX-License-Identifier: Apache-2.0 + */ + +#include +#include +#include + +&pinctrl { + + uart0_default: uart0_default { + group1 { + pinmux = ; + output-high; + }; + group2 { + pinmux = ; + bias-pull-up; + }; + }; + + spim2_default: spim2_default { + group1 { + pinmux = , + , + ; + }; + group2 { + pinmux = ; + output-low; + }; + }; + + mdio_default: mdio_default { + group1 { + pinmux = , + ; + }; + }; + + i2s0_default: i2s0_default { + group1 { + pinmux = , + , + , + , + ; + output-enable; + }; + group2 { + pinmux = ; + input-enable; + }; + }; + + i2s1_default: i2s1_default { + group1 { + pinmux = , + , + , + , + ; + output-enable; + }; + group2 { + pinmux = ; + input-enable; + }; + }; +}; diff --git a/boards/espressif/esp32_ethernet_kit/esp32_ethernet_kit_appcpu.dts b/boards/espressif/esp32_ethernet_kit/esp32_ethernet_kit_appcpu.dts new file mode 100644 index 0000000..c4a99a6 --- /dev/null +++ b/boards/espressif/esp32_ethernet_kit/esp32_ethernet_kit_appcpu.dts @@ -0,0 +1,30 @@ +/* + * Copyright (c) 2023 Espressif Systems (Shanghai) Co., Ltd. + * + * SPDX-License-Identifier: Apache-2.0 + */ +/dts-v1/; + +#include +#include + +/ { + model = "Espressif ESP32-Ethernet-Kit APPCPU"; + compatible = "espressif,esp32"; + + chosen { + zephyr,sram = &sram1; + zephyr,ipc_shm = &shm0; + zephyr,ipc = &ipm0; + zephyr,flash = &flash0; + zephyr,code-partition = &slot0_appcpu_partition; + }; +}; + +&ipm0 { + status = "okay"; +}; + +&trng0 { + status = "okay"; +}; diff --git a/boards/espressif/esp32_ethernet_kit/esp32_ethernet_kit_appcpu.yaml b/boards/espressif/esp32_ethernet_kit/esp32_ethernet_kit_appcpu.yaml new file mode 100644 index 0000000..7f2f067 --- /dev/null +++ b/boards/espressif/esp32_ethernet_kit/esp32_ethernet_kit_appcpu.yaml @@ -0,0 +1,27 @@ +identifier: esp32_ethernet_kit/esp32/appcpu +name: ESP32 ETHERNET KIT APPCPU +type: mcu +arch: xtensa +toolchain: + - zephyr +supported: + - uart +testing: + ignore_tags: + - net + - bluetooth + - flash + - cpp + - posix + - watchdog + - logging + - kernel + - pm + - gpio + - crypto + - eeprom + - heap + - cmsis_rtos + - jwt + - zdsp +vendor: espressif diff --git a/boards/espressif/esp32_ethernet_kit/esp32_ethernet_kit_appcpu_defconfig b/boards/espressif/esp32_ethernet_kit/esp32_ethernet_kit_appcpu_defconfig new file mode 100644 index 0000000..4854664 --- /dev/null +++ b/boards/espressif/esp32_ethernet_kit/esp32_ethernet_kit_appcpu_defconfig @@ -0,0 +1,3 @@ +# SPDX-License-Identifier: Apache-2.0 + +CONFIG_CLOCK_CONTROL=y diff --git a/boards/espressif/esp32_ethernet_kit/esp32_ethernet_kit_procpu.dts b/boards/espressif/esp32_ethernet_kit/esp32_ethernet_kit_procpu.dts new file mode 100644 index 0000000..bf2fbbd --- /dev/null +++ b/boards/espressif/esp32_ethernet_kit/esp32_ethernet_kit_procpu.dts @@ -0,0 +1,107 @@ +/* + * Copyright (c) 2022-2025 Grant Ramsay + * + * SPDX-License-Identifier: Apache-2.0 + */ +/dts-v1/; + +#include +#include "esp32_ethernet_kit-pinctrl.dtsi" +#include + +/ { + model = "Espressif ESP32-Ethernet-Kit PROCPU"; + compatible = "espressif,esp32"; + + aliases { + uart-0 = &uart0; + watchdog0 = &wdt0; + }; + + chosen { + zephyr,sram = &sram1; + zephyr,console = &uart0; + zephyr,shell-uart = &uart0; + zephyr,flash = &flash0; + zephyr,code-partition = &slot0_partition; + zephyr,bt-hci = &esp32_bt_hci; + }; +}; + +&uart0 { + status = "okay"; + current-speed = <115200>; + pinctrl-0 = <&uart0_default>; + pinctrl-names = "default"; +}; + +&gpio0 { + status = "okay"; +}; + +&gpio1 { + status = "okay"; +}; + +&i2s0 { + pinctrl-0 = <&i2s0_default>; + pinctrl-names = "default"; + status = "disabled"; +}; + +&i2s1 { + pinctrl-0 = <&i2s1_default>; + pinctrl-names = "default"; + status = "disabled"; +}; + +&spi2 { + #address-cells = <1>; + #size-cells = <0>; + status = "okay"; + pinctrl-0 = <&spim2_default>; + pinctrl-names = "default"; +}; + +&timer0 { + status = "okay"; +}; + +&timer1 { + status = "okay"; +}; + +&timer2 { + status = "okay"; +}; + +&timer3 { + status = "okay"; +}; + +&trng0 { + status = "okay"; +}; + +&mdio { + pinctrl-0 = <&mdio_default>; + pinctrl-names = "default"; + + phy: ethernet-phy@1 { + compatible = "ethernet-phy"; + status = "disabled"; + reg = <1>; + }; +}; + +ð { + phy-handle = <&phy>; +}; + +&esp32_bt_hci { + status = "okay"; +}; + +&wifi { + status = "okay"; +}; diff --git a/boards/espressif/esp32_ethernet_kit/esp32_ethernet_kit_procpu.yaml b/boards/espressif/esp32_ethernet_kit/esp32_ethernet_kit_procpu.yaml new file mode 100644 index 0000000..f6fd5a5 --- /dev/null +++ b/boards/espressif/esp32_ethernet_kit/esp32_ethernet_kit_procpu.yaml @@ -0,0 +1,14 @@ +identifier: esp32_ethernet_kit/esp32/procpu +name: ESP32 ETHERNET KIT PROCPU +type: mcu +arch: xtensa +toolchain: + - zephyr +supported: + - gpio + - watchdog + - uart + - nvs + - pwm + - i2s +vendor: espressif diff --git a/boards/espressif/esp32_ethernet_kit/esp32_ethernet_kit_procpu_defconfig b/boards/espressif/esp32_ethernet_kit/esp32_ethernet_kit_procpu_defconfig new file mode 100644 index 0000000..e192c24 --- /dev/null +++ b/boards/espressif/esp32_ethernet_kit/esp32_ethernet_kit_procpu_defconfig @@ -0,0 +1,7 @@ +# SPDX-License-Identifier: Apache-2.0 + +CONFIG_CONSOLE=y +CONFIG_SERIAL=y +CONFIG_UART_CONSOLE=y + +CONFIG_GPIO=y diff --git a/boards/espressif/esp32_ethernet_kit/support/openocd.cfg b/boards/espressif/esp32_ethernet_kit/support/openocd.cfg new file mode 100644 index 0000000..338e6e4 --- /dev/null +++ b/boards/espressif/esp32_ethernet_kit/support/openocd.cfg @@ -0,0 +1,5 @@ +set ESP_RTOS none +set ESP32_ONLYCPU 1 + +source [find interface/ftdi/esp32_devkitj_v1.cfg] +source [find target/esp32.cfg] diff --git a/boards/espressif/esp32c3_devkitc/Kconfig b/boards/espressif/esp32c3_devkitc/Kconfig new file mode 100644 index 0000000..c6a99b1 --- /dev/null +++ b/boards/espressif/esp32c3_devkitc/Kconfig @@ -0,0 +1,6 @@ +# Copyright (c) 2024 Espressif Systems (Shanghai) Co., Ltd. +# SPDX-License-Identifier: Apache-2.0 + +config HEAP_MEM_POOL_ADD_SIZE_BOARD + int + default 4096 diff --git a/boards/espressif/esp32c3_devkitc/Kconfig.esp32c3_devkitc b/boards/espressif/esp32c3_devkitc/Kconfig.esp32c3_devkitc new file mode 100644 index 0000000..7e57441 --- /dev/null +++ b/boards/espressif/esp32c3_devkitc/Kconfig.esp32c3_devkitc @@ -0,0 +1,7 @@ +# ESP32C3 devkitc board configuration + +# Copyright (c) 2024 Espressif Systems (Shanghai) Co., Ltd. +# SPDX-License-Identifier: Apache-2.0 + +config BOARD_ESP32C3_DEVKITC + select SOC_ESP32C3_WROOM_02_N4 diff --git a/boards/espressif/esp32c3_devkitc/Kconfig.sysbuild b/boards/espressif/esp32c3_devkitc/Kconfig.sysbuild new file mode 100644 index 0000000..8d3acb9 --- /dev/null +++ b/boards/espressif/esp32c3_devkitc/Kconfig.sysbuild @@ -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 diff --git a/boards/espressif/esp32c3_devkitc/board.cmake b/boards/espressif/esp32c3_devkitc/board.cmake new file mode 100644 index 0000000..2f04d1f --- /dev/null +++ b/boards/espressif/esp32c3_devkitc/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/espressif/esp32c3_devkitc/board.yml b/boards/espressif/esp32c3_devkitc/board.yml new file mode 100644 index 0000000..5f12268 --- /dev/null +++ b/boards/espressif/esp32c3_devkitc/board.yml @@ -0,0 +1,6 @@ +board: + name: esp32c3_devkitc + full_name: ESP32-C3-DevKitC + vendor: espressif + socs: + - name: esp32c3 diff --git a/boards/espressif/esp32c3_devkitc/doc/img/esp32c3_devkitc.webp b/boards/espressif/esp32c3_devkitc/doc/img/esp32c3_devkitc.webp new file mode 100644 index 0000000000000000000000000000000000000000..5f2dc9e6c3d55b88f8118c4a3e97503809d2e52b GIT binary patch literal 31546 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 literal 0 HcmV?d00001 diff --git a/boards/espressif/esp32c3_devkitc/doc/index.rst b/boards/espressif/esp32c3_devkitc/doc/index.rst new file mode 100644 index 0000000..eae08a6 --- /dev/null +++ b/boards/espressif/esp32c3_devkitc/doc/index.rst @@ -0,0 +1,219 @@ +.. zephyr:board:: esp32c3_devkitc + +Overview +******** + +ESP32-C3-DevKitC-02 is an entry-level development board based on ESP32-C3-WROOM-02, +a general-purpose module with 4 MB SPI flash. This board integrates complete Wi-Fi and Bluetooth® Low Energy functions. +For more information, check `ESP32-C3-DevKitC`_. + +Hardware +******** + +ESP32-C3 is a single-core Wi-Fi and Bluetooth 5 (LE) microcontroller SoC, +based on the open-source RISC-V architecture. It strikes the right balance of power, +I/O capabilities and security, thus offering the optimal cost-effective +solution for connected devices. +The availability of Wi-Fi and Bluetooth 5 (LE) connectivity not only makes the device configuration easy, +but it also facilitates a variety of use-cases based on dual connectivity. + +The features include the following: + +- 32-bit core RISC-V microcontroller with a maximum clock speed of 160 MHz +- 400 KB of internal RAM +- 802.11b/g/n/e/i +- A Bluetooth LE subsystem that supports features of Bluetooth 5 and Bluetooth Mesh +- Various peripherals: + + - 12-bit ADC with up to 6 channels + - TWAI compatible with CAN bus 2.0 + - Temperature sensor + - 3x SPI + - 1x I2S + - 1x I2C + - 2x UART + - LED PWM with up to 6 channels + +- Cryptographic hardware acceleration (RNG, ECC, RSA, SHA-2, AES) + +For more information, check the datasheet at `ESP32-C3 Datasheet`_ or the technical reference +manual at `ESP32-C3 Technical Reference Manual`_. + +Supported Features +================== + +.. zephyr:board-supported-hw:: + +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 +******************* + +.. zephyr:board-supported-runners:: + +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:: + :tool: west + :zephyr-app: samples/hello_world + :board: esp32c3_devkitc + :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 (see :ref:`build_an_application` and +:ref:`application_run` for more details). + +.. zephyr-app-commands:: + :zephyr-app: samples/hello_world + :board: esp32c3_devkitc + :goals: build + +The usual ``flash`` target will work with the ``esp32c3_devkitc`` board +configuration. Here is an example for the :zephyr:code-sample:`hello_world` +application. + +.. zephyr-app-commands:: + :zephyr-app: samples/hello_world + :board: esp32c3_devkitc + :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! esp32c3_devkitc + +Debugging +********* + +As with much custom hardware, the ESP32-C3 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= -DOPENOCD_DEFAULT_PATH=`` +parameter when building. + +Here is an example for building the :zephyr:code-sample:`hello_world` application. + +.. zephyr-app-commands:: + :zephyr-app: samples/hello_world + :board: esp32c3_devkitc + :goals: build flash + :gen-args: -DOPENOCD= -DOPENOCD_DEFAULT_PATH= + +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: esp32c3_devkitc + :goals: debug + +References +********** + +.. target-notes:: + +.. _`ESP32-C3-DevKitC`: https://docs.espressif.com/projects/esp-dev-kits/en/latest/esp32c3/esp32-c3-devkitc-02/index.html +.. _`ESP32-C3 Datasheet`: https://www.espressif.com/sites/default/files/documentation/esp32-c3_datasheet_en.pdf +.. _`ESP32-C3 Technical Reference Manual`: https://espressif.com/sites/default/files/documentation/esp32-c3_technical_reference_manual_en.pdf +.. _`OpenOCD ESP32`: https://github.com/espressif/openocd-esp32/releases diff --git a/boards/espressif/esp32c3_devkitc/esp32c3_devkitc-pinctrl.dtsi b/boards/espressif/esp32c3_devkitc/esp32c3_devkitc-pinctrl.dtsi new file mode 100644 index 0000000..f6add95 --- /dev/null +++ b/boards/espressif/esp32c3_devkitc/esp32c3_devkitc-pinctrl.dtsi @@ -0,0 +1,52 @@ +/* + * Copyright (c) 2024 Espressif Systems (Shanghai) Co., Ltd. + * + * SPDX-License-Identifier: Apache-2.0 + */ + +#include +#include +#include + +&pinctrl { + + uart0_default: uart0_default { + group1 { + pinmux = ; + output-high; + }; + group2 { + pinmux = ; + bias-pull-up; + }; + }; + + spim2_default: spim2_default { + group1 { + pinmux = , + , + ; + }; + group2 { + pinmux = ; + output-low; + }; + }; + + i2c0_default: i2c0_default { + group1 { + pinmux = , + ; + bias-pull-up; + drive-open-drain; + output-high; + }; + }; + + twai_default: twai_default { + group1 { + pinmux = , + ; + }; + }; +}; diff --git a/boards/espressif/esp32c3_devkitc/esp32c3_devkitc.dts b/boards/espressif/esp32c3_devkitc/esp32c3_devkitc.dts new file mode 100644 index 0000000..ec61f30 --- /dev/null +++ b/boards/espressif/esp32c3_devkitc/esp32c3_devkitc.dts @@ -0,0 +1,103 @@ +/* + * Copyright (c) 2024 Espressif Systems (Shanghai) Co., Ltd. + * + * SPDX-License-Identifier: Apache-2.0 + */ + +/dts-v1/; + +#include +#include "esp32c3_devkitc-pinctrl.dtsi" +#include +#include + +/ { + model = "Espressif ESP32C3-DevkitC"; + compatible = "espressif,esp32c3"; + + chosen { + zephyr,sram = &sram1; + zephyr,console = &uart0; + zephyr,shell-uart = &uart0; + zephyr,flash = &flash0; + zephyr,code-partition = &slot0_partition; + zephyr,bt-hci = &esp32_bt_hci; + }; + + aliases { + sw0 = &user_button1; + i2c-0 = &i2c0; + 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 = ; + }; + }; +}; + +&uart0 { + status = "okay"; + current-speed = <115200>; + pinctrl-0 = <&uart0_default>; + pinctrl-names = "default"; +}; + +&usb_serial { + /* requires resoldering of resistors on the board */ + 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"; +}; + +&gpio0 { + status = "okay"; +}; + +&wdt0 { + status = "okay"; +}; + +&timer0 { + status = "disabled"; +}; + +&timer1 { + status = "disabled"; +}; + +&twai { + /* requires external CAN transceiver or jumper on RX and TX pins for loopback testing */ + status = "disabled"; + pinctrl-0 = <&twai_default>; + pinctrl-names = "default"; +}; + +&esp32_bt_hci { + status = "okay"; +}; + +&wifi { + status = "okay"; +}; diff --git a/boards/espressif/esp32c3_devkitc/esp32c3_devkitc.yaml b/boards/espressif/esp32c3_devkitc/esp32c3_devkitc.yaml new file mode 100644 index 0000000..f2b98e3 --- /dev/null +++ b/boards/espressif/esp32c3_devkitc/esp32c3_devkitc.yaml @@ -0,0 +1,18 @@ +identifier: esp32c3_devkitc +name: ESP32-C3 +type: mcu +arch: riscv +toolchain: + - zephyr +supported: + - adc + - gpio + - i2c + - watchdog + - uart + - dma + - pwm + - spi + - counter + - entropy +vendor: espressif diff --git a/boards/espressif/esp32c3_devkitc/esp32c3_devkitc_defconfig b/boards/espressif/esp32c3_devkitc/esp32c3_devkitc_defconfig new file mode 100644 index 0000000..187793c --- /dev/null +++ b/boards/espressif/esp32c3_devkitc/esp32c3_devkitc_defconfig @@ -0,0 +1,6 @@ +# SPDX-License-Identifier: Apache-2.0 + +CONFIG_CONSOLE=y +CONFIG_SERIAL=y +CONFIG_UART_CONSOLE=y +CONFIG_GPIO=y diff --git a/boards/espressif/esp32c3_devkitc/support/openocd.cfg b/boards/espressif/esp32c3_devkitc/support/openocd.cfg new file mode 100644 index 0000000..92a792f --- /dev/null +++ b/boards/espressif/esp32c3_devkitc/support/openocd.cfg @@ -0,0 +1,11 @@ +set ESP_RTOS none + +# ESP32C3 has built-in JTAG interface over USB port in pins GPIO18/GPIO19 (D-/D+). +# Uncomment the line below to enable USB debugging. +# source [find interface/esp_usb_jtag.cfg] + +# Otherwise, use external JTAG programmer as ESP-Prog +source [find interface/ftdi/esp32_devkitj_v1.cfg] + +source [find target/esp32c3.cfg] +adapter speed 5000 diff --git a/boards/espressif/esp32c3_devkitm/Kconfig b/boards/espressif/esp32c3_devkitm/Kconfig new file mode 100644 index 0000000..c6a99b1 --- /dev/null +++ b/boards/espressif/esp32c3_devkitm/Kconfig @@ -0,0 +1,6 @@ +# Copyright (c) 2024 Espressif Systems (Shanghai) Co., Ltd. +# SPDX-License-Identifier: Apache-2.0 + +config HEAP_MEM_POOL_ADD_SIZE_BOARD + int + default 4096 diff --git a/boards/espressif/esp32c3_devkitm/Kconfig.esp32c3_devkitm b/boards/espressif/esp32c3_devkitm/Kconfig.esp32c3_devkitm new file mode 100644 index 0000000..854b994 --- /dev/null +++ b/boards/espressif/esp32c3_devkitm/Kconfig.esp32c3_devkitm @@ -0,0 +1,7 @@ +# ESP32C3 devkitm board configuration + +# Copyright (c) 2021 Espressif Systems (Shanghai) Co., Ltd. +# SPDX-License-Identifier: Apache-2.0 + +config BOARD_ESP32C3_DEVKITM + select SOC_ESP32C3_MINI_N4 diff --git a/boards/espressif/esp32c3_devkitm/Kconfig.sysbuild b/boards/espressif/esp32c3_devkitm/Kconfig.sysbuild new file mode 100644 index 0000000..3a2d17a --- /dev/null +++ b/boards/espressif/esp32c3_devkitm/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/espressif/esp32c3_devkitm/board.cmake b/boards/espressif/esp32c3_devkitm/board.cmake new file mode 100644 index 0000000..2f04d1f --- /dev/null +++ b/boards/espressif/esp32c3_devkitm/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/espressif/esp32c3_devkitm/board.yml b/boards/espressif/esp32c3_devkitm/board.yml new file mode 100644 index 0000000..90bd85d --- /dev/null +++ b/boards/espressif/esp32c3_devkitm/board.yml @@ -0,0 +1,6 @@ +board: + name: esp32c3_devkitm + full_name: ESP32-C3-DevKitM + vendor: espressif + socs: + - name: esp32c3 diff --git a/boards/espressif/esp32c3_devkitm/doc/img/esp32c3_devkitm.webp b/boards/espressif/esp32c3_devkitm/doc/img/esp32c3_devkitm.webp new file mode 100644 index 0000000000000000000000000000000000000000..d28264253d702b1953748e5e40aae458a43b6744 GIT binary patch literal 31046 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 literal 0 HcmV?d00001 diff --git a/boards/espressif/esp32c3_devkitm/doc/index.rst b/boards/espressif/esp32c3_devkitm/doc/index.rst new file mode 100644 index 0000000..d4fcb4e --- /dev/null +++ b/boards/espressif/esp32c3_devkitm/doc/index.rst @@ -0,0 +1,219 @@ +.. zephyr:board:: esp32c3_devkitm + +Overview +******** + +ESP32-C3-DevKitM is an entry-level development board based on ESP32-C3-MINI-1, +a module named for its small size. This board integrates complete Wi-Fi and Bluetooth® Low Energy functions. +For more information, check `ESP32-C3-DevKitM`_. + +Hardware +******** + +ESP32-C3 is a single-core Wi-Fi and Bluetooth 5 (LE) microcontroller SoC, +based on the open-source RISC-V architecture. It strikes the right balance of power, +I/O capabilities and security, thus offering the optimal cost-effective +solution for connected devices. +The availability of Wi-Fi and Bluetooth 5 (LE) connectivity not only makes the device configuration easy, +but it also facilitates a variety of use-cases based on dual connectivity. + +The features include the following: + +- 32-bit core RISC-V microcontroller with a maximum clock speed of 160 MHz +- 400 KB of internal RAM +- 802.11b/g/n/e/i +- A Bluetooth LE subsystem that supports features of Bluetooth 5 and Bluetooth Mesh +- Various peripherals: + + - 12-bit ADC with up to 6 channels + - TWAI compatible with CAN bus 2.0 + - Temperature sensor + - 3x SPI + - 1x I2S + - 1x I2C + - 2x UART + - LED PWM with up to 6 channels + +- Cryptographic hardware acceleration (RNG, ECC, RSA, SHA-2, AES) + +For more information, check the datasheet at `ESP32-C3 Datasheet`_ or the technical reference +manual at `ESP32-C3 Technical Reference Manual`_. + +Supported Features +================== + +.. zephyr:board-supported-hw:: + +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 +******************* + +.. zephyr:board-supported-runners:: + +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:: + :tool: west + :zephyr-app: samples/hello_world + :board: esp32c3_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 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 (see :ref:`build_an_application` and +:ref:`application_run` for more details). + +.. zephyr-app-commands:: + :zephyr-app: samples/hello_world + :board: esp32c3_devkitm + :goals: build + +The usual ``flash`` target will work with the ``esp32c3_devkitm`` board +configuration. Here is an example for the :zephyr:code-sample:`hello_world` +application. + +.. zephyr-app-commands:: + :zephyr-app: samples/hello_world + :board: esp32c3_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! esp32c3_devkitm + +Debugging +********* + +As with much custom hardware, the ESP32-C3 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= -DOPENOCD_DEFAULT_PATH=`` +parameter when building. + +Here is an example for building the :zephyr:code-sample:`hello_world` application. + +.. zephyr-app-commands:: + :zephyr-app: samples/hello_world + :board: esp32c3_devkitm + :goals: build flash + :gen-args: -DOPENOCD= -DOPENOCD_DEFAULT_PATH= + +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: esp32c3_devkitm + :goals: debug + +References +********** + +.. target-notes:: + +.. _`ESP32-C3-DevKitM`: https://docs.espressif.com/projects/esp-idf/en/latest/esp32c3/hw-reference/esp32c3/user-guide-devkitm-1.html +.. _`ESP32-C3 Datasheet`: https://www.espressif.com/sites/default/files/documentation/esp32-c3_datasheet_en.pdf +.. _`ESP32-C3 Technical Reference Manual`: https://espressif.com/sites/default/files/documentation/esp32-c3_technical_reference_manual_en.pdf +.. _`OpenOCD ESP32`: https://github.com/espressif/openocd-esp32/releases diff --git a/boards/espressif/esp32c3_devkitm/esp32c3_devkitm-pinctrl.dtsi b/boards/espressif/esp32c3_devkitm/esp32c3_devkitm-pinctrl.dtsi new file mode 100644 index 0000000..1e97415 --- /dev/null +++ b/boards/espressif/esp32c3_devkitm/esp32c3_devkitm-pinctrl.dtsi @@ -0,0 +1,66 @@ +/* + * Copyright (c) 2022 Espressif Systems (Shanghai) Co., Ltd. + * + * SPDX-License-Identifier: Apache-2.0 + */ + +#include +#include +#include + +&pinctrl { + + uart0_default: uart0_default { + group1 { + pinmux = ; + output-high; + }; + group2 { + pinmux = ; + bias-pull-up; + }; + }; + + spim2_default: spim2_default { + group1 { + pinmux = , + , + ; + }; + group2 { + pinmux = ; + output-low; + }; + }; + + i2c0_default: i2c0_default { + group1 { + pinmux = , + ; + bias-pull-up; + drive-open-drain; + output-high; + }; + }; + + i2s_default: i2s_default { + group1 { + pinmux = , + , + , + ; + output-enable; + }; + group2 { + pinmux = ; + input-enable; + }; + }; + + twai_default: twai_default { + group1 { + pinmux = , + ; + }; + }; +}; diff --git a/boards/espressif/esp32c3_devkitm/esp32c3_devkitm.dts b/boards/espressif/esp32c3_devkitm/esp32c3_devkitm.dts new file mode 100644 index 0000000..2e1b41e --- /dev/null +++ b/boards/espressif/esp32c3_devkitm/esp32c3_devkitm.dts @@ -0,0 +1,109 @@ +/* + * Copyright (c) 2021 Espressif Systems (Shanghai) Co., Ltd. + * + * SPDX-License-Identifier: Apache-2.0 + */ + +/dts-v1/; + +#include +#include "esp32c3_devkitm-pinctrl.dtsi" +#include +#include + +/ { + model = "Espressif ESP32C3-DevkitM"; + compatible = "espressif,esp32c3"; + + chosen { + zephyr,sram = &sram1; + zephyr,console = &uart0; + zephyr,shell-uart = &uart0; + zephyr,flash = &flash0; + zephyr,code-partition = &slot0_partition; + zephyr,bt-hci = &esp32_bt_hci; + }; + + aliases { + sw0 = &user_button1; + i2c-0 = &i2c0; + 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 = ; + }; + }; +}; + +&uart0 { + status = "okay"; + current-speed = <115200>; + pinctrl-0 = <&uart0_default>; + pinctrl-names = "default"; +}; + +&usb_serial { + /* requires resoldering of resistors on the board */ + status = "okay"; +}; + +&i2c0 { + status = "okay"; + clock-frequency = ; + pinctrl-0 = <&i2c0_default>; + pinctrl-names = "default"; +}; + +&i2s { + pinctrl-0 = <&i2s_default>; + pinctrl-names = "default"; + status = "disabled"; +}; + +&trng0 { + status = "okay"; +}; + +&spi2 { + #address-cells = <1>; + #size-cells = <0>; + status = "okay"; + pinctrl-0 = <&spim2_default>; + pinctrl-names = "default"; +}; + +&gpio0 { + status = "okay"; +}; + +&wdt0 { + status = "okay"; +}; + +&timer0 { + status = "disabled"; +}; + +&timer1 { + status = "disabled"; +}; + +&twai { + /* requires external CAN transceiver or jumper on RX and TX pins for loopback testing */ + status = "disabled"; + pinctrl-0 = <&twai_default>; + pinctrl-names = "default"; +}; + +&esp32_bt_hci { + status = "okay"; +}; + +&wifi { + status = "okay"; +}; diff --git a/boards/espressif/esp32c3_devkitm/esp32c3_devkitm.yaml b/boards/espressif/esp32c3_devkitm/esp32c3_devkitm.yaml new file mode 100644 index 0000000..3815389 --- /dev/null +++ b/boards/espressif/esp32c3_devkitm/esp32c3_devkitm.yaml @@ -0,0 +1,19 @@ +identifier: esp32c3_devkitm +name: ESP32-C3 +type: mcu +arch: riscv +toolchain: + - zephyr +supported: + - adc + - gpio + - i2c + - i2s + - watchdog + - uart + - dma + - pwm + - spi + - counter + - entropy +vendor: espressif diff --git a/boards/espressif/esp32c3_devkitm/esp32c3_devkitm_defconfig b/boards/espressif/esp32c3_devkitm/esp32c3_devkitm_defconfig new file mode 100644 index 0000000..187793c --- /dev/null +++ b/boards/espressif/esp32c3_devkitm/esp32c3_devkitm_defconfig @@ -0,0 +1,6 @@ +# SPDX-License-Identifier: Apache-2.0 + +CONFIG_CONSOLE=y +CONFIG_SERIAL=y +CONFIG_UART_CONSOLE=y +CONFIG_GPIO=y diff --git a/boards/espressif/esp32c3_devkitm/support/openocd.cfg b/boards/espressif/esp32c3_devkitm/support/openocd.cfg new file mode 100644 index 0000000..92a792f --- /dev/null +++ b/boards/espressif/esp32c3_devkitm/support/openocd.cfg @@ -0,0 +1,11 @@ +set ESP_RTOS none + +# ESP32C3 has built-in JTAG interface over USB port in pins GPIO18/GPIO19 (D-/D+). +# Uncomment the line below to enable USB debugging. +# source [find interface/esp_usb_jtag.cfg] + +# Otherwise, use external JTAG programmer as ESP-Prog +source [find interface/ftdi/esp32_devkitj_v1.cfg] + +source [find target/esp32c3.cfg] +adapter speed 5000 diff --git a/boards/espressif/esp32c3_rust/Kconfig b/boards/espressif/esp32c3_rust/Kconfig new file mode 100644 index 0000000..c6a99b1 --- /dev/null +++ b/boards/espressif/esp32c3_rust/Kconfig @@ -0,0 +1,6 @@ +# Copyright (c) 2024 Espressif Systems (Shanghai) Co., Ltd. +# SPDX-License-Identifier: Apache-2.0 + +config HEAP_MEM_POOL_ADD_SIZE_BOARD + int + default 4096 diff --git a/boards/espressif/esp32c3_rust/Kconfig.esp32c3_rust b/boards/espressif/esp32c3_rust/Kconfig.esp32c3_rust new file mode 100644 index 0000000..1b5be57 --- /dev/null +++ b/boards/espressif/esp32c3_rust/Kconfig.esp32c3_rust @@ -0,0 +1,5 @@ +# Copyright (c) 2024 Espressif Systems (Shanghai) Co., Ltd. +# SPDX-License-Identifier: Apache-2.0 + +config BOARD_ESP32C3_RUST + select SOC_ESP32C3_MINI_N4 diff --git a/boards/espressif/esp32c3_rust/Kconfig.sysbuild b/boards/espressif/esp32c3_rust/Kconfig.sysbuild new file mode 100644 index 0000000..8d3acb9 --- /dev/null +++ b/boards/espressif/esp32c3_rust/Kconfig.sysbuild @@ -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 diff --git a/boards/espressif/esp32c3_rust/board.cmake b/boards/espressif/esp32c3_rust/board.cmake new file mode 100644 index 0000000..91581df --- /dev/null +++ b/boards/espressif/esp32c3_rust/board.cmake @@ -0,0 +1,10 @@ +# Copyright (c) 2024 Espressif Systems (Shanghai) Co., Ltd. +# SPDX-License-Identifier: Apache-2.0 + +if(NOT "${OPENOCD}" MATCHES "^${ESPRESSIF_TOOLCHAIN_PATH}/.*") + set(OPENOCD OPENOCD-NOTFOUND) +endif() +find_program(OPENOCD openocd PATHS ${ESPRESSIF_TOOLCHAIN_PATH}/openocd-esp32/bin NO_DEFAULT_PATH) + +include(${ZEPHYR_BASE}/boards/common/esp32.board.cmake) +include(${ZEPHYR_BASE}/boards/common/openocd.board.cmake) diff --git a/boards/espressif/esp32c3_rust/board.yml b/boards/espressif/esp32c3_rust/board.yml new file mode 100644 index 0000000..b8beeef --- /dev/null +++ b/boards/espressif/esp32c3_rust/board.yml @@ -0,0 +1,9 @@ +# Copyright (c) 2024 Espressif Systems (Shanghai) Co., Ltd. +# SPDX-License-Identifier: Apache-2.0 + +board: + name: esp32c3_rust + full_name: ESP32-C3-DevKit-RUST + vendor: espressif + socs: + - name: esp32c3 diff --git a/boards/espressif/esp32c3_rust/doc/img/esp32c3_rust.webp b/boards/espressif/esp32c3_rust/doc/img/esp32c3_rust.webp new file mode 100644 index 0000000000000000000000000000000000000000..aba51b8fe69619455546a767f81ec878aca62a6c GIT binary patch literal 16424 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 J?_B@A{tNp%z+nIY literal 0 HcmV?d00001 diff --git a/boards/espressif/esp32c3_rust/doc/index.rst b/boards/espressif/esp32c3_rust/doc/index.rst new file mode 100644 index 0000000..144b694 --- /dev/null +++ b/boards/espressif/esp32c3_rust/doc/index.rst @@ -0,0 +1,264 @@ +.. zephyr:board:: esp32c3_rust + +Overview +******** + +ESP32-C3-DevKit-RUST is based on the ESP32-C3, a single-core Wi-Fi and Bluetooth 5 (LE) microcontroller SoC, +based on the open-source RISC-V architecture. This special board also includes the ESP32-C3-MINI-1 module, +a 6DoF IMU, a temperature and humidity sensor, a Li-Ion battery charger, and a Type-C USB. The board is designed +to be easily used in training sessions, demonstrating its capabilities with all the board peripherals. +For more information, check `ESP32-C3-DevKit-RUST`_. + +Hardware +******** + +SoC Features: + +- IEEE 802.11 b/g/n-compliant +- Bluetooth 5, Bluetooth mesh +- 32-bit RISC-V single-core processor, up to 160MHz +- 384 KB ROM +- 400 KB SRAM (16 KB for cache) +- 8 KB SRAM in RTC +- 22 x programmable GPIOs +- 3 x SPI +- 2 x UART +- 1 x I2C +- 1 x I2S +- 2 x 54-bit general-purpose timers +- 3 x watchdog timers +- 1 x 52-bit system timer +- Remote Control Peripheral (RMT) +- LED PWM controller (LEDC) +- Full-speed USB Serial/JTAG controller +- General DMA controller (GDMA) +- 1 x TWAI® +- 2 x 12-bit SAR ADCs, up to 6 channels +- 1 x temperature sensor + +For more information, check the datasheet at `ESP32-C3 Datasheet`_ or the technical reference +manual at `ESP32-C3 Technical Reference Manual`_. + +Supported Features +================== + +.. zephyr:board-supported-hw:: + +I2C Peripherals +=============== + +This board includes the following peripherals over the I2C bus: + ++---------------------------+--------------+---------+ +| Peripheral | Part number | Address | ++===========================+==============+=========+ +| IMU | ICM-42670-P | 0x68 | ++---------------------------+--------------+---------+ +| Temperature and Humidity | SHTC3 | 0x70 | ++---------------------------+--------------+---------+ + +I2C Bus Connection +================== + ++---------+--------+ +| Signal | GPIO | ++=========+========+ +| SDA | GPIO10 | ++---------+--------+ +| SCL | GPIO8 | ++---------+--------+ + +I/Os +==== + +The following devices are connected through GPIO: + ++--------------+--------+ +| I/O Devices | GPIO | ++==============+========+ +| WS2812 LED | GPIO2 | ++--------------+--------+ +| LED | GPIO7 | ++--------------+--------+ +| Button/Boot | GPIO9 | ++--------------+--------+ + +Power +===== + +* USB type-C (*no PD compatibility*). +* Li-Ion battery charger. + +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 +******************* + +.. zephyr:board-supported-runners:: + +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:: + :tool: west + :zephyr-app: samples/hello_world + :board: esp32c3_rust + :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 (see :ref:`build_an_application` and +:ref:`application_run` for more details). + +.. zephyr-app-commands:: + :zephyr-app: samples/hello_world + :board: esp32c3_rust + :goals: build + +The usual ``flash`` target will work with the ``esp32c3_rust`` board +configuration. Here is an example for the :zephyr:code-sample:`hello_world` +application. + +.. zephyr-app-commands:: + :zephyr-app: samples/hello_world + :board: esp32c3_rust + :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! esp32c3_rust + +Debugging +********* + +As with much custom hardware, the ESP32-C3 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= -DOPENOCD_DEFAULT_PATH=`` +parameter when building. + +Here is an example for building the :zephyr:code-sample:`hello_world` application. + +.. zephyr-app-commands:: + :zephyr-app: samples/hello_world + :board: esp32c3_rust + :goals: build flash + :gen-args: -DOPENOCD= -DOPENOCD_DEFAULT_PATH= + +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: esp32c3_rust + :goals: debug + +References +********** + +.. target-notes:: + +.. _`ESP32-C3-DevKit-RUST`: https://github.com/esp-rs/esp-rust-board/tree/v1.2 +.. _`ESP32-C3 Datasheet`: https://www.espressif.com/sites/default/files/documentation/esp32-c3_datasheet_en.pdf +.. _`ESP32-C3 Technical Reference Manual`: https://espressif.com/sites/default/files/documentation/esp32-c3_technical_reference_manual_en.pdf +.. _`OpenOCD ESP32`: https://github.com/espressif/openocd-esp32/releases diff --git a/boards/espressif/esp32c3_rust/esp32c3_rust-pinctrl.dtsi b/boards/espressif/esp32c3_rust/esp32c3_rust-pinctrl.dtsi new file mode 100644 index 0000000..b1e14c2 --- /dev/null +++ b/boards/espressif/esp32c3_rust/esp32c3_rust-pinctrl.dtsi @@ -0,0 +1,45 @@ +/* + * Copyright (c) 2024 Espressif Systems (Shanghai) Co., Ltd. + * + * SPDX-License-Identifier: Apache-2.0 + */ + +#include +#include +#include + +&pinctrl { + + uart0_default: uart0_default { + group1 { + pinmux = ; + output-high; + }; + group2 { + pinmux = ; + bias-pull-up; + }; + }; + + spim2_default: spim2_default { + group1 { + pinmux = , + , + ; + }; + group2 { + pinmux = ; + output-low; + }; + }; + + i2c0_default: i2c0_default { + group1 { + pinmux = , + ; + bias-pull-up; + drive-open-drain; + output-high; + }; + }; +}; diff --git a/boards/espressif/esp32c3_rust/esp32c3_rust.dts b/boards/espressif/esp32c3_rust/esp32c3_rust.dts new file mode 100644 index 0000000..9c931e9 --- /dev/null +++ b/boards/espressif/esp32c3_rust/esp32c3_rust.dts @@ -0,0 +1,134 @@ +/* + * Copyright (c) 2024 Espressif Systems (Shanghai) Co., Ltd. + * + * SPDX-License-Identifier: Apache-2.0 + */ + +/dts-v1/; + +#include +#include "esp32c3_rust-pinctrl.dtsi" +#include +#include +#include + +/ { + model = "Espressif ESP32C3-RUST"; + compatible = "espressif,esp32c3_rust"; + + chosen { + zephyr,sram = &sram1; + zephyr,console = &usb_serial; + zephyr,shell-uart = &usb_serial; + zephyr,flash = &flash0; + zephyr,code-partition = &slot0_partition; + }; + + aliases { + led0 = &red_led_0; + sw0 = &user_button1; + i2c-0 = &i2c0; + watchdog0 = &wdt0; + led-strip = &led_strip; + }; + + gpio_keys { + compatible = "gpio-keys"; + user_button1: button_1 { + label = "User SW1"; + gpios = <&gpio0 9 (GPIO_PULL_UP | GPIO_ACTIVE_LOW)>; + zephyr,code = ; + }; + }; + + leds { + compatible = "gpio-leds"; + red_led_0: led_0 { + gpios = <&gpio0 7 GPIO_ACTIVE_HIGH>; + label = "User LD0"; + }; + }; + +}; + +&spi2 { + #address-cells = <1>; + #size-cells = <0>; + status = "okay"; + pinctrl-0 = <&spim2_default>; + pinctrl-names = "default"; + + /* Workaround to support WS2812 driver */ + line-idle-low; + status = "okay"; + + led_strip: ws2812@0 { + compatible = "worldsemi,ws2812-spi"; + + /* SPI */ + reg = <0>; /* ignored, but necessary for SPI bindings */ + spi-max-frequency = <6400000>; + + /* WS2812 */ + chain-length = <1>; /* arbitrary; change at will */ + spi-cpha; + spi-one-frame = <0xf0>; /* 11110000: 625 ns high and 625 ns low */ + spi-zero-frame = <0xc0>; /* 11000000: 312.5 ns high and 937.5 ns low */ + color-mapping = ; + }; +}; + +&usb_serial { + status = "okay"; +}; + + +&i2c0 { + status = "okay"; + clock-frequency = ; + pinctrl-0 = <&i2c0_default>; + pinctrl-names = "default"; + + icm42670@68 { + compatible = "invensense,icm42670"; + reg = <0x68>; + status = "okay"; + accel-hz = <800>; + accel-fs = <16>; + gyro-hz = <800>; + gyro-fs = <2000>; + }; + + shtc3@70 { + compatible = "sensirion,shtc3", "sensirion,shtcx"; + reg = <0x70>; + measure-mode = "normal"; + clock-stretching; + }; +}; + +&trng0 { + status = "okay"; +}; + +&gpio0 { + status = "okay"; +}; + +&wdt0 { + status = "okay"; +}; + +&uart0 { + status = "disabled"; +}; + +&esp32_bt_hci { + status = "okay"; +}; + +&wifi { + status = "okay"; +}; diff --git a/boards/espressif/esp32c3_rust/esp32c3_rust.yaml b/boards/espressif/esp32c3_rust/esp32c3_rust.yaml new file mode 100644 index 0000000..a825523 --- /dev/null +++ b/boards/espressif/esp32c3_rust/esp32c3_rust.yaml @@ -0,0 +1,21 @@ +# Copyright (c) 2024 Espressif Systems (Shanghai) Co., Ltd. +# SPDX-License-Identifier: Apache-2.0 + +identifier: esp32c3_rust +name: ESP32-C3-DevKit-RUST-1 +type: mcu +arch: riscv +toolchain: + - zephyr +supported: + - adc + - gpio + - i2c + - watchdog + - uart + - dma + - pwm + - spi + - counter + - entropy +vendor: espressif diff --git a/boards/espressif/esp32c3_rust/esp32c3_rust_defconfig b/boards/espressif/esp32c3_rust/esp32c3_rust_defconfig new file mode 100644 index 0000000..147089f --- /dev/null +++ b/boards/espressif/esp32c3_rust/esp32c3_rust_defconfig @@ -0,0 +1,10 @@ +# Copyright (c) 2024 Espressif Systems (Shanghai) Co., Ltd. +# SPDX-License-Identifier: Apache-2.0 + +CONFIG_CONSOLE=y +CONFIG_SERIAL=y +CONFIG_UART_CONSOLE=y +CONFIG_GPIO=y +CONFIG_I2C=y +CONFIG_LED_STRIP=y +CONFIG_SENSOR=y diff --git a/boards/espressif/esp32c3_rust/support/openocd.cfg b/boards/espressif/esp32c3_rust/support/openocd.cfg new file mode 100644 index 0000000..e846c96 --- /dev/null +++ b/boards/espressif/esp32c3_rust/support/openocd.cfg @@ -0,0 +1,11 @@ +set ESP_RTOS none + +# ESP32C3 has built-in JTAG interface over USB port in pins GPIO18/GPIO19 (D-/D+). +# Uncomment the line below to enable USB debugging. +source [find interface/esp_usb_jtag.cfg] + +# Otherwise, use external JTAG programmer as ESP-Prog +source [find interface/ftdi/esp32_devkitj_v1.cfg] + +source [find target/esp32c3.cfg] +adapter speed 5000 diff --git a/boards/espressif/esp32c6_devkitc/Kconfig b/boards/espressif/esp32c6_devkitc/Kconfig new file mode 100644 index 0000000..e24ba97 --- /dev/null +++ b/boards/espressif/esp32c6_devkitc/Kconfig @@ -0,0 +1,7 @@ +# Copyright (c) 2024 Espressif Systems (Shanghai) Co., Ltd. +# SPDX-License-Identifier: Apache-2.0 + +config HEAP_MEM_POOL_ADD_SIZE_BOARD + int + default 4096 if BOARD_ESP32C6_DEVKITC_ESP32C6_HPCORE + default 256 if BOARD_ESP32C6_DEVKITC_ESP32C6_LPCORE diff --git a/boards/espressif/esp32c6_devkitc/Kconfig.esp32c6_devkitc b/boards/espressif/esp32c6_devkitc/Kconfig.esp32c6_devkitc new file mode 100644 index 0000000..9b30251 --- /dev/null +++ b/boards/espressif/esp32c6_devkitc/Kconfig.esp32c6_devkitc @@ -0,0 +1,9 @@ +# ESP32C6 devkitc board configuration + +# Copyright (c) 2024 Espressif Systems (Shanghai) Co., Ltd. +# SPDX-License-Identifier: Apache-2.0 + +config BOARD_ESP32C6_DEVKITC + select SOC_ESP32_C6_WROOM_1U_N8 + select SOC_ESP32C6_HPCORE if BOARD_ESP32C6_DEVKITC_ESP32C6_HPCORE + select SOC_ESP32C6_LPCORE if BOARD_ESP32C6_DEVKITC_ESP32C6_LPCORE diff --git a/boards/espressif/esp32c6_devkitc/Kconfig.sysbuild b/boards/espressif/esp32c6_devkitc/Kconfig.sysbuild new file mode 100644 index 0000000..3a2d17a --- /dev/null +++ b/boards/espressif/esp32c6_devkitc/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/espressif/esp32c6_devkitc/board.cmake b/boards/espressif/esp32c6_devkitc/board.cmake new file mode 100644 index 0000000..2f04d1f --- /dev/null +++ b/boards/espressif/esp32c6_devkitc/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/espressif/esp32c6_devkitc/board.yml b/boards/espressif/esp32c6_devkitc/board.yml new file mode 100644 index 0000000..485d35b --- /dev/null +++ b/boards/espressif/esp32c6_devkitc/board.yml @@ -0,0 +1,6 @@ +board: + name: esp32c6_devkitc + full_name: ESP32-C6-DevKitC + vendor: espressif + socs: + - name: esp32c6 diff --git a/boards/espressif/esp32c6_devkitc/doc/img/esp32c6_devkitc.webp b/boards/espressif/esp32c6_devkitc/doc/img/esp32c6_devkitc.webp new file mode 100644 index 0000000000000000000000000000000000000000..3b16025a0a87e256e4642573a6fb3af2a0633348 GIT binary patch literal 22016 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 I000000HU0VegFUf literal 0 HcmV?d00001 diff --git a/boards/espressif/esp32c6_devkitc/doc/index.rst b/boards/espressif/esp32c6_devkitc/doc/index.rst new file mode 100644 index 0000000..ee0f04a --- /dev/null +++ b/boards/espressif/esp32c6_devkitc/doc/index.rst @@ -0,0 +1,285 @@ +.. zephyr:board:: esp32c6_devkitc + +Overview +******** + +ESP32-C6-DevKitC is an entry-level development board based on ESP32-C6-WROOM-1(U), +a general-purpose module with a 8 MB SPI flash. This board integrates complete Wi-Fi, +Bluetooth LE, Zigbee, and Thread functions. For more information, check `ESP32-C6-DevKitC`_. + +Hardware +******** + +ESP32-C6 is Espressif's first Wi-Fi 6 SoC integrating 2.4 GHz Wi-Fi 6, Bluetooth 5.3 (LE) and the +802.15.4 protocol. ESP32-C6 achieves an industry-leading RF performance, with reliable security +features and multiple memory resources for IoT products. +It consists of a high-performance (HP) 32-bit RISC-V processor, which can be clocked up to 160 MHz, +and a low-power (LP) 32-bit RISC-V processor, which can be clocked up to 20 MHz. +It has a 320KB ROM, a 512KB SRAM, and works with external flash. + +ESP32-C6-DevKitC is an entry-level development board based on ESP32-C6-WROOM-1(U), +a general-purpose module with a 8 MB SPI flash. + +Most of the I/O pins are broken out to the pin headers on both sides for easy interfacing. +Developers can either connect peripherals with jumper wires or mount ESP32-C6-DevKitC on +a breadboard. + +ESP32-C6 includes the following features: + +- 32-bit core RISC-V microcontroller with a clock speed of up to 160 MHz +- 400 KB of internal RAM +- WiFi 802.11 ax 2.4GHz +- Fully compatible with IEEE 802.11b/g/n protocol +- Bluetooth LE: Bluetooth 5.3 certified +- Internal co-existence mechanism between Wi-Fi and Bluetooth to share the same antenna +- IEEE 802.15.4 (Zigbee and Thread) + +Digital interfaces: + +- 30x GPIOs (QFN40), or 22x GPIOs (QFN32) +- 2x UART +- 1x Low-power (LP) UART +- 1x General purpose SPI +- 1x I2C +- 1x Low-power (LP) I2C +- 1x I2S +- 1x Pulse counter +- 1x USB Serial/JTAG controller +- 1x TWAI® controller, compatible with ISO 11898-1 (CAN Specification 2.0) +- 1x SDIO 2.0 slave controller +- LED PWM controller, up to 6 channels +- 1x Motor control PWM (MCPWM) +- 1x Remote control peripehral +- 1x Parallel IO interface (PARLIO) +- General DMA controller (GDMA), with 3 transmit channels and 3 receive channels +- Event task matrix (ETM) + +Analog interfaces: + +- 1x 12-bit SAR ADCs, up to 7 channels +- 1x temperature sensor + +Timers: + +- 1x 52-bit system timer +- 1x 54-bit general-purpose timers +- 3x Watchdog timers +- 1x Analog watchdog timer + +Low Power: + +- Four power modes designed for typical scenarios: Active, Modem-sleep, Light-sleep, Deep-sleep + +Security: + +- Secure boot +- Flash encryption +- 4-Kbit OTP, up to 1792 bits for users +- Cryptographic hardware acceleration: (AES-128/256, ECC, HMAC, RSA, SHA, Digital signature, Hash) +- Random number generator (RNG) + +For more information, check the datasheet at `ESP32-C6 Datasheet`_ or the technical reference +manual at `ESP32-C6 Technical Reference Manual`_. + +Supported Features +================== + +.. zephyr:board-supported-hw:: + +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 +******************* + +.. zephyr:board-supported-runners:: + +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 EPS32 SoC. + +To build the sample application using sysbuild use the command: + +.. zephyr-app-commands:: + :tool: west + :zephyr-app: samples/hello_world + :board: esp32c6_devkitc/esp32c6/hpcore + :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 (see :ref:`build_an_application` and +:ref:`application_run` for more details). + +.. zephyr-app-commands:: + :zephyr-app: samples/hello_world + :board: esp32c6_devkitc/esp32c6/hpcore + :goals: build + +The usual ``flash`` target will work with the ``esp32c6_devkitc`` board +configuration. Here is an example for the :zephyr:code-sample:`hello_world` +application. + +.. zephyr-app-commands:: + :zephyr-app: samples/hello_world + :board: esp32c6_devkitc/esp32c6/hpcore + :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! esp32c6_devkitc/esp32c6/hpcore + +Debugging +********* + +As with much custom hardware, the ESP32-C6 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= -DOPENOCD_DEFAULT_PATH=`` +parameter when building. + +Here is an example for building the :zephyr:code-sample:`hello_world` application. + +.. zephyr-app-commands:: + :zephyr-app: samples/hello_world + :board: esp32c6_devkitc/esp32c6/hpcore + :goals: build flash + :gen-args: -DOPENOCD= -DOPENOCD_DEFAULT_PATH= + +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: esp32c6_devkitc/esp32c6/hpcore + :goals: debug + +Low-Power CPU (LP CORE) +*********************** + +The ESP32-C6 SoC has two RISC-V cores: the High-Performance Core (HP CORE) and the Low-Power Core (LP CORE). +The LP Core features ultra low power consumption, an interrupt controller, a debug module and a system bus +interface for memory and peripheral access. + +The LP Core is in sleep mode by default. It has two application scenarios: + +- Power insensitive scenario: When the High-Performance CPU (HP Core) is active, the LP Core can assist the HP CPU with some speed and efficiency-insensitive controls and computations. +- Power sensitive scenario: When the HP CPU is in the power-down state to save power, the LP Core can be woken up to handle some external wake-up events. + +For more information, check the datasheet at `ESP32-C6 Datasheet`_ or the technical reference +manual at `ESP32-C6 Technical Reference Manual`_. + +The LP Core support is fully integrated with :ref:`sysbuild`. The user can enable the LP Core by adding +the following configuration to the project: + +.. code:: cfg + + CONFIG_ULP_COPROC_ENABLED=y + +See :zephyr:code-sample-category:`lp-core` folder as code reference. + +References +********** + +.. target-notes:: + +.. _`ESP32-C6-DevKitC`: https://docs.espressif.com/projects/esp-dev-kits/en/latest/esp32c6/esp32-c6-devkitc-1/user_guide.html +.. _`ESP32-C6 Datasheet`: https://www.espressif.com/sites/default/files/documentation/esp32-c6_datasheet_en.pdf +.. _`ESP32-C6 Technical Reference Manual`: https://espressif.com/sites/default/files/documentation/esp32-c6_technical_reference_manual_en.pdf +.. _`OpenOCD ESP32`: https://github.com/espressif/openocd-esp32/releases diff --git a/boards/espressif/esp32c6_devkitc/esp32c6_devkitc_hpcore-pinctrl.dtsi b/boards/espressif/esp32c6_devkitc/esp32c6_devkitc_hpcore-pinctrl.dtsi new file mode 100644 index 0000000..5265d5e --- /dev/null +++ b/boards/espressif/esp32c6_devkitc/esp32c6_devkitc_hpcore-pinctrl.dtsi @@ -0,0 +1,45 @@ +/* + * Copyright (c) 2023 Espressif Systems (Shanghai) Co., Ltd. + * + * SPDX-License-Identifier: Apache-2.0 + */ + +#include +#include +#include + +&pinctrl { + + uart0_default: uart0_default { + group1 { + pinmux = ; + output-high; + }; + group2 { + pinmux = ; + bias-pull-up; + }; + }; + + spim2_default: spim2_default { + group1 { + pinmux = , + , + ; + }; + group2 { + pinmux = ; + output-low; + }; + }; + + i2c0_default: i2c0_default { + group1 { + pinmux = , + ; + bias-pull-up; + drive-open-drain; + output-high; + }; + }; +}; diff --git a/boards/espressif/esp32c6_devkitc/esp32c6_devkitc_hpcore.dts b/boards/espressif/esp32c6_devkitc/esp32c6_devkitc_hpcore.dts new file mode 100644 index 0000000..ef8dbea --- /dev/null +++ b/boards/espressif/esp32c6_devkitc/esp32c6_devkitc_hpcore.dts @@ -0,0 +1,77 @@ +/* + * Copyright (c) 2023 Espressif Systems (Shanghai) Co., Ltd. + * + * SPDX-License-Identifier: Apache-2.0 + */ + +/dts-v1/; + +#include +#include "esp32c6_devkitc_hpcore-pinctrl.dtsi" +#include +#include + +/ { + model = "esp32c6_devkitc HP Core"; + compatible = "espressif,esp32c6"; + + chosen { + zephyr,sram = &sramhp; + 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 = ; + }; + }; +}; + +&uart0 { + status = "okay"; + current-speed = <115200>; + pinctrl-0 = <&uart0_default>; + pinctrl-names = "default"; +}; + +&trng0 { + status = "okay"; +}; + +&i2c0 { + status = "okay"; + clock-frequency = ; + pinctrl-0 = <&i2c0_default>; + pinctrl-names = "default"; +}; + +&spi2 { + #address-cells = <1>; + #size-cells = <0>; + status = "okay"; + pinctrl-0 = <&spim2_default>; + pinctrl-names = "default"; +}; + +&gpio0 { + status = "okay"; +}; + +&wdt0 { + status = "okay"; +}; + +&wifi { + status = "okay"; +}; diff --git a/boards/espressif/esp32c6_devkitc/esp32c6_devkitc_hpcore.yaml b/boards/espressif/esp32c6_devkitc/esp32c6_devkitc_hpcore.yaml new file mode 100644 index 0000000..4bc3c0c --- /dev/null +++ b/boards/espressif/esp32c6_devkitc/esp32c6_devkitc_hpcore.yaml @@ -0,0 +1,22 @@ +identifier: esp32c6_devkitc/esp32c6/hpcore +name: ESP32-C6-DevKitC HP Core +vendor: espressif +type: mcu +arch: riscv +toolchain: + - zephyr +supported: + - adc + - gpio + - watchdog + - uart + - dma + - pwm + - spi + - counter + - entropy + - i2c + - i2s +testing: + ignore_tags: + - bluetooth diff --git a/boards/espressif/esp32c6_devkitc/esp32c6_devkitc_hpcore_defconfig b/boards/espressif/esp32c6_devkitc/esp32c6_devkitc_hpcore_defconfig new file mode 100644 index 0000000..187793c --- /dev/null +++ b/boards/espressif/esp32c6_devkitc/esp32c6_devkitc_hpcore_defconfig @@ -0,0 +1,6 @@ +# SPDX-License-Identifier: Apache-2.0 + +CONFIG_CONSOLE=y +CONFIG_SERIAL=y +CONFIG_UART_CONSOLE=y +CONFIG_GPIO=y diff --git a/boards/espressif/esp32c6_devkitc/esp32c6_devkitc_lpcore.dts b/boards/espressif/esp32c6_devkitc/esp32c6_devkitc_lpcore.dts new file mode 100644 index 0000000..739781e --- /dev/null +++ b/boards/espressif/esp32c6_devkitc/esp32c6_devkitc_lpcore.dts @@ -0,0 +1,26 @@ +/* + * Copyright (c) 2025 Espressif Systems (Shanghai) Co., Ltd. + * + * SPDX-License-Identifier: Apache-2.0 + */ +/dts-v1/; + +#include +#include + +/ { + model = "Espressif ESP32C6-DevkitC LPCORE"; + compatible = "espressif,esp32c6"; + + chosen { + zephyr,sram = &sramlp; + zephyr,code-partition = &slot0_lpcore_partition; + zephyr,console = &lp_uart; + zephyr,shell-uart = &lp_uart; + }; +}; + +&lp_uart { + status = "okay"; + current-speed = <115200>; +}; diff --git a/boards/espressif/esp32c6_devkitc/esp32c6_devkitc_lpcore.yaml b/boards/espressif/esp32c6_devkitc/esp32c6_devkitc_lpcore.yaml new file mode 100644 index 0000000..49e25bc --- /dev/null +++ b/boards/espressif/esp32c6_devkitc/esp32c6_devkitc_lpcore.yaml @@ -0,0 +1,19 @@ +identifier: esp32c6_devkitc/esp32c6/lpcore +name: ESP32-C6-DevKitC LP Core +type: mcu +arch: riscv +toolchain: + - zephyr +supported: + - cpu + - uart + - serial +testing: + only_tags: + - introduction + ignore_tags: + - kernel + - posix + - chre + - cpp +vendor: espressif diff --git a/boards/espressif/esp32c6_devkitc/esp32c6_devkitc_lpcore_defconfig b/boards/espressif/esp32c6_devkitc/esp32c6_devkitc_lpcore_defconfig new file mode 100644 index 0000000..0497409 --- /dev/null +++ b/boards/espressif/esp32c6_devkitc/esp32c6_devkitc_lpcore_defconfig @@ -0,0 +1,20 @@ +# Copyright (c) 2025 Espressif Systems (Shanghai) Co., Ltd. +# SPDX-License-Identifier: Apache-2.0 + +# Memory protection +CONFIG_THREAD_STACK_INFO=n +CONFIG_THREAD_CUSTOM_DATA=n + +# Boot +CONFIG_BOOT_BANNER=n + +# Console +CONFIG_SERIAL=y +CONFIG_CONSOLE=y +CONFIG_UART_CONSOLE=y +CONFIG_PRINTK=n +CONFIG_CBPRINTF_NANO=y + +# Build +CONFIG_SIZE_OPTIMIZATIONS=y +CONFIG_BUSYWAIT_CPU_LOOPS_PER_USEC=4 diff --git a/boards/espressif/esp32c6_devkitc/support/openocd.cfg b/boards/espressif/esp32c6_devkitc/support/openocd.cfg new file mode 100644 index 0000000..d86a551 --- /dev/null +++ b/boards/espressif/esp32c6_devkitc/support/openocd.cfg @@ -0,0 +1,4 @@ +# ESP32C6 has built-in JTAG interface over USB port in pins GPIO13/GPIO12 (D-/D+). +set ESP_RTOS none + +source [find board/esp32c6-builtin.cfg] diff --git a/boards/espressif/esp32s2_devkitc/Kconfig b/boards/espressif/esp32s2_devkitc/Kconfig new file mode 100644 index 0000000..c6a99b1 --- /dev/null +++ b/boards/espressif/esp32s2_devkitc/Kconfig @@ -0,0 +1,6 @@ +# Copyright (c) 2024 Espressif Systems (Shanghai) Co., Ltd. +# SPDX-License-Identifier: Apache-2.0 + +config HEAP_MEM_POOL_ADD_SIZE_BOARD + int + default 4096 diff --git a/boards/espressif/esp32s2_devkitc/Kconfig.esp32s2_devkitc b/boards/espressif/esp32s2_devkitc/Kconfig.esp32s2_devkitc new file mode 100644 index 0000000..97dca60 --- /dev/null +++ b/boards/espressif/esp32s2_devkitc/Kconfig.esp32s2_devkitc @@ -0,0 +1,5 @@ +# Copyright (c) 2024 Espressif Systems (Shanghai) Co., Ltd. +# SPDX-License-Identifier: Apache-2.0 + +config BOARD_ESP32S2_DEVKITC + select SOC_ESP32S2_SOLO_N4R2 diff --git a/boards/espressif/esp32s2_devkitc/Kconfig.sysbuild b/boards/espressif/esp32s2_devkitc/Kconfig.sysbuild new file mode 100644 index 0000000..8d3acb9 --- /dev/null +++ b/boards/espressif/esp32s2_devkitc/Kconfig.sysbuild @@ -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 diff --git a/boards/espressif/esp32s2_devkitc/board.cmake b/boards/espressif/esp32s2_devkitc/board.cmake new file mode 100644 index 0000000..2f04d1f --- /dev/null +++ b/boards/espressif/esp32s2_devkitc/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/espressif/esp32s2_devkitc/board.yml b/boards/espressif/esp32s2_devkitc/board.yml new file mode 100644 index 0000000..8ec0a49 --- /dev/null +++ b/boards/espressif/esp32s2_devkitc/board.yml @@ -0,0 +1,6 @@ +board: + name: esp32s2_devkitc + full_name: ESP32-S2-DevKitC + vendor: espressif + socs: + - name: esp32s2 diff --git a/boards/espressif/esp32s2_devkitc/doc/img/esp32s2_devkitc.webp b/boards/espressif/esp32s2_devkitc/doc/img/esp32s2_devkitc.webp new file mode 100644 index 0000000000000000000000000000000000000000..07f8b7ee41e197a7cb8646dc0ecfe150042353ac GIT binary patch literal 19062 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 literal 0 HcmV?d00001 diff --git a/boards/espressif/esp32s2_devkitc/doc/index.rst b/boards/espressif/esp32s2_devkitc/doc/index.rst new file mode 100644 index 0000000..63bf3ec --- /dev/null +++ b/boards/espressif/esp32s2_devkitc/doc/index.rst @@ -0,0 +1,228 @@ +.. zephyr:board:: esp32s2_devkitc + +Overview +******** + +ESP32-S2-DevKitC is an entry-level development board. This board integrates complete Wi-Fi functions. +Most of the I/O pins are broken out to the pin headers on both sides for easy interfacing. +Developers can either connect peripherals with jumper wires or mount ESP32-S2-DevKitC on a breadboard. +For more information, check `ESP32-S2-DevKitC`_. + +Hardware +******** + +ESP32-S2 is a highly integrated, low-power, single-core Wi-Fi Microcontroller SoC, designed to be secure and +cost-effective, with a high performance and a rich set of IO capabilities. + +The features include the following: + +- RSA-3072-based secure boot +- AES-XTS-256-based flash encryption +- Protected private key and device secrets from software access +- Cryptographic accelerators for enhanced performance +- Protection against physical fault injection attacks +- Various peripherals: + + - 43x programmable GPIOs + - 14x configurable capacitive touch GPIOs + - USB OTG + - LCD interface + - camera interface + - SPI + - I2S + - UART + - ADC + - DAC + - LED PWM with up to 8 channels + +For more information, check the datasheet at `ESP32-S2 Datasheet`_ or the technical reference +manual at `ESP32-S2 Technical Reference Manual`_. + +Supported Features +================== + +.. zephyr:board-supported-hw:: + +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 +******************* + +.. zephyr:board-supported-runners:: + +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:: + :tool: west + :zephyr-app: samples/hello_world + :board: esp32s2_devkitc + :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 (see :ref:`build_an_application` and +:ref:`application_run` for more details). + +.. zephyr-app-commands:: + :zephyr-app: samples/hello_world + :board: esp32s2_devkitc + :goals: build + +The usual ``flash`` target will work with the ``esp32s2_devkitc`` board +configuration. Here is an example for the :zephyr:code-sample:`hello_world` +application. + +.. zephyr-app-commands:: + :zephyr-app: samples/hello_world + :board: esp32s2_devkitc + :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! esp32s2_devkitc + +Debugging +********* + +ESP32-S2 support on OpenOCD is available at `OpenOCD ESP32`_. + +The following table shows the pin mapping between ESP32-S2 board and JTAG interface. + ++---------------+-----------+ +| ESP32 pin | JTAG pin | ++===============+===========+ +| MTDO / GPIO40 | TDO | ++---------------+-----------+ +| MTDI / GPIO41 | TDI | ++---------------+-----------+ +| MTCK / GPIO39 | TCK | ++---------------+-----------+ +| MTMS / GPIO42 | TMS | ++---------------+-----------+ + +Further documentation can be obtained from the SoC vendor in `JTAG debugging for ESP32-S2`_. + +Here is an example for building the :zephyr:code-sample:`hello_world` application. + +.. zephyr-app-commands:: + :zephyr-app: samples/hello_world + :board: esp32s2_devkitc + :goals: build flash + +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: esp32s2_devkitc + :goals: debug + +References +********** + +.. target-notes:: + +.. _`ESP32-S2-DevKitC`: https://docs.espressif.com/projects/esp-idf/en/latest/esp32s2/hw-reference/esp32s2/user-guide-saola-1-v1.2.html +.. _`ESP32-S2 Datasheet`: https://www.espressif.com/sites/default/files/documentation/esp32-s2_datasheet_en.pdf +.. _`ESP32-S2 Technical Reference Manual`: https://espressif.com/sites/default/files/documentation/esp32-s2_technical_reference_manual_en.pdf +.. _`JTAG debugging for ESP32-S2`: https://docs.espressif.com/projects/esp-idf/en/latest/esp32s2/api-guides/jtag-debugging/index.html +.. _`OpenOCD ESP32`: https://github.com/espressif/openocd-esp32/releases diff --git a/boards/espressif/esp32s2_devkitc/esp32s2_devkitc-pinctrl.dtsi b/boards/espressif/esp32s2_devkitc/esp32s2_devkitc-pinctrl.dtsi new file mode 100644 index 0000000..434260d --- /dev/null +++ b/boards/espressif/esp32s2_devkitc/esp32s2_devkitc-pinctrl.dtsi @@ -0,0 +1,83 @@ +/* + * Copyright (c) 2024-2025 Espressif Systems (Shanghai) Co., Ltd. + * + * SPDX-License-Identifier: Apache-2.0 + */ + +#include +#include +#include + +&pinctrl { + + uart0_default: uart0_default { + group1 { + pinmux = ; + output-high; + }; + group2 { + pinmux = ; + bias-pull-up; + }; + }; + + spim2_default: spim2_default { + group1 { + pinmux = , + , + ; + }; + group2 { + pinmux = ; + output-low; + }; + }; + + spim3_default: spim3_default { + group1 { + pinmux = , + , + ; + }; + group2 { + pinmux = ; + output-low; + }; + }; + + i2c0_default: i2c0_default { + group1 { + pinmux = , + ; + bias-pull-up; + drive-open-drain; + output-high; + }; + }; + + i2c1_default: i2c1_default { + group1 { + pinmux = , + ; + bias-pull-up; + drive-open-drain; + output-high; + }; + }; + + i2s0_default: i2s0_default { + group1 { + pinmux = , + , + , + , + , + ; + output-enable; + }; + group2 { + pinmux = ; + input-enable; + }; + }; +}; diff --git a/boards/espressif/esp32s2_devkitc/esp32s2_devkitc.dts b/boards/espressif/esp32s2_devkitc/esp32s2_devkitc.dts new file mode 100644 index 0000000..337a63b --- /dev/null +++ b/boards/espressif/esp32s2_devkitc/esp32s2_devkitc.dts @@ -0,0 +1,135 @@ +/* + * Copyright (c) 2024-2025 Espressif Systems (Shanghai) Co., Ltd. + * + * SPDX-License-Identifier: Apache-2.0 + */ + +/dts-v1/; + +#include +#include "esp32s2_devkitc-pinctrl.dtsi" +#include +#include +#include + +/ { + model = "Espressif ESP32S2_DevKitC"; + compatible = "espressif,esp32s2"; + + aliases { + sw0 = &user_button; + i2c-0 = &i2c0; + watchdog0 = &wdt0; + }; + + chosen { + zephyr,sram = &sram1; + zephyr,console = &uart0; + zephyr,shell-uart = &uart0; + zephyr,flash = &flash0; + zephyr,code-partition = &slot0_partition; + }; + + gpio_keys { + compatible = "gpio-keys"; + user_button: user_button { + label = "BOOT"; + gpios = <&gpio0 0 (GPIO_PULL_UP | GPIO_ACTIVE_LOW)>; + zephyr,code = ; + }; + }; +}; + +&uart0 { + status = "okay"; + current-speed = <115200>; + pinctrl-0 = <&uart0_default>; + pinctrl-names = "default"; +}; + +&gpio0 { + status = "okay"; +}; + +&gpio1 { + status = "okay"; +}; + +&touch { + debounce-interval-ms = <30>; + href-microvolt = <2700000>; + lref-microvolt = <500000>; + href-atten-microvolt = <1000000>; + filter-mode = ; + filter-debounce-cnt = <1>; + filter-noise-thr = ; + filter-jitter-step = <4>; + filter-smooth-level = ; +}; + +&timer0 { + status = "disabled"; +}; + +&timer1 { + status = "disabled"; +}; + +&timer2 { + status = "disabled"; +}; + +&timer3 { + status = "disabled"; +}; + +&i2c0 { + status = "okay"; + clock-frequency = ; + pinctrl-0 = <&i2c0_default>; + pinctrl-names = "default"; +}; + +&i2c1 { + clock-frequency = ; + pinctrl-0 = <&i2c1_default>; + pinctrl-names = "default"; +}; + +&i2s0 { + pinctrl-0 = <&i2s0_default>; + pinctrl-names = "default"; + status = "disabled"; +}; + +&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_default>; + pinctrl-names = "default"; +}; + +&wdt0 { + status = "okay"; +}; + +&dac { + status = "okay"; +}; + +&wifi { + status = "okay"; +}; diff --git a/boards/espressif/esp32s2_devkitc/esp32s2_devkitc.yaml b/boards/espressif/esp32s2_devkitc/esp32s2_devkitc.yaml new file mode 100644 index 0000000..b3598a2 --- /dev/null +++ b/boards/espressif/esp32s2_devkitc/esp32s2_devkitc.yaml @@ -0,0 +1,26 @@ +identifier: esp32s2_devkitc +name: ESP32-S2 DevKitC +type: mcu +arch: xtensa +toolchain: + - zephyr +supported: + - adc + - dac + - gpio + - i2c + - i2s + - watchdog + - uart + - nvs + - pwm + - spi + - counter + - entropy + - input + - can + - dma +testing: + ignore_tags: + - bluetooth +vendor: espressif diff --git a/boards/espressif/esp32s2_devkitc/esp32s2_devkitc_defconfig b/boards/espressif/esp32s2_devkitc/esp32s2_devkitc_defconfig new file mode 100644 index 0000000..e192c24 --- /dev/null +++ b/boards/espressif/esp32s2_devkitc/esp32s2_devkitc_defconfig @@ -0,0 +1,7 @@ +# SPDX-License-Identifier: Apache-2.0 + +CONFIG_CONSOLE=y +CONFIG_SERIAL=y +CONFIG_UART_CONSOLE=y + +CONFIG_GPIO=y diff --git a/boards/espressif/esp32s2_devkitc/support/openocd.cfg b/boards/espressif/esp32s2_devkitc/support/openocd.cfg new file mode 100644 index 0000000..f75d53b --- /dev/null +++ b/boards/espressif/esp32s2_devkitc/support/openocd.cfg @@ -0,0 +1,4 @@ +set ESP_RTOS none + +source [find interface/ftdi/esp32s2_kaluga_v1.cfg] +source [find target/esp32s2.cfg] diff --git a/boards/espressif/esp32s2_saola/Kconfig b/boards/espressif/esp32s2_saola/Kconfig new file mode 100644 index 0000000..c6a99b1 --- /dev/null +++ b/boards/espressif/esp32s2_saola/Kconfig @@ -0,0 +1,6 @@ +# Copyright (c) 2024 Espressif Systems (Shanghai) Co., Ltd. +# SPDX-License-Identifier: Apache-2.0 + +config HEAP_MEM_POOL_ADD_SIZE_BOARD + int + default 4096 diff --git a/boards/espressif/esp32s2_saola/Kconfig.esp32s2_saola b/boards/espressif/esp32s2_saola/Kconfig.esp32s2_saola new file mode 100644 index 0000000..f02ec0a --- /dev/null +++ b/boards/espressif/esp32s2_saola/Kconfig.esp32s2_saola @@ -0,0 +1,5 @@ +# Copyright (c) 2023 Espressif Systems (Shanghai) Co., Ltd. +# SPDX-License-Identifier: Apache-2.0 + +config BOARD_ESP32S2_SAOLA + select SOC_ESP32S2_WROVER_N4R2 diff --git a/boards/espressif/esp32s2_saola/Kconfig.sysbuild b/boards/espressif/esp32s2_saola/Kconfig.sysbuild new file mode 100644 index 0000000..3a2d17a --- /dev/null +++ b/boards/espressif/esp32s2_saola/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/espressif/esp32s2_saola/board.cmake b/boards/espressif/esp32s2_saola/board.cmake new file mode 100644 index 0000000..2f04d1f --- /dev/null +++ b/boards/espressif/esp32s2_saola/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/espressif/esp32s2_saola/board.yml b/boards/espressif/esp32s2_saola/board.yml new file mode 100644 index 0000000..69eacbf --- /dev/null +++ b/boards/espressif/esp32s2_saola/board.yml @@ -0,0 +1,6 @@ +board: + name: esp32s2_saola + full_name: ESP32-S2-Saola + vendor: espressif + socs: + - name: esp32s2 diff --git a/boards/espressif/esp32s2_saola/doc/img/esp32s2_saola.webp b/boards/espressif/esp32s2_saola/doc/img/esp32s2_saola.webp new file mode 100644 index 0000000000000000000000000000000000000000..833147b884c077ca6f3c6a256550d9090b3f61e1 GIT binary patch literal 20460 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 +#include +#include + +&pinctrl { + + uart0_default: uart0_default { + group1 { + pinmux = ; + output-high; + }; + group2 { + pinmux = ; + bias-pull-up; + }; + }; + + spim2_default: spim2_default { + group1 { + pinmux = , + , + ; + }; + group2 { + pinmux = ; + output-low; + }; + }; + + spim3_default: spim3_default { + group1 { + pinmux = , + , + ; + }; + group2 { + pinmux = ; + output-low; + }; + }; + + i2c0_default: i2c0_default { + group1 { + pinmux = , + ; + bias-pull-up; + drive-open-drain; + output-high; + }; + }; + + i2c1_default: i2c1_default { + group1 { + pinmux = , + ; + bias-pull-up; + drive-open-drain; + output-high; + }; + }; + + i2s0_default: i2s0_default { + group1 { + pinmux = , + , + , + , + , + ; + output-enable; + }; + group2 { + pinmux = ; + input-enable; + }; + }; +}; diff --git a/boards/espressif/esp32s2_saola/esp32s2_saola.dts b/boards/espressif/esp32s2_saola/esp32s2_saola.dts new file mode 100644 index 0000000..23249ce --- /dev/null +++ b/boards/espressif/esp32s2_saola/esp32s2_saola.dts @@ -0,0 +1,131 @@ +/* + * Copyright (c) 2021-2025 Espressif Systems (Shanghai) Co., Ltd. + * + * SPDX-License-Identifier: Apache-2.0 + */ + +/dts-v1/; + +#include +#include "esp32s2_saola-pinctrl.dtsi" +#include +#include +#include + +/ { + model = "Espressif ESP32S2-Saola"; + compatible = "espressif,esp32s2"; + + aliases { + sw0 = &user_button; + i2c-0 = &i2c0; + watchdog0 = &wdt0; + }; + + chosen { + zephyr,sram = &sram1; + zephyr,console = &uart0; + zephyr,shell-uart = &uart0; + zephyr,flash = &flash0; + zephyr,code-partition = &slot0_partition; + }; + + gpio_keys { + compatible = "gpio-keys"; + user_button: user_button { + label = "BOOT"; + gpios = <&gpio0 0 (GPIO_PULL_UP | GPIO_ACTIVE_LOW)>; + zephyr,code = ; + }; + }; +}; + +&uart0 { + status = "okay"; + current-speed = <115200>; + pinctrl-0 = <&uart0_default>; + pinctrl-names = "default"; +}; + +&gpio0 { + status = "okay"; +}; + +&gpio1 { + status = "okay"; +}; + +&touch { + debounce-interval-ms = <30>; + href-microvolt = <2700000>; + lref-microvolt = <500000>; + href-atten-microvolt = <1000000>; + filter-mode = ; + filter-debounce-cnt = <1>; + filter-noise-thr = ; + filter-jitter-step = <4>; + filter-smooth-level = ; +}; + +&timer0 { + status = "disabled"; +}; + +&timer1 { + status = "disabled"; +}; + +&timer2 { + status = "disabled"; +}; + +&timer3 { + status = "disabled"; +}; + +&i2c0 { + status = "okay"; + clock-frequency = ; + pinctrl-0 = <&i2c0_default>; + pinctrl-names = "default"; +}; + +&i2c1 { + clock-frequency = ; + pinctrl-0 = <&i2c1_default>; + pinctrl-names = "default"; +}; + +&i2s0 { + pinctrl-0 = <&i2s0_default>; + pinctrl-names = "default"; + status = "disabled"; +}; + +&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_default>; + pinctrl-names = "default"; +}; + +&wdt0 { + status = "okay"; +}; + +&wifi { + status = "okay"; +}; diff --git a/boards/espressif/esp32s2_saola/esp32s2_saola.yaml b/boards/espressif/esp32s2_saola/esp32s2_saola.yaml new file mode 100644 index 0000000..e8a37ff --- /dev/null +++ b/boards/espressif/esp32s2_saola/esp32s2_saola.yaml @@ -0,0 +1,24 @@ +identifier: esp32s2_saola +name: ESP32-S2 Saola +type: mcu +arch: xtensa +toolchain: + - zephyr +supported: + - adc + - dac + - gpio + - i2c + - i2s + - watchdog + - uart + - nvs + - pwm + - spi + - counter + - entropy + - input +testing: + ignore_tags: + - bluetooth +vendor: espressif diff --git a/boards/espressif/esp32s2_saola/esp32s2_saola_defconfig b/boards/espressif/esp32s2_saola/esp32s2_saola_defconfig new file mode 100644 index 0000000..e192c24 --- /dev/null +++ b/boards/espressif/esp32s2_saola/esp32s2_saola_defconfig @@ -0,0 +1,7 @@ +# SPDX-License-Identifier: Apache-2.0 + +CONFIG_CONSOLE=y +CONFIG_SERIAL=y +CONFIG_UART_CONSOLE=y + +CONFIG_GPIO=y diff --git a/boards/espressif/esp32s2_saola/support/openocd.cfg b/boards/espressif/esp32s2_saola/support/openocd.cfg new file mode 100644 index 0000000..f75d53b --- /dev/null +++ b/boards/espressif/esp32s2_saola/support/openocd.cfg @@ -0,0 +1,4 @@ +set ESP_RTOS none + +source [find interface/ftdi/esp32s2_kaluga_v1.cfg] +source [find target/esp32s2.cfg] diff --git a/boards/espressif/esp32s3_devkitc/Kconfig b/boards/espressif/esp32s3_devkitc/Kconfig new file mode 100644 index 0000000..308628a --- /dev/null +++ b/boards/espressif/esp32s3_devkitc/Kconfig @@ -0,0 +1,7 @@ +# Copyright (c) 2024 Espressif Systems (Shanghai) Co., Ltd. +# SPDX-License-Identifier: Apache-2.0 + +config HEAP_MEM_POOL_ADD_SIZE_BOARD + int + default 4096 if BOARD_ESP32S3_DEVKITC_ESP32S3_PROCPU + default 256 if BOARD_ESP32S3_DEVKITC_ESP32S3_APPCPU diff --git a/boards/espressif/esp32s3_devkitc/Kconfig.esp32s3_devkitc b/boards/espressif/esp32s3_devkitc/Kconfig.esp32s3_devkitc new file mode 100644 index 0000000..fc15b1c --- /dev/null +++ b/boards/espressif/esp32s3_devkitc/Kconfig.esp32s3_devkitc @@ -0,0 +1,7 @@ +# Copyright (c) 2024 Espressif Systems (Shanghai) Co., Ltd. +# SPDX-License-Identifier: Apache-2.0 + +config BOARD_ESP32S3_DEVKITC + select SOC_ESP32S3_WROOM_N8 + select SOC_ESP32S3_PROCPU if BOARD_ESP32S3_DEVKITC_ESP32S3_PROCPU + select SOC_ESP32S3_APPCPU if BOARD_ESP32S3_DEVKITC_ESP32S3_APPCPU diff --git a/boards/espressif/esp32s3_devkitc/Kconfig.sysbuild b/boards/espressif/esp32s3_devkitc/Kconfig.sysbuild new file mode 100644 index 0000000..8d3acb9 --- /dev/null +++ b/boards/espressif/esp32s3_devkitc/Kconfig.sysbuild @@ -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 diff --git a/boards/espressif/esp32s3_devkitc/board.cmake b/boards/espressif/esp32s3_devkitc/board.cmake new file mode 100644 index 0000000..2f04d1f --- /dev/null +++ b/boards/espressif/esp32s3_devkitc/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/espressif/esp32s3_devkitc/board.yml b/boards/espressif/esp32s3_devkitc/board.yml new file mode 100644 index 0000000..9d2eb95 --- /dev/null +++ b/boards/espressif/esp32s3_devkitc/board.yml @@ -0,0 +1,6 @@ +board: + name: esp32s3_devkitc + full_name: ESP32-S3-DevKitC + vendor: espressif + socs: + - name: esp32s3 diff --git a/boards/espressif/esp32s3_devkitc/doc/img/esp32s3_devkitc.webp b/boards/espressif/esp32s3_devkitc/doc/img/esp32s3_devkitc.webp new file mode 100644 index 0000000000000000000000000000000000000000..f838c1b77c89283eed0da092bc85eaf2b3eef49a GIT binary patch literal 17434 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 +#include +#include + +&pinctrl { + uart0_default: uart0_default { + group1 { + pinmux = ; + output-high; + }; + group2 { + pinmux = ; + bias-pull-up; + }; + }; + + uart1_default: uart1_default { + group1 { + pinmux = ; + output-high; + }; + group2 { + pinmux = ; + bias-pull-up; + }; + }; + + i2c0_default: i2c0_default { + group1 { + pinmux = , + ; + bias-pull-up; + drive-open-drain; + output-high; + }; + }; + + i2c1_default: i2c1_default { + group1 { + pinmux = , + ; + bias-pull-up; + drive-open-drain; + output-high; + }; + }; + + i2s0_default: i2s0_default { + group1 { + pinmux = , + , + , + , + , + ; + output-enable; + }; + group2 { + pinmux = ; + input-enable; + }; + }; + + i2s1_default: i2s1_default { + group1 { + pinmux = , + , + , + , + , + ; + output-enable; + }; + group2 { + pinmux = ; + input-enable; + }; + }; + + spim2_default: spim2_default { + group1 { + pinmux = , + , + ; + }; + group2 { + pinmux = ; + output-low; + }; + }; + + spim3_default: spim3_default { + group1 { + pinmux = , + , + ; + }; + group2 { + pinmux = ; + output-low; + }; + }; + + twai_default: twai_default { + group1 { + pinmux = , + ; + }; + }; +}; diff --git a/boards/espressif/esp32s3_devkitc/esp32s3_devkitc_appcpu.dts b/boards/espressif/esp32s3_devkitc/esp32s3_devkitc_appcpu.dts new file mode 100644 index 0000000..bac7de2 --- /dev/null +++ b/boards/espressif/esp32s3_devkitc/esp32s3_devkitc_appcpu.dts @@ -0,0 +1,31 @@ +/* + * Copyright (c) 2024 Espressif Systems (Shanghai) Co., Ltd. + * + * SPDX-License-Identifier: Apache-2.0 + */ +/dts-v1/; + +#include +#include +#include "esp32s3_devkitc-pinctrl.dtsi" + +/ { + model = "Espressif ESP32S3-DevkitC APPCPU"; + compatible = "espressif,esp32s3"; + + chosen { + zephyr,sram = &sram1; + zephyr,ipc_shm = &shm0; + zephyr,ipc = &ipm0; + zephyr,flash = &flash0; + zephyr,code-partition = &slot0_appcpu_partition; + }; +}; + +&trng0 { + status = "okay"; +}; + +&ipm0 { + status = "okay"; +}; diff --git a/boards/espressif/esp32s3_devkitc/esp32s3_devkitc_appcpu.yaml b/boards/espressif/esp32s3_devkitc/esp32s3_devkitc_appcpu.yaml new file mode 100644 index 0000000..d62dc5f --- /dev/null +++ b/boards/espressif/esp32s3_devkitc/esp32s3_devkitc_appcpu.yaml @@ -0,0 +1,27 @@ +identifier: esp32s3_devkitc/esp32s3/appcpu +name: ESP32-S3 DevKitC APPCPU +type: mcu +arch: xtensa +toolchain: + - zephyr +supported: + - uart +testing: + ignore_tags: + - net + - bluetooth + - flash + - cpp + - posix + - watchdog + - logging + - kernel + - pm + - gpio + - crypto + - eeprom + - heap + - cmsis_rtos + - jwt + - zdsp +vendor: espressif diff --git a/boards/espressif/esp32s3_devkitc/esp32s3_devkitc_appcpu_defconfig b/boards/espressif/esp32s3_devkitc/esp32s3_devkitc_appcpu_defconfig new file mode 100644 index 0000000..4854664 --- /dev/null +++ b/boards/espressif/esp32s3_devkitc/esp32s3_devkitc_appcpu_defconfig @@ -0,0 +1,3 @@ +# SPDX-License-Identifier: Apache-2.0 + +CONFIG_CLOCK_CONTROL=y diff --git a/boards/espressif/esp32s3_devkitc/esp32s3_devkitc_procpu.dts b/boards/espressif/esp32s3_devkitc/esp32s3_devkitc_procpu.dts new file mode 100644 index 0000000..a7dec60 --- /dev/null +++ b/boards/espressif/esp32s3_devkitc/esp32s3_devkitc_procpu.dts @@ -0,0 +1,153 @@ +/* + * Copyright (c) 2024 Espressif Systems (Shanghai) Co., Ltd. + * + * SPDX-License-Identifier: Apache-2.0 + */ +/dts-v1/; + +#include +#include +#include +#include +#include "esp32s3_devkitc-pinctrl.dtsi" + +/ { + model = "Espressif ESP32S3-DevkitC PROCPU"; + compatible = "espressif,esp32s3"; + + aliases { + i2c-0 = &i2c0; + watchdog0 = &wdt0; + }; + + chosen { + zephyr,sram = &sram1; + zephyr,console = &uart0; + zephyr,shell-uart = &uart0; + zephyr,flash = &flash0; + zephyr,code-partition = &slot0_partition; + zephyr,bt-hci = &esp32_bt_hci; + }; + + aliases { + uart-0 = &uart0; + sw0 = &button0; + }; + + buttons { + compatible = "gpio-keys"; + button0: button_0 { + gpios = <&gpio0 0 (GPIO_PULL_UP | GPIO_ACTIVE_LOW)>; + label = "BOOT Button"; + zephyr,code = ; + }; + }; +}; + +&usb_serial { + status = "disabled"; +}; + +&uart0 { + status = "okay"; + current-speed = <115200>; + pinctrl-0 = <&uart0_default>; + pinctrl-names = "default"; +}; + +&gpio0 { + status = "okay"; +}; + +&gpio1 { + status = "okay"; +}; + +&touch { + debounce-interval-ms = <30>; + href-microvolt = <2700000>; + lref-microvolt = <500000>; + href-atten-microvolt = <1000000>; + filter-mode = ; + filter-debounce-cnt = <1>; + filter-noise-thr = ; + filter-jitter-step = <4>; + filter-smooth-level = ; +}; + +&i2c0 { + clock-frequency = ; + pinctrl-0 = <&i2c0_default>; + pinctrl-names = "default"; +}; + +&i2c1 { + clock-frequency = ; + pinctrl-0 = <&i2c1_default>; + pinctrl-names = "default"; +}; + +&i2s0 { + pinctrl-0 = <&i2s0_default>; + pinctrl-names = "default"; + status = "disabled"; +}; + +&i2s1 { + pinctrl-0 = <&i2s1_default>; + pinctrl-names = "default"; + status = "disabled"; +}; + +&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_default>; + pinctrl-names = "default"; +}; + +&twai { + pinctrl-0 = <&twai_default>; + pinctrl-names = "default"; +}; + +&timer0 { + status = "disabled"; +}; + +&timer1 { + status = "disabled"; +}; + +&timer2 { + status = "disabled"; +}; + +&timer3 { + status = "disabled"; +}; + +&wdt0 { + status = "okay"; +}; + +&trng0 { + status = "okay"; +}; + +&esp32_bt_hci { + status = "okay"; +}; + +&wifi { + status = "okay"; +}; diff --git a/boards/espressif/esp32s3_devkitc/esp32s3_devkitc_procpu.yaml b/boards/espressif/esp32s3_devkitc/esp32s3_devkitc_procpu.yaml new file mode 100644 index 0000000..ae1de50 --- /dev/null +++ b/boards/espressif/esp32s3_devkitc/esp32s3_devkitc_procpu.yaml @@ -0,0 +1,20 @@ +identifier: esp32s3_devkitc/esp32s3/procpu +name: ESP32-S3 DevKitC PROCPU +type: mcu +arch: xtensa +toolchain: + - zephyr +supported: + - gpio + - uart + - i2c + - i2s + - spi + - can + - counter + - watchdog + - entropy + - pwm + - dma + - input +vendor: espressif diff --git a/boards/espressif/esp32s3_devkitc/esp32s3_devkitc_procpu_defconfig b/boards/espressif/esp32s3_devkitc/esp32s3_devkitc_procpu_defconfig new file mode 100644 index 0000000..d8fbaa8 --- /dev/null +++ b/boards/espressif/esp32s3_devkitc/esp32s3_devkitc_procpu_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/espressif/esp32s3_devkitc/support/openocd.cfg b/boards/espressif/esp32s3_devkitc/support/openocd.cfg new file mode 100644 index 0000000..2f740b4 --- /dev/null +++ b/boards/espressif/esp32s3_devkitc/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/boards/espressif/esp32s3_devkitm/Kconfig b/boards/espressif/esp32s3_devkitm/Kconfig new file mode 100644 index 0000000..84e633e --- /dev/null +++ b/boards/espressif/esp32s3_devkitm/Kconfig @@ -0,0 +1,7 @@ +# Copyright (c) 2024 Espressif Systems (Shanghai) Co., Ltd. +# SPDX-License-Identifier: Apache-2.0 + +config HEAP_MEM_POOL_ADD_SIZE_BOARD + int + default 4096 if BOARD_ESP32S3_DEVKITM_ESP32S3_PROCPU + default 256 if BOARD_ESP32S3_DEVKITM_ESP32S3_APPCPU diff --git a/boards/espressif/esp32s3_devkitm/Kconfig.esp32s3_devkitm b/boards/espressif/esp32s3_devkitm/Kconfig.esp32s3_devkitm new file mode 100644 index 0000000..b574cf3 --- /dev/null +++ b/boards/espressif/esp32s3_devkitm/Kconfig.esp32s3_devkitm @@ -0,0 +1,7 @@ +# Copyright (c) 2022 Espressif Systems (Shanghai) Co., Ltd. +# SPDX-License-Identifier: Apache-2.0 + +config BOARD_ESP32S3_DEVKITM + select SOC_ESP32S3_MINI_N8 + select SOC_ESP32S3_PROCPU if BOARD_ESP32S3_DEVKITM_ESP32S3_PROCPU + select SOC_ESP32S3_APPCPU if BOARD_ESP32S3_DEVKITM_ESP32S3_APPCPU diff --git a/boards/espressif/esp32s3_devkitm/Kconfig.sysbuild b/boards/espressif/esp32s3_devkitm/Kconfig.sysbuild new file mode 100644 index 0000000..3a2d17a --- /dev/null +++ b/boards/espressif/esp32s3_devkitm/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/espressif/esp32s3_devkitm/board.cmake b/boards/espressif/esp32s3_devkitm/board.cmake new file mode 100644 index 0000000..2f04d1f --- /dev/null +++ b/boards/espressif/esp32s3_devkitm/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/espressif/esp32s3_devkitm/board.yml b/boards/espressif/esp32s3_devkitm/board.yml new file mode 100644 index 0000000..0e4abba --- /dev/null +++ b/boards/espressif/esp32s3_devkitm/board.yml @@ -0,0 +1,6 @@ +board: + name: esp32s3_devkitm + full_name: ESP32-S3-DevKitM + vendor: espressif + socs: + - name: esp32s3 diff --git a/boards/espressif/esp32s3_devkitm/doc/img/esp32s3_devkitm.webp b/boards/espressif/esp32s3_devkitm/doc/img/esp32s3_devkitm.webp new file mode 100644 index 0000000000000000000000000000000000000000..9a2c127a4fae22700fd37417bc62120c6fae239b GIT binary patch literal 18464 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 +#include +#include + +&pinctrl { + uart0_default: uart0_default { + group1 { + pinmux = ; + output-high; + }; + group2 { + pinmux = ; + bias-pull-up; + }; + }; + + uart1_default: uart1_default { + group1 { + pinmux = ; + output-high; + }; + group2 { + pinmux = ; + bias-pull-up; + }; + }; + + i2c0_default: i2c0_default { + group1 { + pinmux = , + ; + bias-pull-up; + drive-open-drain; + output-high; + }; + }; + + i2c1_default: i2c1_default { + group1 { + pinmux = , + ; + bias-pull-up; + drive-open-drain; + output-high; + }; + }; + + i2s0_default: i2s0_default { + group1 { + pinmux = , + , + , + , + , + ; + output-enable; + }; + group2 { + pinmux = ; + input-enable; + }; + }; + + i2s1_default: i2s1_default { + group1 { + pinmux = , + , + , + , + , + ; + output-enable; + }; + group2 { + pinmux = ; + input-enable; + }; + }; + + spim2_default: spim2_default { + group1 { + pinmux = , + , + ; + }; + group2 { + pinmux = ; + output-low; + }; + }; + + spim3_default: spim3_default { + group1 { + pinmux = , + , + ; + }; + group2 { + pinmux = ; + output-low; + }; + }; + + twai_default: twai_default { + group1 { + pinmux = , + ; + }; + }; +}; diff --git a/boards/espressif/esp32s3_devkitm/esp32s3_devkitm_appcpu.dts b/boards/espressif/esp32s3_devkitm/esp32s3_devkitm_appcpu.dts new file mode 100644 index 0000000..08a9e00 --- /dev/null +++ b/boards/espressif/esp32s3_devkitm/esp32s3_devkitm_appcpu.dts @@ -0,0 +1,31 @@ +/* + * Copyright (c) 2023 Espressif Systems (Shanghai) Co., Ltd. + * + * SPDX-License-Identifier: Apache-2.0 + */ +/dts-v1/; + +#include +#include +#include "esp32s3_devkitm-pinctrl.dtsi" + +/ { + model = "Espressif ESP32S3-DevkitM APPCPU"; + compatible = "espressif,esp32s3"; + + chosen { + zephyr,sram = &sram1; + zephyr,ipc_shm = &shm0; + zephyr,ipc = &ipm0; + zephyr,flash = &flash0; + zephyr,code-partition = &slot0_appcpu_partition; + }; +}; + +&trng0 { + status = "okay"; +}; + +&ipm0 { + status = "okay"; +}; diff --git a/boards/espressif/esp32s3_devkitm/esp32s3_devkitm_appcpu.yaml b/boards/espressif/esp32s3_devkitm/esp32s3_devkitm_appcpu.yaml new file mode 100644 index 0000000..7af6071 --- /dev/null +++ b/boards/espressif/esp32s3_devkitm/esp32s3_devkitm_appcpu.yaml @@ -0,0 +1,27 @@ +identifier: esp32s3_devkitm/esp32s3/appcpu +name: ESP32-S3 DevKitM APPCPU +type: mcu +arch: xtensa +toolchain: + - zephyr +supported: + - uart +testing: + ignore_tags: + - net + - bluetooth + - flash + - cpp + - posix + - watchdog + - logging + - kernel + - pm + - gpio + - crypto + - eeprom + - heap + - cmsis_rtos + - jwt + - zdsp +vendor: espressif diff --git a/boards/espressif/esp32s3_devkitm/esp32s3_devkitm_procpu.dts b/boards/espressif/esp32s3_devkitm/esp32s3_devkitm_procpu.dts new file mode 100644 index 0000000..c468871 --- /dev/null +++ b/boards/espressif/esp32s3_devkitm/esp32s3_devkitm_procpu.dts @@ -0,0 +1,153 @@ +/* + * Copyright (c) 2022 Espressif Systems (Shanghai) Co., Ltd. + * + * SPDX-License-Identifier: Apache-2.0 + */ +/dts-v1/; + +#include +#include +#include +#include +#include "esp32s3_devkitm-pinctrl.dtsi" + +/ { + model = "Espressif ESP32S3-DevkitM PROCPU"; + compatible = "espressif,esp32s3"; + + aliases { + i2c-0 = &i2c0; + watchdog0 = &wdt0; + }; + + chosen { + zephyr,sram = &sram1; + zephyr,console = &uart0; + zephyr,shell-uart = &uart0; + zephyr,flash = &flash0; + zephyr,code-partition = &slot0_partition; + zephyr,bt-hci = &esp32_bt_hci; + }; + + aliases { + uart-0 = &uart0; + sw0 = &button0; + }; + + buttons { + compatible = "gpio-keys"; + button0: button_0 { + gpios = <&gpio0 0 (GPIO_PULL_UP | GPIO_ACTIVE_LOW)>; + label = "BOOT Button"; + zephyr,code = ; + }; + }; +}; + +&uart0 { + status = "okay"; + current-speed = <115200>; + pinctrl-0 = <&uart0_default>; + pinctrl-names = "default"; +}; + +&gpio0 { + status = "okay"; +}; + +&gpio1 { + status = "okay"; +}; + +&touch { + debounce-interval-ms = <30>; + href-microvolt = <2700000>; + lref-microvolt = <500000>; + href-atten-microvolt = <1000000>; + filter-mode = ; + filter-debounce-cnt = <1>; + filter-noise-thr = ; + filter-jitter-step = <4>; + filter-smooth-level = ; +}; + +&i2c0 { + clock-frequency = ; + pinctrl-0 = <&i2c0_default>; + pinctrl-names = "default"; +}; + +&i2c1 { + clock-frequency = ; + pinctrl-0 = <&i2c1_default>; + pinctrl-names = "default"; +}; + +&i2s0 { + pinctrl-0 = <&i2s0_default>; + pinctrl-names = "default"; + status = "disabled"; +}; + +&i2s1 { + pinctrl-0 = <&i2s1_default>; + pinctrl-names = "default"; + status = "disabled"; +}; + +&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_default>; + pinctrl-names = "default"; +}; + +&twai { + pinctrl-0 = <&twai_default>; + pinctrl-names = "default"; +}; + +&timer0 { + status = "disabled"; +}; + +&timer1 { + status = "disabled"; +}; + +&timer2 { + status = "disabled"; +}; + +&timer3 { + status = "disabled"; +}; + +&wdt0 { + status = "okay"; +}; + +&trng0 { + status = "okay"; +}; + +&usb_serial { + status = "disabled"; +}; + +&esp32_bt_hci { + status = "okay"; +}; + +&wifi { + status = "okay"; +}; diff --git a/boards/espressif/esp32s3_devkitm/esp32s3_devkitm_procpu.yaml b/boards/espressif/esp32s3_devkitm/esp32s3_devkitm_procpu.yaml new file mode 100644 index 0000000..e153c2e --- /dev/null +++ b/boards/espressif/esp32s3_devkitm/esp32s3_devkitm_procpu.yaml @@ -0,0 +1,21 @@ +identifier: esp32s3_devkitm/esp32s3/procpu +name: ESP32-S3 DevKitM PROCPU +type: mcu +arch: xtensa +toolchain: + - zephyr +supported: + - gpio + - uart + - i2c + - i2s + - spi + - can + - counter + - watchdog + - entropy + - pwm + - dma + - input + - video +vendor: espressif diff --git a/boards/espressif/esp32s3_devkitm/esp32s3_devkitm_procpu_defconfig b/boards/espressif/esp32s3_devkitm/esp32s3_devkitm_procpu_defconfig new file mode 100644 index 0000000..d8fbaa8 --- /dev/null +++ b/boards/espressif/esp32s3_devkitm/esp32s3_devkitm_procpu_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/espressif/esp32s3_devkitm/support/openocd.cfg b/boards/espressif/esp32s3_devkitm/support/openocd.cfg new file mode 100644 index 0000000..2f740b4 --- /dev/null +++ b/boards/espressif/esp32s3_devkitm/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/boards/espressif/esp32s3_eye/Kconfig b/boards/espressif/esp32s3_eye/Kconfig new file mode 100644 index 0000000..25042fa --- /dev/null +++ b/boards/espressif/esp32s3_eye/Kconfig @@ -0,0 +1,7 @@ +# Copyright (c) 2024 Espressif Systems (Shanghai) Co., Ltd. +# SPDX-License-Identifier: Apache-2.0 + +config HEAP_MEM_POOL_ADD_SIZE_BOARD + int + default 4096 if BOARD_ESP32S3_EYE_ESP32S3_PROCPU + default 256 if BOARD_ESP32S3_EYE_ESP32S3_APPCPU diff --git a/boards/espressif/esp32s3_eye/Kconfig.defconfig b/boards/espressif/esp32s3_eye/Kconfig.defconfig new file mode 100644 index 0000000..66745cf --- /dev/null +++ b/boards/espressif/esp32s3_eye/Kconfig.defconfig @@ -0,0 +1,11 @@ +# ESP32S3 EYE board configuration + +# Copyright (c) 2024 Espressif Systems (Shanghai) Co., Ltd. +# SPDX-License-Identifier: Apache-2.0 + +if BOARD_ESP32S3_EYE_ESP32S3_PROCPU + +configdefault LV_COLOR_16_SWAP + default y + +endif # BOARD_ESP32S3_EYE_ESP32S3_PROCPU diff --git a/boards/espressif/esp32s3_eye/Kconfig.esp32s3_eye b/boards/espressif/esp32s3_eye/Kconfig.esp32s3_eye new file mode 100644 index 0000000..6aa4ac4 --- /dev/null +++ b/boards/espressif/esp32s3_eye/Kconfig.esp32s3_eye @@ -0,0 +1,7 @@ +# Copyright (c) 2024 Espressif Systems (Shanghai) Co., Ltd. +# SPDX-License-Identifier: Apache-2.0 + +config BOARD_ESP32S3_EYE + select SOC_ESP32S3_WROOM_N8R8 + select SOC_ESP32S3_PROCPU if BOARD_ESP32S3_EYE_ESP32S3_PROCPU + select SOC_ESP32S3_APPCPU if BOARD_ESP32S3_EYE_ESP32S3_APPCPU diff --git a/boards/espressif/esp32s3_eye/Kconfig.sysbuild b/boards/espressif/esp32s3_eye/Kconfig.sysbuild new file mode 100644 index 0000000..8d3acb9 --- /dev/null +++ b/boards/espressif/esp32s3_eye/Kconfig.sysbuild @@ -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 diff --git a/boards/espressif/esp32s3_eye/board.cmake b/boards/espressif/esp32s3_eye/board.cmake new file mode 100644 index 0000000..2f04d1f --- /dev/null +++ b/boards/espressif/esp32s3_eye/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/espressif/esp32s3_eye/board.yml b/boards/espressif/esp32s3_eye/board.yml new file mode 100644 index 0000000..9396b3c --- /dev/null +++ b/boards/espressif/esp32s3_eye/board.yml @@ -0,0 +1,6 @@ +board: + name: esp32s3_eye + full_name: ESP32-S3-EYE + vendor: espressif + socs: + - name: esp32s3 diff --git a/boards/espressif/esp32s3_eye/doc/img/ESP32-S3-EYE_20210913_V03_SystemBlock.webp b/boards/espressif/esp32s3_eye/doc/img/ESP32-S3-EYE_20210913_V03_SystemBlock.webp new file mode 100644 index 0000000000000000000000000000000000000000..7c6ee9464020f474c18e7b3e25e983c9a536c670 GIT binary patch literal 12058 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 E0Og!#M*si- literal 0 HcmV?d00001 diff --git a/boards/espressif/esp32s3_eye/doc/img/ESP32-S3-EYE_MB-annotated-photo.webp b/boards/espressif/esp32s3_eye/doc/img/ESP32-S3-EYE_MB-annotated-photo.webp new file mode 100644 index 0000000000000000000000000000000000000000..59b10f184368366edef9d489fa99f9914f5532c7 GIT binary patch literal 5094 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 I000000E&#qHUIzs literal 0 HcmV?d00001 diff --git a/boards/espressif/esp32s3_eye/doc/img/ESP32-S3-EYE_SUB-annotated-photo.webp b/boards/espressif/esp32s3_eye/doc/img/ESP32-S3-EYE_SUB-annotated-photo.webp new file mode 100644 index 0000000000000000000000000000000000000000..192244fb687a377d4dbe0f1bcf4c7a6bdf04fea8 GIT binary patch literal 4604 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 literal 0 HcmV?d00001 diff --git a/boards/espressif/esp32s3_eye/doc/img/esp32s3_eye.webp b/boards/espressif/esp32s3_eye/doc/img/esp32s3_eye.webp new file mode 100644 index 0000000000000000000000000000000000000000..3fd678c270b221bedfc1d29cedce7fa451aa56a3 GIT binary patch literal 8068 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

    dJ%;pu&^{EdV+F%KNfqT zA(L9%w^Y7Ixqv%`!S7%mY)`kBAnl2EZT!e3MTiCqKlo!s?}(8I#mNr+znbXN8&cru zHee%aMv%8Bha?PB8fb=dU*^E0(<=fXdZjgQf5!SurMVn{-MApta7Pt3+?gH~69&h% zejHC#m=W3l28rSlyt`_MqdyHl*|x>LILun!Dlj*V?q=(qerR|XQdvR(8H>$A%DJFW z)PA&Kd)WB@*)Z|7888^@IIA9fH<2%hYHnZTQ5~VH$55|i$d|W zn-X6!0S#`-vm|E&HB-Uu3C!DE6x=hVZ`%i6K1cq?y|i}JGV7&xgS>T2%9g~$R9A+U zx~u*@by=RS%u2dF!}#SQ)cQsTlZgr*6XD*^T{@T)5>ry0S+qW|^^K zzS6f}mOk$K@eIZ$Q1x}i`ASKrhRW{1ng3QAzx|Y6kJy~~3FGk>*vega?tCSmLzD%&z*S6F=kcB(vrA_So`}Dw*pU?|0%k=%-fBA7V3#2`W6kB&tCRrJA5yb4e9dAL*3uW%0`hk4{)m*cv zbwFN{Y^2TfD$+)>Q(Br%+Gq29U=5o?-9(?fJ!0j9Iz$8;hX7k8eIdtx2KML3x`*{T zGVqklfw~b&bz`p9L8nd8xLrOQkq$sk<*yT(#0RLnNGkur$qTK`FW5K?8o z0PDlCZ(#7-ABC9*LjJ6Re_@naWIw%aA!eV$3~f?6VQ~$0P)w{iXyyk>#{auSWO*F- zE1cG#u9eOia%xiLQ>%U+^h8jLRcujt5`*((eRP2=yuBc(`fiOYe<77TvvGntn9PT|YEz zvrleU*?%`b7+tD8+o$-mocX_Z7rSws25uvEdQmR>;ps2yrXK^YLSm(Owxrf)pA7B* z;qz30WSQL(nec7NvTT_| zAo>n@GeN-ck^#X|Z}vK?qQBMPRtsGcFVDg zS@K_EOp}I^`VSaXqg$GhejjPi#|k5+zKBL%_%`;-D)gGza`XwFY^UB<$F~<=X>XiX S7mS!KKmY&$000000002#R;nxj literal 0 HcmV?d00001 diff --git a/boards/espressif/esp32s3_eye/doc/index.rst b/boards/espressif/esp32s3_eye/doc/index.rst new file mode 100644 index 0000000..0657fa2 --- /dev/null +++ b/boards/espressif/esp32s3_eye/doc/index.rst @@ -0,0 +1,288 @@ +.. zephyr:board:: esp32s3_eye + +Overview +******** + +The ESP32-S3-EYE is a small-sized AI development board produced by `Espressif`_. +It is based on the `ESP32-S3`_ SoC. +It features a 2-Megapixel camera, an LCD display, and a microphone, which are used for image +recognition and audio processing. ESP32-S3-EYE offers plenty of storage, with an 8 MB Octal PSRAM +and a 8 MB flash. + +Hardware +******** + +The ESP32-S3-EYE board consists of two parts: the main board (ESP32-S3-EYE-MB) that integrates the +ESP32-S3-WROOM-1 module, camera, SD card slot, digital microphone, USB port, and function buttons; +and the sub board (ESP32-S3-EYE-SUB) that contains an LCD display. +The main board and sub board are connected through pin headers. + +Supported Features +------------------ + +.. zephyr:board-supported-hw:: + +Block Diagram +------------- + +The block diagram below presents main components of the ESP32-S3-EYE-MB main board (on the left) +and the ESP32-S3-EYE-SUB sub board (on the right), as well as the interconnections between +components. + +.. figure:: img/ESP32-S3-EYE_20210913_V03_SystemBlock.webp + :align: center + :alt: ESP32-S3-EYE Block Diagram + +Components on the ESP32-S3-EYE-MB Main Board +-------------------------------------------- + +.. figure:: img/ESP32-S3-EYE_MB-annotated-photo.webp + :align: center + :alt: ESP32-S3-EYE_MB + +.. list-table:: Key Components MB + :header-rows: 1 + + * - No. + - Key Component + - Description + * - 1 + - Camera + - The camera OV2640 with 2 million pixels has a 66.5° field of view and a maximum resolution of 1600x1200. You can change the resolution when developing applications. + * - 2 + - Module Power LED + - The LED (green) turns on when USB power is connected to the board. If it is not turned on, it indicates either the USB power is not supplied, or the 5 V to 3.3 V LDO is broken. Software can configure GPIO3 to set different LED statuses (turned on/off, flashing) for different statuses of the board. Note that GPIO3 must be set up in open-drain mode. Pulling GPIO3 up may burn the LED. + * - 3 + - Pin Headers + - Connect the female headers on the sub board. + * - 4 + - 5 V to 3.3 V LDO + - Power regulator that converts a 5 V supply into a 3.3 V output for the module. + * - 5 + - Digital Microphone + - The digital I2S MEMS microphone features 61 dB SNR and –26 dBFS sensitivity, working at 3.3 V. + * - 6 + - FPC Connector + - Connects the main board and the sub board. + * - 7 + - Function Button + - There are six function buttons on the board. Users can configure any functions as needed except for the RST button. + * - 8 + - ESP32-S3-WROOM-1 + - The ESP32-S3-WROOM-1 module embeds the ESP32-S3R8 chip variant that provides Wi-Fi and Bluetooth 5 (LE) connectivity, as well as dedicated vector instructions for accelerating neural network computing and signal processing. On top of the integrated 8 MB Octal SPI PSRAM offered by the SoC, the module also comes with 8 MB flash, allowing for fast data access. ESP32-S3-WROOM-1U module is also supported. + * - 9 + - MicroSD Card Slot + - Used for inserting a MicroSD card to expand memory capacity. + * - 10 + - 3.3 V to 1.5 V LDO + - Power regulator that converts a 3.3 V supply into a 1.5 V output for the camera. + * - 11 + - 3.3 V to 2.8 V LDO + - Power regulator that converts a 3.3 V supply into a 2.8 V output for the camera. + * - 12 + - USB Port + - A Micro-USB port used for 5 V power supply to the board, as well as for communication with the chip via GPIO19 and GPIO20. + * - 13 + - Battery Soldering Points + - Used for soldering a battery socket to connect an external Li-ion battery that can serve as an alternative power supply to the board. If you use an external battery, make sure it has built-in protection circuit and fuse. The recommended specifications of the battery: capacity > 1000 mAh, output voltage 3.7 V, input voltage 4.2 V – 5 V. + * - 14 + - Battery Charger Chip + - 1 A linear Li-ion battery charger (ME4054BM5G-N) in ThinSOT package. The power source for charging is the **USB Port**. + * - 15 + - Battery Red LED + - When the USB power is connected to the board and a battery is not connected, the red LED blinks. If a battery is connected and being charged, the red LED turns on. When the battery is fully charged, it turns off. + * - 16 + - Accelerometer + - Three-axis accelerometer (QMA7981) for screen rotation, etc. + +Components on the ESP32-S3-EYE-SUB Sub Board +-------------------------------------------- + +.. figure:: img/ESP32-S3-EYE_SUB-annotated-photo.webp + :align: center + :alt: ESP32-S3-EYE_SUB + +.. list-table:: Key Components SUB + :header-rows: 1 + + * - Key Component + - Description + * - LCD Display + - 1.3” LCD display, connected to ESP32-S3 over the SPI bus. + * - Strapping Pins + - Four strapping pins led out from the main board. They can be used as testing points. + * - Female Headers + - Used for mounting onto the pin headers on the main board. + * - LCD FPC Connector + - Connects the sub board and the LCD display. + * - LCD_RST + - LCD_RST testing point. You can use it to reset the LCD display with control signals. + +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 +******************* + +.. zephyr:board-supported-runners:: + +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:: + :tool: west + :zephyr-app: samples/hello_world + :board: esp32s3_eye/esp32s3/procpu + :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 (see :ref:`build_an_application` and +:ref:`application_run` for more details). + +.. zephyr-app-commands:: + :zephyr-app: samples/hello_world + :board: esp32s3_eye/esp32s3/procpu + :goals: build + +The usual ``flash`` target will work with the ``esp32s3_eye/esp32s3/procpu`` board +configuration. Here is an example for the :zephyr:code-sample:`hello_world` +application. + +.. zephyr-app-commands:: + :zephyr-app: samples/hello_world + :board: esp32s3_eye/esp32s3/procpu + :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! esp32s3_eye/esp32s3/procpu + +Debugging +********* + +ESP32-S3 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= -DOPENOCD_DEFAULT_PATH=`` +parameter when building. + +Here is an example for building the :zephyr:code-sample:`hello_world` application. + +.. zephyr-app-commands:: + :zephyr-app: samples/hello_world + :board: esp32s3_eye/esp32s3/procpu + :goals: build flash + :gen-args: -DOPENOCD= -DOPENOCD_DEFAULT_PATH= + +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: esp32s3_eye/esp32s3/procpu + :goals: debug + +.. _`OpenOCD ESP32`: https://github.com/espressif/openocd-esp32/releases + +.. _`Espressif`: https://espressif.com + +.. _`ESP32-S3`: https://www.espressif.com/en/products/socs/esp32-s3 diff --git a/boards/espressif/esp32s3_eye/esp32s3_eye-pinctrl.dtsi b/boards/espressif/esp32s3_eye/esp32s3_eye-pinctrl.dtsi new file mode 100644 index 0000000..aba99bb --- /dev/null +++ b/boards/espressif/esp32s3_eye/esp32s3_eye-pinctrl.dtsi @@ -0,0 +1,55 @@ +/* + * Copyright (c) 2024 Espressif Systems (Shanghai) Co., Ltd. + * + * SPDX-License-Identifier: Apache-2.0 + */ + +#include +#include +#include + +&pinctrl { + i2c1_default: i2c1_default { + group1 { + pinmux = , + ; + bias-pull-up; + drive-open-drain; + output-high; + }; + }; + + spim3_default: spim3_default { + group1 { + pinmux = , + ; + }; + group2 { + pinmux = ; + output-low; + }; + }; + + lcd_cam_default: lcd_cam_default{ + group1 { + pinmux = ; + output-enable; + }; + group2 { + pinmux = , + , + , + , + , + , + , + , + , + , + ; + input-enable; + bias-disable; + }; + + }; +}; diff --git a/boards/espressif/esp32s3_eye/esp32s3_eye_appcpu.dts b/boards/espressif/esp32s3_eye/esp32s3_eye_appcpu.dts new file mode 100644 index 0000000..8e323c4 --- /dev/null +++ b/boards/espressif/esp32s3_eye/esp32s3_eye_appcpu.dts @@ -0,0 +1,34 @@ +/* + * Copyright (c) 2024 Espressif Systems (Shanghai) Co., Ltd. + * + * SPDX-License-Identifier: Apache-2.0 + */ +/dts-v1/; + +#include +#include + +/ { + model = "Espressif ESP32S3-EYE APPCPU"; + compatible = "espressif,esp32s3"; + + chosen { + zephyr,sram = &sram1; + zephyr,ipc_shm = &shm0; + zephyr,ipc = &ipm0; + zephyr,flash = &flash0; + zephyr,code-partition = &slot0_appcpu_partition; + }; +}; + +&flash0 { + reg = <0x0 DT_SIZE_M(4)>; +}; + +&trng0 { + status = "okay"; +}; + +&ipm0 { + status = "okay"; +}; diff --git a/boards/espressif/esp32s3_eye/esp32s3_eye_appcpu.yaml b/boards/espressif/esp32s3_eye/esp32s3_eye_appcpu.yaml new file mode 100644 index 0000000..787fcd4 --- /dev/null +++ b/boards/espressif/esp32s3_eye/esp32s3_eye_appcpu.yaml @@ -0,0 +1,27 @@ +identifier: esp32s3_eye/esp32s3/appcpu +name: ESP32-S3 EYE APPCPU +type: mcu +arch: xtensa +toolchain: + - zephyr +supported: + - uart +testing: + ignore_tags: + - net + - bluetooth + - flash + - cpp + - posix + - watchdog + - logging + - kernel + - pm + - gpio + - crypto + - eeprom + - heap + - cmsis_rtos + - jwt + - zdsp +vendor: espressif diff --git a/boards/espressif/esp32s3_eye/esp32s3_eye_appcpu_defconfig b/boards/espressif/esp32s3_eye/esp32s3_eye_appcpu_defconfig new file mode 100644 index 0000000..4854664 --- /dev/null +++ b/boards/espressif/esp32s3_eye/esp32s3_eye_appcpu_defconfig @@ -0,0 +1,3 @@ +# SPDX-License-Identifier: Apache-2.0 + +CONFIG_CLOCK_CONTROL=y diff --git a/boards/espressif/esp32s3_eye/esp32s3_eye_procpu.dts b/boards/espressif/esp32s3_eye/esp32s3_eye_procpu.dts new file mode 100644 index 0000000..7391ad2 --- /dev/null +++ b/boards/espressif/esp32s3_eye/esp32s3_eye_procpu.dts @@ -0,0 +1,210 @@ +/* + * Copyright (c) 2024 Espressif Systems (Shanghai) Co., Ltd. + * + * SPDX-License-Identifier: Apache-2.0 + */ +/dts-v1/; + +#include "espressif/esp32s3/esp32s3_wroom_n8r8.dtsi" +#include "esp32s3_eye-pinctrl.dtsi" +#include +#include +#include +#include + +/ { + model = "Espressif ESP32S3-EYE PROCPU"; + compatible = "espressif,esp32s3"; + + aliases { + i2c-0 = &i2c0; + watchdog0 = &wdt0; + sw0 = &button0; + led0 = &green_led; + }; + + chosen { + zephyr,sram = &sram1; + zephyr,console = &usb_serial; + zephyr,shell-uart = &usb_serial; + zephyr,flash = &flash0; + zephyr,code-partition = &slot0_partition; + zephyr,bt-hci = &esp32_bt_hci; + zephyr,display = &st7789v; + zephyr,camera = &lcd_cam; + }; + + buttons { + compatible = "gpio-keys"; + button0: button_0 { + gpios = <&gpio0 0 (GPIO_PULL_UP | GPIO_ACTIVE_LOW)>; + label = "BOOT Button"; + zephyr,code = ; + }; + }; + + adc-keys { + compatible = "adc-keys"; + io-channels = <&adc0 0>; + keyup-threshold-mv = <3300>; + sample-period-ms = <50>; + + menu_key { + press-thresholds-mv = <2800>; + zephyr,code = ; + }; + + play_key { + press-thresholds-mv = <1920>; + zephyr,code = ; + }; + + up_key { + press-thresholds-mv = <350>; + zephyr,code = ; + }; + + down_key { + press-thresholds-mv = <800>; + zephyr,code = ; + }; + }; + + leds { + compatible = "gpio-leds"; + green_led: led0 { + gpios = <&gpio0 3 GPIO_OPEN_DRAIN>; + label = "Power LED"; + }; + }; + + mipi_dbi { + compatible = "zephyr,mipi-dbi-spi"; + dc-gpios = <&gpio1 11 GPIO_ACTIVE_HIGH>; + spi-dev = <&spi3>; + write-only; + #address-cells = <1>; + #size-cells = <0>; + + st7789v: st7789v@0 { + compatible = "sitronix,st7789v"; + mipi-max-frequency = <20000000>; + reg = <0>; + width = <240>; + height = <240>; + x-offset = <0>; + y-offset = <0>; + vcom = <0x19>; + gctrl = <0x35>; + vrhs = <0x12>; + vdvs = <0x20>; + mdac = <0x00>; + 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 = [D0 04 0D 11 13 2B 3F 54 4C 18 0D 0B 1F 23]; + nvgam-param = [D0 04 0C 11 13 2C 3F 44 51 2F 1F 1F 20 23]; + ram-param = [00 F0]; + rgb-param = [CD 08 14]; + mipi-mode = "MIPI_DBI_MODE_SPI_4WIRE"; + }; + }; +}; + +&dma { + status = "okay"; +}; + +&i2c1 { + status = "okay"; + clock-frequency = ; + pinctrl-0 = <&i2c1_default>; + pinctrl-names = "default"; + ov2640: ov2640@30 { + compatible = "ovti,ov2640"; + reg = <0x30>; + status = "okay"; + clock-rate-control = <0x80>; + port { + ov2640_ep_out: endpoint { + remote-endpoint = <&dvp_ep_in>; + }; + }; + }; +}; + +&lcd_cam { + status = "okay"; + cam-clk = < 10000000 >; + pinctrl-0 = <&lcd_cam_default>; + pinctrl-names = "default"; + source = <&ov2640>; + dmas = <&dma 2>; + dma-names = "rx"; + port { + dvp_ep_in: endpoint { + remote-endpoint = <&ov2640_ep_out>; + }; + }; +}; + +&usb_serial { + status = "okay"; +}; + +&timer0 { + status = "okay"; +}; + +&timer1 { + status = "okay"; +}; + +&gpio0 { + status = "okay"; +}; + +&gpio1 { + status = "okay"; +}; + +&adc0 { + status = "okay"; + #address-cells = <1>; + #size-cells = <0>; + + channel@0 { + reg = <0>; + zephyr,gain = "ADC_GAIN_1_4"; + zephyr,reference = "ADC_REF_INTERNAL"; + zephyr,acquisition-time = ; + zephyr,resolution = <12>; + }; +}; + +&spi3 { + #address-cells = <1>; + #size-cells = <0>; + status = "okay"; + pinctrl-0 = <&spim3_default>; + pinctrl-names = "default"; +}; + +&wdt0 { + status = "okay"; +}; + +&trng0 { + status = "okay"; +}; + +&esp32_bt_hci { + status = "okay"; +}; + +&wifi { + status = "okay"; +}; diff --git a/boards/espressif/esp32s3_eye/esp32s3_eye_procpu.yaml b/boards/espressif/esp32s3_eye/esp32s3_eye_procpu.yaml new file mode 100644 index 0000000..1159b63 --- /dev/null +++ b/boards/espressif/esp32s3_eye/esp32s3_eye_procpu.yaml @@ -0,0 +1,20 @@ +identifier: esp32s3_eye/esp32s3/procpu +name: ESP32-S3 EYE PROCPU +type: mcu +arch: xtensa +toolchain: + - zephyr +supported: + - gpio + - uart + - i2c + - spi + - can + - counter + - watchdog + - entropy + - pwm + - dma + - input + - video +vendor: espressif diff --git a/boards/espressif/esp32s3_eye/esp32s3_eye_procpu_defconfig b/boards/espressif/esp32s3_eye/esp32s3_eye_procpu_defconfig new file mode 100644 index 0000000..32d7051 --- /dev/null +++ b/boards/espressif/esp32s3_eye/esp32s3_eye_procpu_defconfig @@ -0,0 +1,10 @@ +# SPDX-License-Identifier: Apache-2.0 + +CONFIG_CONSOLE=y +CONFIG_SERIAL=y +CONFIG_UART_CONSOLE=y +CONFIG_GPIO=y +CONFIG_CLOCK_CONTROL=y +CONFIG_ADC=y +CONFIG_ESP_SPIRAM=y +CONFIG_SPIRAM_MODE_OCT=y diff --git a/boards/espressif/esp32s3_eye/support/openocd.cfg b/boards/espressif/esp32s3_eye/support/openocd.cfg new file mode 100644 index 0000000..2f740b4 --- /dev/null +++ b/boards/espressif/esp32s3_eye/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/boards/espressif/esp8684_devkitm/Kconfig b/boards/espressif/esp8684_devkitm/Kconfig new file mode 100644 index 0000000..c6a99b1 --- /dev/null +++ b/boards/espressif/esp8684_devkitm/Kconfig @@ -0,0 +1,6 @@ +# Copyright (c) 2024 Espressif Systems (Shanghai) Co., Ltd. +# SPDX-License-Identifier: Apache-2.0 + +config HEAP_MEM_POOL_ADD_SIZE_BOARD + int + default 4096 diff --git a/boards/espressif/esp8684_devkitm/Kconfig.esp8684_devkitm b/boards/espressif/esp8684_devkitm/Kconfig.esp8684_devkitm new file mode 100644 index 0000000..5dddf33 --- /dev/null +++ b/boards/espressif/esp8684_devkitm/Kconfig.esp8684_devkitm @@ -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 diff --git a/boards/espressif/esp8684_devkitm/Kconfig.sysbuild b/boards/espressif/esp8684_devkitm/Kconfig.sysbuild new file mode 100644 index 0000000..8d3acb9 --- /dev/null +++ b/boards/espressif/esp8684_devkitm/Kconfig.sysbuild @@ -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 diff --git a/boards/espressif/esp8684_devkitm/board.cmake b/boards/espressif/esp8684_devkitm/board.cmake new file mode 100644 index 0000000..2f04d1f --- /dev/null +++ b/boards/espressif/esp8684_devkitm/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/espressif/esp8684_devkitm/board.yml b/boards/espressif/esp8684_devkitm/board.yml new file mode 100644 index 0000000..c6e86e6 --- /dev/null +++ b/boards/espressif/esp8684_devkitm/board.yml @@ -0,0 +1,6 @@ +board: + name: esp8684_devkitm + full_name: ESP8684-DevKitM + vendor: espressif + socs: + - name: esp32c2 diff --git a/boards/espressif/esp8684_devkitm/doc/img/esp8684_devkitm.webp b/boards/espressif/esp8684_devkitm/doc/img/esp8684_devkitm.webp new file mode 100644 index 0000000000000000000000000000000000000000..519a0668caf8ad53302a98f2c8487b0fd58a629d GIT binary patch literal 30462 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 literal 0 HcmV?d00001 diff --git a/boards/espressif/esp8684_devkitm/doc/index.rst b/boards/espressif/esp8684_devkitm/doc/index.rst new file mode 100644 index 0000000..c5e00b5 --- /dev/null +++ b/boards/espressif/esp8684_devkitm/doc/index.rst @@ -0,0 +1,225 @@ +.. zephyr:board:: esp8684_devkitm + +Overview +******** + +The ESP8684-DevKitM is an entry-level development board based on ESP8684-MINI-1, a general-purpose +module with 1 MB/2 MB/4 MB SPI flash. This board integrates complete Wi-Fi and Bluetooth LE functions. +For more information, check `ESP8684-DevKitM User Guide`_ + +Hardware +******** + +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. For more information, check `ESP8684 Datasheet`_. + +Features include the following: + +- 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 +================== + +.. zephyr:board-supported-hw:: + +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 +******************* + +.. zephyr:board-supported-runners:: + +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:: + :tool: west + :zephyr-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 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 (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 :zephyr:code-sample:`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= -DOPENOCD_DEFAULT_PATH=`` +parameter when building. + +Here is an example for building the :zephyr:code-sample:`hello_world` application. + +.. zephyr-app-commands:: + :zephyr-app: samples/hello_world + :board: esp8684_devkitm + :goals: build flash + :gen-args: -DOPENOCD= -DOPENOCD_DEFAULT_PATH= + +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: esp8684_devkitm + :goals: debug + +References +********** + +.. target-notes:: + +.. _`ESP8684-DevKitM User Guide`: https://docs.espressif.com/projects/esp-dev-kits/en/latest/esp8684/esp8684-devkitm-1/user_guide.html +.. _`ESP8684 Datasheet`: https://www.espressif.com/sites/default/files/documentation/esp8684_datasheet_en.pdf +.. _`ESP8684 Technical Reference Manual`: https://www.espressif.com/sites/default/files/documentation/esp8684_technical_reference_manual_en.pdf +.. _`OpenOCD ESP32`: https://github.com/espressif/openocd-esp32/releases diff --git a/boards/espressif/esp8684_devkitm/esp8684_devkitm-pinctrl.dtsi b/boards/espressif/esp8684_devkitm/esp8684_devkitm-pinctrl.dtsi new file mode 100644 index 0000000..dda91ad --- /dev/null +++ b/boards/espressif/esp8684_devkitm/esp8684_devkitm-pinctrl.dtsi @@ -0,0 +1,23 @@ +/* + * Copyright (c) 2024 Espressif Systems (Shanghai) Co., Ltd. + * + * SPDX-License-Identifier: Apache-2.0 + */ + +#include +#include +#include + +&pinctrl { + + uart0_default: uart0_default { + group1 { + pinmux = ; + output-high; + }; + group2 { + pinmux = ; + bias-pull-up; + }; + }; +}; diff --git a/boards/espressif/esp8684_devkitm/esp8684_devkitm.dts b/boards/espressif/esp8684_devkitm/esp8684_devkitm.dts new file mode 100644 index 0000000..6f51083 --- /dev/null +++ b/boards/espressif/esp8684_devkitm/esp8684_devkitm.dts @@ -0,0 +1,67 @@ +/* + * Copyright (c) 2024 Espressif Systems (Shanghai) Co., Ltd. + * + * SPDX-License-Identifier: Apache-2.0 + */ + +/dts-v1/; + +#include +#include "esp8684_devkitm-pinctrl.dtsi" +#include +#include + +/ { + model = "Espressif ESP8684-DevkitM"; + compatible = "espressif,esp32c2"; + + chosen { + zephyr,sram = &sram1; + zephyr,console = &uart0; + zephyr,shell-uart = &uart0; + zephyr,flash = &flash0; + zephyr,code-partition = &slot0_partition; + }; + + aliases { + sw0 = &user_button1; + i2c-0 = &i2c0; + 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 = ; + }; + }; +}; + +&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"; +}; + +&wifi { + status = "okay"; +}; diff --git a/boards/espressif/esp8684_devkitm/esp8684_devkitm.yaml b/boards/espressif/esp8684_devkitm/esp8684_devkitm.yaml new file mode 100644 index 0000000..e10093f --- /dev/null +++ b/boards/espressif/esp8684_devkitm/esp8684_devkitm.yaml @@ -0,0 +1,18 @@ +identifier: esp8684_devkitm +name: ESP8684 +type: mcu +arch: riscv +toolchain: + - zephyr +supported: + - adc + - dma + - gpio + - watchdog + - uart + - counter + - entropy + - i2c + - pwm + - spi +vendor: espressif diff --git a/boards/espressif/esp8684_devkitm/esp8684_devkitm_defconfig b/boards/espressif/esp8684_devkitm/esp8684_devkitm_defconfig new file mode 100644 index 0000000..187793c --- /dev/null +++ b/boards/espressif/esp8684_devkitm/esp8684_devkitm_defconfig @@ -0,0 +1,6 @@ +# SPDX-License-Identifier: Apache-2.0 + +CONFIG_CONSOLE=y +CONFIG_SERIAL=y +CONFIG_UART_CONSOLE=y +CONFIG_GPIO=y diff --git a/boards/espressif/esp8684_devkitm/support/openocd.cfg b/boards/espressif/esp8684_devkitm/support/openocd.cfg new file mode 100644 index 0000000..9320970 --- /dev/null +++ b/boards/espressif/esp8684_devkitm/support/openocd.cfg @@ -0,0 +1,5 @@ +set ESP_RTOS none + +# Use external JTAG interface, such as ESP-Prog +source [find interface/ftdi/esp32_devkitj_v1.cfg] +source [find target/esp32c2.cfg] diff --git a/boards/espressif/esp_wrover_kit/Kconfig b/boards/espressif/esp_wrover_kit/Kconfig new file mode 100644 index 0000000..6499798 --- /dev/null +++ b/boards/espressif/esp_wrover_kit/Kconfig @@ -0,0 +1,7 @@ +# Copyright (c) 2024 Espressif Systems (Shanghai) Co., Ltd. +# SPDX-License-Identifier: Apache-2.0 + +config HEAP_MEM_POOL_ADD_SIZE_BOARD + int + default 4096 if BOARD_ESP_WROVER_KIT_ESP32_PROCPU + default 256 if BOARD_ESP_WROVER_KIT_ESP32_APPCPU diff --git a/boards/espressif/esp_wrover_kit/Kconfig.defconfig b/boards/espressif/esp_wrover_kit/Kconfig.defconfig new file mode 100644 index 0000000..3fed008 --- /dev/null +++ b/boards/espressif/esp_wrover_kit/Kconfig.defconfig @@ -0,0 +1,11 @@ +# ESP-WROVER-KIT board configuration + +# Copyright (c) 2021 Espressif Systems (Shanghai) Co., Ltd. +# SPDX-License-Identifier: Apache-2.0 + +if BOARD_ESP_WROVER_KIT_ESP32_PROCPU + +config DISK_DRIVER_SDMMC + default y + +endif # BOARD_ESP_WROVER_KIT_ESP32_PROCPU diff --git a/boards/espressif/esp_wrover_kit/Kconfig.esp_wrover_kit b/boards/espressif/esp_wrover_kit/Kconfig.esp_wrover_kit new file mode 100644 index 0000000..b83fce2 --- /dev/null +++ b/boards/espressif/esp_wrover_kit/Kconfig.esp_wrover_kit @@ -0,0 +1,9 @@ +# ESP-WROVER-KIT board configuration + +# Copyright (c) 2021 Espressif Systems (Shanghai) Co., Ltd. +# SPDX-License-Identifier: Apache-2.0 + +config BOARD_ESP_WROVER_KIT + select SOC_ESP32_WROVER_E_N4R8 + select SOC_ESP32_PROCPU if BOARD_ESP_WROVER_KIT_ESP32_PROCPU + select SOC_ESP32_APPCPU if BOARD_ESP_WROVER_KIT_ESP32_APPCPU diff --git a/boards/espressif/esp_wrover_kit/Kconfig.sysbuild b/boards/espressif/esp_wrover_kit/Kconfig.sysbuild new file mode 100644 index 0000000..3a2d17a --- /dev/null +++ b/boards/espressif/esp_wrover_kit/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/espressif/esp_wrover_kit/board.cmake b/boards/espressif/esp_wrover_kit/board.cmake new file mode 100644 index 0000000..2f04d1f --- /dev/null +++ b/boards/espressif/esp_wrover_kit/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/espressif/esp_wrover_kit/board.yml b/boards/espressif/esp_wrover_kit/board.yml new file mode 100644 index 0000000..feb5c6b --- /dev/null +++ b/boards/espressif/esp_wrover_kit/board.yml @@ -0,0 +1,6 @@ +board: + name: esp_wrover_kit + full_name: ESP-WROVER-KIT + vendor: espressif + socs: + - name: esp32 diff --git a/boards/espressif/esp_wrover_kit/doc/img/esp-wrover-kit-block-diagram.jpg b/boards/espressif/esp_wrover_kit/doc/img/esp-wrover-kit-block-diagram.jpg new file mode 100644 index 0000000000000000000000000000000000000000..2d35b15d57791d1d06a6f08c3b25698e528ce97f GIT binary patch literal 28088 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 z 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 H-|YVY2+`+1 literal 0 HcmV?d00001 diff --git a/boards/espressif/esp_wrover_kit/doc/img/esp-wrover-kit-v4.1-jp2-tx-rx.jpg b/boards/espressif/esp_wrover_kit/doc/img/esp-wrover-kit-v4.1-jp2-tx-rx.jpg new file mode 100644 index 0000000000000000000000000000000000000000..2910ba6f0d83931710701716463559f5388f38c2 GIT binary patch literal 35379 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 literal 0 HcmV?d00001 diff --git a/boards/espressif/esp_wrover_kit/doc/img/esp-wrover-kit-v4.1-jp7-ext_5v.jpg b/boards/espressif/esp_wrover_kit/doc/img/esp-wrover-kit-v4.1-jp7-ext_5v.jpg new file mode 100644 index 0000000000000000000000000000000000000000..410912048532e0c41fb81200526e2b5c39334f94 GIT binary patch literal 32956 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 literal 0 HcmV?d00001 diff --git a/boards/espressif/esp_wrover_kit/doc/img/esp-wrover-kit-v4.1-jp7-usb_5v.jpg b/boards/espressif/esp_wrover_kit/doc/img/esp-wrover-kit-v4.1-jp7-usb_5v.jpg new file mode 100644 index 0000000000000000000000000000000000000000..050f5a96f5efb44b4c50ba85f3ff49ba018866d0 GIT binary patch literal 32836 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 literal 0 HcmV?d00001 diff --git a/boards/espressif/esp_wrover_kit/doc/img/esp-wrover-kit-v4.1-layout-back.jpg b/boards/espressif/esp_wrover_kit/doc/img/esp-wrover-kit-v4.1-layout-back.jpg new file mode 100644 index 0000000000000000000000000000000000000000..780a9202026edefad5b751cc3a77b40031620346 GIT binary patch literal 18996 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 literal 0 HcmV?d00001 diff --git a/boards/espressif/esp_wrover_kit/doc/img/esp_wrover_kit.jpg b/boards/espressif/esp_wrover_kit/doc/img/esp_wrover_kit.jpg new file mode 100644 index 0000000000000000000000000000000000000000..8cb975f01ce6b5798e5289b4e78c7c63ab35729d GIT binary patch literal 53973 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 literal 0 HcmV?d00001 diff --git a/boards/espressif/esp_wrover_kit/doc/index.rst b/boards/espressif/esp_wrover_kit/doc/index.rst new file mode 100644 index 0000000..0c5a2ee --- /dev/null +++ b/boards/espressif/esp_wrover_kit/doc/index.rst @@ -0,0 +1,621 @@ +.. zephyr:board:: esp_wrover_kit + +Overview +******** + +ESP-WROVER-KIT is an ESP32-based development board produced by `Espressif `_. + +ESP-WROVER-KIT features the following integrated components: + +- ESP32-WROVER-E module +- LCD screen +- MicroSD card slot + +Its another distinguishing feature is the embedded FTDI FT2232HL chip - an advanced multi-interface +USB bridge. This chip enables to use JTAG for direct debugging of ESP32 through the USB interface +without a separate JTAG debugger. ESP-WROVER-KIT makes development convenient, easy, and +cost-effective. + +Most of the ESP32 I/O pins are broken out to the board's pin headers for easy access. + +.. note:: + + ESP32's GPIO16 and GPIO17 are used as chip select and clock signals for PSRAM. By default, the two + GPIOs are not broken out to the board's pin headers in order to ensure reliable performance. + +For more information, check `ESP32-WROVER-E Datasheet`_ and `ESP32 Datasheet`_. + +Functionality Overview +********************** + +The block diagram below shows the main components of ESP-WROVER-KIT and their interconnections. + +.. image:: img/esp-wrover-kit-block-diagram.jpg + :align: center + :alt: ESP-WROVER-KIT + +Functional Description +********************** + +The following two figures and the table below describe the key components, interfaces, and controls +of the ESP-WROVER-KIT board. + +.. figure:: img/esp_wrover_kit.jpg + :align: center + :alt: esp wrover front + + ESP-WROVER-KIT board layout - front + +.. _esp wrover back: + +.. figure:: img/esp-wrover-kit-v4.1-layout-back.jpg + :align: center + :alt: esp wrover back + + ESP-WROVER-KIT board layout - back + +The table below provides description in the following manner: +- Starting from the first picture's top right corner and going clockwise +- Then moving on to the second picture + ++------------------+-------------------------------------------------------------------------+ +| Key Component | Description | ++==================+=========================================================================+ +| FT2232 | The FT2232 chip serves as a multi-protocol USB-to-serial bridge | +| | which can be programmed and controlled via USB to provide | +| | communication with ESP32. FT2232 also features USB-to-JTAG | +| | interface which is available on channel A of the chip, while USB-to- | +| | serial is on channel B. The FT2232 chip enhances user-friendliness in | +| | terms of application development and debugging. See `ESP-WROVER-KIT | +| | V4.1 schematic | +| | `_. | ++------------------+-------------------------------------------------------------------------+ +| 32.768 kHz | External precision 32.768 kHz crystal oscillator serves as a clock with | +| | low-power consumption while the chip is in Deep-sleep mode. | ++------------------+-------------------------------------------------------------------------+ +| 0R | Zero-ohm resistor intended as a placeholder for a current shunt, can | +| | be desoldered or replaced with a current shunt to facilitate the | +| | measurement of ESP32’s current consumption in different modes. | ++------------------+-------------------------------------------------------------------------+ +| ESP32-WROVER-E | This ESP32 module features 64-Mbit PSRAM for flexible extended | +| module | storage and data processing capabilities. | ++------------------+-------------------------------------------------------------------------+ +| Diagnostic LEDs | Four red LEDs connected to the GPIO pins of FT2232. Intended for | +| | future use. | ++------------------+-------------------------------------------------------------------------+ +| UART | Serial port. The serial TX/RX signals of FT2232 and ESP32 are broken | +| | out to the inward and outward sides of JP2 respectively. By default, | +| | these pairs of pins are connected with jumpers. To use ESP32’s serial | +| | interface, remove the jumpers and connect another external serial | +| | device to the respective pins. | ++------------------+-------------------------------------------------------------------------+ +| SPI | By default, ESP32 uses its SPI interface to access flash and PSRAM | +| | memory inside the module. Use these pins to connect ESP32 to | +| | another SPI device. In this case, an extra chip select (CS) signal is | +| | needed. Please note that the voltage of this interface is 3.3 V. | ++------------------+-------------------------------------------------------------------------+ +| CTS/RTS | Serial port flow control signals: the pins are not connected to the | +| | circuitry by default. To enable them, short the respective pins of JP14 | +| | with jumpers. | ++------------------+-------------------------------------------------------------------------+ +| JTAG | JTAG interface. JTAG signals of FT2232 and ESP32 are broken out to | +| | the inward and outward sides of JP2 respectively. By default, these | +| | pairs of pins are disconnected. To enable JTAG, short the respective | +| | pins with jumpers as shown in Section | +| | :ref:`Setup Options` | ++------------------+-------------------------------------------------------------------------+ +| USB Port | USB interface. Power supply for the board as well as the | +| | communication interface between a computer and the board. | ++------------------+-------------------------------------------------------------------------+ +| EN Button | Reset button. | ++------------------+-------------------------------------------------------------------------+ +| BOOT Button | Download button. Holding down Boot and then pressing EN initiates | +| | Firmware Download mode for downloading firmware through the | ++------------------+-------------------------------------------------------------------------+ +| Power Switch | Power On/Off Switch. Toggling toward the Boot button powers the | +| | board on, toggling away from Boot powers the board off. | ++------------------+-------------------------------------------------------------------------+ +| Power Selector | Power supply selector interface. The board can be powered either via | +| | USB or via the 5V Input interface. Select the power source with a | +| | jumper. For more details, see Section Setup Options, jumper header | +| | JP7. | ++------------------+-------------------------------------------------------------------------+ +| 5V input | 5V power supply interface for a standard coaxial power connector, | +| | 5.5 x 2.1 mm, center positive. This interface can be more convenient | +| | when the board is operating autonomously (not connected to a | +| | computer). | ++------------------+-------------------------------------------------------------------------+ +| 5V Power On LED | This red LED turns on when power is supplied to the board, either | +| | from USB or 5V Input. | ++------------------+-------------------------------------------------------------------------+ +| LDO | NCP1117(1A). 5V-to-3.3V LDO. NCP1117 can provide a maximum | +| | current of 1A. The LDO on the board has a fixed output voltage. | +| | Although, the user can install an LDO with adjustable output voltage. | +| | For details, please refer to `ESP-WROVER-KIT V4.1 schematic | +| | `_. | ++------------------+-------------------------------------------------------------------------+ +| Camera Connector | Camera interface, a standard OV7670 camera module. | ++------------------+-------------------------------------------------------------------------+ +| RGB LED | Red, green and blue (RGB) light emitting diodes (LEDs), can be | +| | controlled by pulse width modulation (PWM). | ++------------------+-------------------------------------------------------------------------+ +| I/O Connector | All the pins on the ESP32 module are broken out to pin headers. You | +| | can program ESP32 to enable multiple functions, such as PWM, ADC, | +| | DAC, I2C, I2S, SPI, etc. | ++------------------+-------------------------------------------------------------------------+ +| MicroSD Card | Useful for developing applications that access MicroSD card for data | +| Slot | storage and retrieval. | ++------------------+-------------------------------------------------------------------------+ +| LCD | Support for mounting and interfacing a 3.2” SPI (standard 4-wire | +| | Serial Peripheral Interface) LCD, as shown on figure | +| | :ref:`ESP-WROVER-KIT board layout - back` | ++------------------+-------------------------------------------------------------------------+ + +.. _setup options: + +Setup Options +************* + +There are three jumper blocks available to set up the board functionality. The most frequently +required options are listed in the table below. + +.. |jmpextpwr| image:: img/esp-wrover-kit-v4.1-jp7-ext_5v.jpg + +.. |jmpusbpwr| image:: img/esp-wrover-kit-v4.1-jp7-usb_5v.jpg + +.. |jmpjtag| image:: img/esp-wrover-kit-v4.1-jp2-jtag.jpg + +.. |jmpuart| image:: img/esp-wrover-kit-v4.1-jp2-tx-rx.jpg + +.. |jmpctrl| image:: img/esp-wrover-kit-v4.1-jp14.jpg + ++------------------+--------------------------------------------------------------+ +| Header | Jumper Setting | Description of Functionality | ++========+================+=======================================================+ +| JP7 | |jmpextpwr| | Power ESP-WROVER-KIT via an external power supply | ++--------+----------------+-------------------------------------------------------+ +| JP7 | |jmpusbpwr| | Power ESP-WROVER-KIT via USB | ++--------+----------------+-------------------------------------------------------+ +| JP2 | |jmpjtag| | Enable JTAG functionality | ++--------+----------------+-------------------------------------------------------+ +| JP2 | |jmpuart| | Enable UART communication | ++--------+----------------+-------------------------------------------------------+ +| JP14 | |jmpctrl| | Enable RTS/CTS flow control for serial communication | ++--------+----------------+-------------------------------------------------------+ + +Allocation of ESP32 Pins +************************ + +Some pins / terminals of ESP32 are allocated for use with the onboard or external hardware. If +that hardware is not used, e.g., nothing is plugged into the Camera (JP4) header, then these +GPIOs can be used for other purposes. + +Some of the pins, such as GPIO0 or GPIO2, have multiple functions and some of them are shared +among onboard and external peripheral devices. Certain combinations of peripherals cannot work +together. For example, it is not possible to do JTAG debugging of an application that is using +SD card, because several pins are shared by JTAG and the SD card slot. + +In other cases, peripherals can coexist under certain conditions. This is applicable to, for +example, LCD screen and SD card that share only a single pin GPIO21. This pin is used to provide +D/C (Data / Control) signal for the LCD as well as the Card Detect signal read from the SD card +slot. If the card detect functionality is not essential, then it may be disabled by removing R167, +so both LCD and SD may operate together. + +For more details on which pins are shared among which peripherals, please refer to the table in +the next section. + +Main I/O Connector / JP1 +************************ + +The JP1 connector consists of 14x2 male pins whose functions are shown in the middle two “I/O” +columns of the table below. The two “Shared With” columns on both sides describe where else on +the board a certain GPIO is used. + ++-------------------+------+------+----------------------+ +| Shared With | I/O | I/O | Shared With | ++===================+======+======+======================+ +| n/a | 3.3V | GND | n/a | ++-------------------+------+------+----------------------+ +| NC/XTAL | IO32 | IO33 | NC/XTAL | ++-------------------+------+------+----------------------+ +| JTAG, MicroSD | IO12 | IO13 | JTAG, MicroSD | ++-------------------+------+------+----------------------+ +| JTAG, MicroSD | IO14 | IO27 | Camera | ++-------------------+------+------+----------------------+ +| Camera | IO26 | IO25 | Camera, LCD | ++-------------------+------+------+----------------------+ +| Camera | IO35 | IO34 | Camera | ++-------------------+------+------+----------------------+ +| Camera | IO39 | IO36 | Camera | ++-------------------+------+------+----------------------+ +| JTAG | EN | IO23 | Camera, LCD | ++-------------------+------+------+----------------------+ +| Camera, LCD | IO22 | IO21 | Camera, LCD, MicroSD | ++-------------------+------+------+----------------------+ +| Camera, LCD | IO19 | IO18 | Camera, LCD | ++-------------------+------+------+----------------------+ +| Camera, LCD | IO5 | IO17 | PSRAM | ++-------------------+------+------+----------------------+ +| PSRAM | IO16 | IO4 | LED, Camera, MicroSD | ++-------------------+------+------+----------------------+ +| Camera, LED, Boot | IO0 | IO2 | LED, MicroSD | ++-------------------+------+------+----------------------+ +| JTAG, MicroSD | IO15 | 5V | | ++-------------------+------+------+----------------------+ + +Legend: + + - NC/XTAL - 32.768 kHz Oscillator + - JTAG - JTAG / JP2 + - Boot - Boot button / SW2 + - Camera - Camera / JP4 + - LED - RGB LED + - MicroSD - MicroSD Card / J4 + - LCD - LCD / U5 + - PSRAM - ESP32-WROVER-E's PSRAM + +32.768 kHz Oscillator +********************* + ++---+-----------+ +| . | ESP32 Pin | ++===+===========+ +| 1 | GPIO32 | ++---+-----------+ +| 2 | GPIO33 | ++---+-----------+ + +.. note:: + + Since GPIO32 and GPIO33 are connected to the oscillator by default, they are not connected to + the JP1 I/O connector to maintain signal integrity. This allocation may be changed from the + oscillator to JP1 by desoldering the zero-ohm resistors from positions R11 / R23 and re-soldering + them to positions R12 / R24. + +SPI Flash / JP2 +*************** + ++---+--------------+ +| . | ESP32 Pin | ++===+==============+ +| 1 | CLK / GPIO6 | ++---+--------------+ +| 2 | SD0 / GPIO7 | ++---+--------------+ +| 3 | SD1 / GPIO8 | ++---+--------------+ +| 4 | SD2 / GPIO9 | ++---+--------------+ +| 5 | SD3 / GPIO10 | ++---+--------------+ +| 6 | CDM / GPIO11 | ++---+--------------+ + +.. important:: + The module's flash bus is connected to the jumper block JP2 through zero-ohm resistors R140 ~ + R145. If the flash memory needs to operate at the frequency of 80 MHz, for reasons such as + improving the integrity of bus signals, you can desolder these resistors to disconnect the + module's flash bus from the pin header JP2. + +JTAG / JP2 +********** + ++---+---------------+-------------+ +| . | ESP32 Pin | JTAG Signal | ++===+===============+=============+ +| 1 | EN | TRST_N | ++---+---------------+-------------+ +| 2 | MTMS / GPIO14 | TMS | ++---+---------------+-------------+ +| 3 | MTDO / GPIO15 | TDO | ++---+---------------+-------------+ +| 4 | MTDI / GPIO12 | TDI | ++---+---------------+-------------+ +| 5 | MTCK / GPIO13 | TCK | ++---+---------------+-------------+ + +Camera / JP4 +************ + ++----+-----------+-----------------------------+ +| . | ESP32 Pin | Camera Signal | ++====+===========+=============================+ +| 1 | n/a | 3.3V | ++----+-----------+-----------------------------+ +| 2 | n/a | Ground | ++----+-----------+-----------------------------+ +| 3 | GPIO27 | SIO_C / SCCB Clock | ++----+-----------+-----------------------------+ +| 4 | GPIO26 | SIO_D / SCCB Data | ++----+-----------+-----------------------------+ +| 5 | GPIO25 | VSYNC / Vertical Sync | ++----+-----------+-----------------------------+ +| 6 | GPIO23 | HREF / Horizontal Reference | ++----+-----------+-----------------------------+ +| 7 | GPIO22 | PCLK / Pixel Clock | ++----+-----------+-----------------------------+ +| 8 | GPIO21 | XCLK / System Clock | ++----+-----------+-----------------------------+ +| 9 | GPIO35 | D7 / Pixel Data Bit 7 | ++----+-----------+-----------------------------+ +| 10 | GPIO34 | D6 / Pixel Data Bit 6 | ++----+-----------+-----------------------------+ +| 11 | GPIO39 | D5 / Pixel Data Bit 5 | ++----+-----------+-----------------------------+ +| 12 | GPIO36 | D4 / Pixel Data Bit 4 | ++----+-----------+-----------------------------+ +| 13 | GPIO19 | D3 / Pixel Data Bit 3 | ++----+-----------+-----------------------------+ +| 14 | GPIO18 | D2 / Pixel Data Bit 2 | ++----+-----------+-----------------------------+ +| 15 | GPIO5 | D1 / Pixel Data Bit 1 | ++----+-----------+-----------------------------+ +| 16 | GPIO4 | D0 / Pixel Data Bit 0 | ++----+-----------+-----------------------------+ +| 17 | GPIO0 | RESET / Camera Reset | ++----+-----------+-----------------------------+ +| 18 | n/a | PWDN / Camera Power Down | ++----+-----------+-----------------------------+ + +- Signals D0 .. D7 denote camera data bus + +RGB LED +******* + ++----+-----------+---------+ +| . | ESP32 Pin | RGB LED | ++====+===========+=========+ +| 1 | GPIO0 | Red | ++----+-----------+---------+ +| 2 | GPIO2 | Green | ++----+-----------+---------+ +| 3 | GPIO4 | Blue | ++----+-----------+---------+ + +MicroSD Card +************ + ++---+---------------+----------------+ +| . | ESP32 Pin | MicroSD Signal | ++===+===============+================+ +| 1 | MTDI / GPIO12 | DATA2 | ++---+---------------+----------------+ +| 2 | MTCK / GPIO13 | CD / DATA3 | ++---+---------------+----------------+ +| 3 | MTDO / GPIO15 | CMD | ++---+---------------+----------------+ +| 4 | MTMS / GPIO14 | CLK | ++---+---------------+----------------+ +| 5 | GPIO2 | DATA0 | ++---+---------------+----------------+ +| 6 | GPIO4 | DATA1 | ++---+---------------+----------------+ +| 7 | GPIO21 | Card Detect | ++---+---------------+----------------+ + +LCD / U5 +******** + ++---+-----------+------------+ +| . | ESP32 Pin | LCD Signal | ++===+===========+============+ +| 1 | GPIO18 | RESET | ++---+-----------+------------+ +| 2 | GPIO19 | SCL | ++---+-----------+------------+ +| 3 | GPIO21 | D/C | ++---+-----------+------------+ +| 4 | GPIO22 | CS | ++---+-----------+------------+ +| 5 | GPIO23 | SDA | ++---+-----------+------------+ +| 6 | GPIO25 | SDO | ++---+-----------+------------+ +| 7 | GPIO5 | Backlight | ++---+-----------+------------+ + +Start Application Development +***************************** + +Before powering up your ESP-WROVER-KIT, please make sure that the board is in good +condition with no obvious signs of damage. + +Initial Setup +************* + +Please set only the following jumpers shown in the pictures below: + +- Select USB as the power source using the jumper block JP7. +- Enable UART communication using the jumper block JP2. + ++------------------------+---------------------------+ +| Power up from USB port | Enable UART communication | ++========+===============+===========================+ +| |jmpusbpwr| | |jmpuart| | ++------------------------+---------------------------+ + +Do not install any other jumpers. + +Turn the Power Switch to ON, the 5V Power On LED should light up. + +Supported Features +================== + +.. zephyr:board-supported-hw:: + +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 +******************* + +.. zephyr:board-supported-runners:: + +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:: + :tool: west + :zephyr-app: samples/hello_world + :board: esp_wrover_kit + :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 (see :ref:`build_an_application` and +:ref:`application_run` for more details). + +.. zephyr-app-commands:: + :zephyr-app: samples/hello_world + :board: esp_wrover_kit/esp32/procpu + :goals: build + +The usual ``flash`` target will work with the ``esp_wrover_kit`` board +configuration. Here is an example for the :zephyr:code-sample:`hello_world` +application. + +.. zephyr-app-commands:: + :zephyr-app: samples/hello_world + :board: esp_wrover_kit/esp32/procpu + :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! esp_wrover_kit + +Debugging +********* + +ESP32 support on OpenOCD is available at `OpenOCD ESP32`_. + +On the ESP-WROVER-KIT board, the JTAG pins are connected internally to +a USB serial port on the same device as the console. These boards +require no external hardware and are debuggable as-is. The JTAG +signals, however, must be jumpered closed to connect the internal +controller (the default is to leave them disconnected). The jumper +headers are on the right side of the board as viewed from the power +switch, next to similar headers for SPI and UART. See +`ESP-WROVER-32 V3 Getting Started Guide`_ for details. + +Here is an example for building the :zephyr:code-sample:`hello_world` application. + +.. zephyr-app-commands:: + :zephyr-app: samples/hello_world + :board: esp_wrover_kit/esp32/procpu + :goals: build flash + :gen-args: -DOPENOCD= -DOPENOCD_DEFAULT_PATH= + +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: esp_wrover_kit/esp32/procpu + :goals: debug + +References +********** + +.. target-notes:: + +.. _`ESP32 Datasheet`: https://www.espressif.com/sites/default/files/documentation/esp32_datasheet_en.pdf (PDF) +.. _`ESP32-WROVER-E Datasheet`: https://www.espressif.com/sites/default/files/documentation/esp32-wrover-e_esp32-wrover-ie_datasheet_en.pdf (PDF) +.. _`OpenOCD ESP32`: https://github.com/espressif/openocd-esp32/releases +.. _`ESP-WROVER-32 V3 Getting Started Guide`: https://docs.espressif.com/projects/esp-idf/en/latest/esp32/hw-reference/esp32/get-started-wrover-kit.html diff --git a/boards/espressif/esp_wrover_kit/esp_wrover_kit-pinctrl.dtsi b/boards/espressif/esp_wrover_kit/esp_wrover_kit-pinctrl.dtsi new file mode 100644 index 0000000..62fb834 --- /dev/null +++ b/boards/espressif/esp_wrover_kit/esp_wrover_kit-pinctrl.dtsi @@ -0,0 +1,85 @@ +/* + * Copyright (c) 2022 Espressif Systems (Shanghai) Co., Ltd. + * + * SPDX-License-Identifier: Apache-2.0 + */ + +#include +#include +#include + +&pinctrl { + + uart0_default: uart0_default { + group1 { + pinmux = ; + output-high; + }; + group2 { + pinmux = ; + bias-pull-up; + }; + }; + + uart1_default: uart1_default { + group1 { + pinmux = ; + output-high; + }; + group2 { + pinmux = ; + bias-pull-up; + }; + }; + + spim2_default: spim2_default { + group1 { + pinmux = , + , + ; + }; + group2 { + pinmux = ; + output-low; + }; + }; + + spim3_default: spim3_default { + group1 { + pinmux = , + , + ; + }; + group2 { + pinmux = ; + output-low; + }; + }; + + i2c0_default: i2c0_default { + group1 { + pinmux = , + ; + bias-pull-up; + drive-open-drain; + output-high; + }; + }; + + ledc0_default: ledc0_default { + group1 { + pinmux = , + , + ; + output-enable; + }; + }; + + sdhc0_default: sdhc0_default { + group1 { + pinmux = ; + bias-pull-up; + output-high; + }; + }; +}; diff --git a/boards/espressif/esp_wrover_kit/esp_wrover_kit_appcpu.dts b/boards/espressif/esp_wrover_kit/esp_wrover_kit_appcpu.dts new file mode 100644 index 0000000..903f48f --- /dev/null +++ b/boards/espressif/esp_wrover_kit/esp_wrover_kit_appcpu.dts @@ -0,0 +1,30 @@ +/* + * Copyright (c) 2023 Espressif Systems (Shanghai) Co., Ltd. + * + * SPDX-License-Identifier: Apache-2.0 + */ +/dts-v1/; + +#include +#include + +/ { + model = "Espressif ESP32-Wrover-Kit APPCPU"; + compatible = "espressif,esp32"; + + chosen { + zephyr,sram = &sram1; + zephyr,ipc_shm = &shm0; + zephyr,ipc = &ipm0; + zephyr,flash = &flash0; + zephyr,code-partition = &slot0_appcpu_partition; + }; +}; + +&ipm0 { + status = "okay"; +}; + +&trng0 { + status = "okay"; +}; diff --git a/boards/espressif/esp_wrover_kit/esp_wrover_kit_appcpu.yaml b/boards/espressif/esp_wrover_kit/esp_wrover_kit_appcpu.yaml new file mode 100644 index 0000000..57971b3 --- /dev/null +++ b/boards/espressif/esp_wrover_kit/esp_wrover_kit_appcpu.yaml @@ -0,0 +1,27 @@ +identifier: esp_wrover_kit/esp32/appcpu +name: ESP WROVER KIT APPCPU +type: mcu +arch: xtensa +toolchain: + - zephyr +supported: + - uart +testing: + ignore_tags: + - net + - bluetooth + - flash + - cpp + - posix + - watchdog + - logging + - kernel + - pm + - gpio + - crypto + - eeprom + - heap + - cmsis_rtos + - jwt + - zdsp +vendor: espressif diff --git a/boards/espressif/esp_wrover_kit/esp_wrover_kit_appcpu_defconfig b/boards/espressif/esp_wrover_kit/esp_wrover_kit_appcpu_defconfig new file mode 100644 index 0000000..4854664 --- /dev/null +++ b/boards/espressif/esp_wrover_kit/esp_wrover_kit_appcpu_defconfig @@ -0,0 +1,3 @@ +# SPDX-License-Identifier: Apache-2.0 + +CONFIG_CLOCK_CONTROL=y diff --git a/boards/espressif/esp_wrover_kit/esp_wrover_kit_procpu.dts b/boards/espressif/esp_wrover_kit/esp_wrover_kit_procpu.dts new file mode 100644 index 0000000..552829c --- /dev/null +++ b/boards/espressif/esp_wrover_kit/esp_wrover_kit_procpu.dts @@ -0,0 +1,224 @@ +/* + * Copyright (c) 2021 Espressif Systems (Shanghai) Co., Ltd. + * + * SPDX-License-Identifier: Apache-2.0 + */ +/dts-v1/; + +#include +#include "esp_wrover_kit-pinctrl.dtsi" +#include + +/ { + model = "Espressif ESP32-Wrover-Kit PROCPU"; + compatible = "espressif,esp32"; + + aliases { + led0 = &blue_led; + led1 = &green_led; + led2 = &red_led; + pwm-led0 = &pwm_led_red; + pwm-led1 = &pwm_led_green; + pwm-led2 = &pwm_led_blue; + red-pwm-led = &pwm_led_red; + green-pwm-led = &pwm_led_green; + blue-pwm-led = &pwm_led_blue; + uart-0 = &uart0; + i2c-0 = &i2c0; + watchdog0 = &wdt0; + sdhc0 = &sdhc1; + }; + + chosen { + zephyr,sram = &sram1; + zephyr,console = &uart0; + zephyr,shell-uart = &uart0; + zephyr,flash = &flash0; + zephyr,code-partition = &slot0_partition; + zephyr,display = &ili9341; + zephyr,sdhc = &sdhc1; + zephyr,bt-hci = &esp32_bt_hci; + }; + + leds { + compatible = "gpio-leds"; + + blue_led: led_0 { + gpios = <&gpio0 4 GPIO_ACTIVE_HIGH>; + label = "Blue - LED0"; + }; + + green_led: led_1 { + gpios = <&gpio0 2 GPIO_ACTIVE_HIGH>; + label = "Green - LED1"; + }; + + red_led: led_2 { + gpios = <&gpio0 0 GPIO_ACTIVE_HIGH>; + label = "Red - LED2"; + }; + }; + + pwmleds { + compatible = "pwm-leds"; + pwm_led_red: pwm_led_0 { + label = "Red PWM LED"; + pwms = <&ledc0 0 PWM_HZ(100) PWM_POLARITY_NORMAL>; + }; + pwm_led_green: pwm_led_1 { + label = "Green PWM LED"; + pwms = <&ledc0 1 PWM_HZ(100) PWM_POLARITY_NORMAL>; + }; + pwm_led_blue: pwm_led_2 { + label = "Blue PWM LED"; + pwms = <&ledc0 2 PWM_HZ(100) PWM_POLARITY_NORMAL>; + }; + }; + + mipi_dbi { + compatible = "zephyr,mipi-dbi-spi"; + dc-gpios = <&gpio0 21 GPIO_ACTIVE_HIGH>; + reset-gpios = <&gpio0 18 GPIO_ACTIVE_LOW>; + spi-dev = <&spi3>; + write-only; + #address-cells = <1>; + #size-cells = <0>; + + ili9341: ili9341@0 { + compatible = "ilitek,ili9341"; + mipi-max-frequency = <25000000>; + reg = <0>; + pixel-format = <0>; + rotation = <0>; + width = <240>; + height = <320>; + }; + }; +}; + +&uart0 { + status = "okay"; + current-speed = <115200>; + pinctrl-0 = <&uart0_default>; + pinctrl-names = "default"; +}; + +&uart1 { + status = "disabled"; + current-speed = <115200>; + pinctrl-0 = <&uart1_default>; + pinctrl-names = "default"; +}; + +&gpio0 { + status = "okay"; + + /* FIXME: should be part of the display node */ + lcd-backlight { + gpio-hog; + gpios = <5 GPIO_ACTIVE_HIGH>; + output-low; + }; +}; + +&gpio1 { + status = "okay"; +}; + +&i2c0 { + status = "okay"; + clock-frequency = ; + sda-gpios = <&gpio0 21 GPIO_OPEN_DRAIN>; + scl-gpios = <&gpio0 22 GPIO_OPEN_DRAIN>; + pinctrl-0 = <&i2c0_default>; + pinctrl-names = "default"; +}; + +&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_default>; + pinctrl-names = "default"; +}; + +&ledc0 { + pinctrl-0 = <&ledc0_default>; + pinctrl-names = "default"; + status = "okay"; + #address-cells = <1>; + #size-cells = <0>; + channel0@0 { + reg = <0x0>; + timer = <0>; + }; + channel1@1 { + reg = <0x1>; + timer = <1>; + }; + channel2@2 { + reg = <0x2>; + timer = <2>; + }; +}; + +&timer0 { + status = "okay"; +}; + +&timer1 { + status = "okay"; +}; + +&timer2 { + status = "okay"; +}; + +&timer3 { + status = "okay"; +}; + +&trng0 { + status = "okay"; +}; + +&sdhc { + sdhc1: sdhc@1 { + status = "okay"; + + pinctrl-0 = <&sdhc0_default>; + pinctrl-names = "default"; + power-delay-ms = <100>; + max-bus-freq = <52000000>; + bus-width = <4>; + + clk-pin = <14>; + cmd-pin = <15>; + d0-pin = <2>; + d1-pin = <4>; + d2-pin = <12>; + d3-pin = <13>; + + mmc { + compatible = "zephyr,sdmmc-disk"; + disk-name = "SD"; + status = "okay"; + }; + }; +}; + +&esp32_bt_hci { + status = "okay"; +}; + +&wifi { + status = "okay"; +}; diff --git a/boards/espressif/esp_wrover_kit/esp_wrover_kit_procpu.yaml b/boards/espressif/esp_wrover_kit/esp_wrover_kit_procpu.yaml new file mode 100644 index 0000000..88bcdc3 --- /dev/null +++ b/boards/espressif/esp_wrover_kit/esp_wrover_kit_procpu.yaml @@ -0,0 +1,20 @@ +identifier: esp_wrover_kit/esp32/procpu +name: ESP WROVER KIT PROCPU +type: mcu +arch: xtensa +toolchain: + - zephyr +supported: + - adc + - dac + - gpio + - i2c + - watchdog + - uart + - nvs + - pwm + - sdhc + - spi + - counter + - entropy +vendor: espressif diff --git a/boards/espressif/esp_wrover_kit/esp_wrover_kit_procpu_defconfig b/boards/espressif/esp_wrover_kit/esp_wrover_kit_procpu_defconfig new file mode 100644 index 0000000..e192c24 --- /dev/null +++ b/boards/espressif/esp_wrover_kit/esp_wrover_kit_procpu_defconfig @@ -0,0 +1,7 @@ +# SPDX-License-Identifier: Apache-2.0 + +CONFIG_CONSOLE=y +CONFIG_SERIAL=y +CONFIG_UART_CONSOLE=y + +CONFIG_GPIO=y diff --git a/boards/espressif/esp_wrover_kit/support/openocd.cfg b/boards/espressif/esp_wrover_kit/support/openocd.cfg new file mode 100644 index 0000000..338e6e4 --- /dev/null +++ b/boards/espressif/esp_wrover_kit/support/openocd.cfg @@ -0,0 +1,5 @@ +set ESP_RTOS none +set ESP32_ONLYCPU 1 + +source [find interface/ftdi/esp32_devkitj_v1.cfg] +source [find target/esp32.cfg] diff --git a/boards/espressif/index.rst b/boards/espressif/index.rst new file mode 100644 index 0000000..b1b7dfb --- /dev/null +++ b/boards/espressif/index.rst @@ -0,0 +1,10 @@ +.. _boards-espressif: + +Espressif +######### + +.. toctree:: + :maxdepth: 1 + :glob: + + **/* diff --git a/prj.conf b/prj.conf new file mode 100644 index 0000000..c6baee6 --- /dev/null +++ b/prj.conf @@ -0,0 +1 @@ +CONFIG_PRINTK=y diff --git a/src/main.c b/src/main.c new file mode 100644 index 0000000..b270dcd --- /dev/null +++ b/src/main.c @@ -0,0 +1,7 @@ +#include + +void main(void) +{ + printk("Hello World! %s\n", CONFIG_BOARD); +} +