From 9a7427ee0e38e444b5034119d42f3a99c1bc42a3 Mon Sep 17 00:00:00 2001 From: Zhang Xingtao Date: Tue, 6 Aug 2024 02:00:01 +0800 Subject: [PATCH] boards: xtensa: add M5Stack CoreS3 support Initial support for M5Statck CoreS3 development board. Signed-off-by: Zhang Xingtao --- .../m5stack/m5stack_cores3/Kconfig.defconfig | 21 ++ .../m5stack_cores3/Kconfig.m5stack_cores3 | 9 + boards/m5stack/m5stack_cores3/board.cmake | 9 + boards/m5stack/m5stack_cores3/board.yml | 5 + .../doc/img/m5stack_cores3.webp | Bin 0 -> 99610 bytes boards/m5stack/m5stack_cores3/doc/index.rst | 118 +++++++++ .../m5stack_cores3-pinctrl.dtsi | 63 +++++ .../m5stack_cores3/m5stack_cores3_appcpu.dts | 66 +++++ .../m5stack_cores3/m5stack_cores3_appcpu.yaml | 27 ++ .../m5stack_cores3_appcpu_defconfig | 4 + .../m5stack_cores3/m5stack_cores3_procpu.dts | 230 ++++++++++++++++++ .../m5stack_cores3/m5stack_cores3_procpu.yaml | 21 ++ .../m5stack_cores3_procpu_defconfig | 44 ++++ .../m5stack_cores3/support/openocd.cfg | 7 + 14 files changed, 624 insertions(+) create mode 100644 boards/m5stack/m5stack_cores3/Kconfig.defconfig create mode 100644 boards/m5stack/m5stack_cores3/Kconfig.m5stack_cores3 create mode 100644 boards/m5stack/m5stack_cores3/board.cmake create mode 100644 boards/m5stack/m5stack_cores3/board.yml create mode 100644 boards/m5stack/m5stack_cores3/doc/img/m5stack_cores3.webp create mode 100644 boards/m5stack/m5stack_cores3/doc/index.rst create mode 100644 boards/m5stack/m5stack_cores3/m5stack_cores3-pinctrl.dtsi create mode 100644 boards/m5stack/m5stack_cores3/m5stack_cores3_appcpu.dts create mode 100644 boards/m5stack/m5stack_cores3/m5stack_cores3_appcpu.yaml create mode 100644 boards/m5stack/m5stack_cores3/m5stack_cores3_appcpu_defconfig create mode 100644 boards/m5stack/m5stack_cores3/m5stack_cores3_procpu.dts create mode 100644 boards/m5stack/m5stack_cores3/m5stack_cores3_procpu.yaml create mode 100644 boards/m5stack/m5stack_cores3/m5stack_cores3_procpu_defconfig create mode 100644 boards/m5stack/m5stack_cores3/support/openocd.cfg diff --git a/boards/m5stack/m5stack_cores3/Kconfig.defconfig b/boards/m5stack/m5stack_cores3/Kconfig.defconfig new file mode 100644 index 000000000000000..ce90c689773eb97 --- /dev/null +++ b/boards/m5stack/m5stack_cores3/Kconfig.defconfig @@ -0,0 +1,21 @@ +# Copyright (c) 2024 Zhang Xingtao +# SPDX-License-Identifier: Apache-2.0 + +if BOARD_M5STACK_CORES3_ESP32S3_PROCPU + +config HEAP_MEM_POOL_ADD_SIZE_BOARD + int + default $(UINT16_MAX) if WIFI && BT + default 51200 if WIFI + default 40960 if BT + default 4096 + +endif # BOARD_M5STACK_CORES3_ESP32S3_PROCPU + + +if BOARD_M5STACK_CORES3_ESP32S3_APPCPU + +config HEAP_MEM_POOL_ADD_SIZE_BOARD + default 256 + +endif # BOARD_M5STACK_CORES3_ESP32S3_APPCPU diff --git a/boards/m5stack/m5stack_cores3/Kconfig.m5stack_cores3 b/boards/m5stack/m5stack_cores3/Kconfig.m5stack_cores3 new file mode 100644 index 000000000000000..e22a35c2129f6ac --- /dev/null +++ b/boards/m5stack/m5stack_cores3/Kconfig.m5stack_cores3 @@ -0,0 +1,9 @@ +# M5Stack CoreS3 board configuration + +# Copyright (c) 2024 Zhang Xingtao +# SPDX-License-Identifier: Apache-2.0 + +config BOARD_M5STACK_CORES3 + select SOC_ESP32S3_WROOM_N16R8 + select SOC_ESP32S3_PROCPU if BOARD_M5STACK_CORES3_ESP32S3_PROCPU + select SOC_ESP32S3_APPCPU if BOARD_M5STACK_CORES3_ESP32S3_APPCPU diff --git a/boards/m5stack/m5stack_cores3/board.cmake b/boards/m5stack/m5stack_cores3/board.cmake new file mode 100644 index 000000000000000..2f04d1fe8861ea6 --- /dev/null +++ b/boards/m5stack/m5stack_cores3/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/m5stack/m5stack_cores3/board.yml b/boards/m5stack/m5stack_cores3/board.yml new file mode 100644 index 000000000000000..19a95c18562899d --- /dev/null +++ b/boards/m5stack/m5stack_cores3/board.yml @@ -0,0 +1,5 @@ +board: + name: m5stack_cores3 + vendor: m5stack + socs: + - name: esp32s3 diff --git a/boards/m5stack/m5stack_cores3/doc/img/m5stack_cores3.webp b/boards/m5stack/m5stack_cores3/doc/img/m5stack_cores3.webp new file mode 100644 index 0000000000000000000000000000000000000000..08b7ae97253dfe1f5b859f690cdcf16a74d973a7 GIT binary patch literal 99610 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 O0YCr{00jQu3j7ZvP&t7B literal 0 HcmV?d00001 diff --git a/boards/m5stack/m5stack_cores3/doc/index.rst b/boards/m5stack/m5stack_cores3/doc/index.rst new file mode 100644 index 000000000000000..62d358db71bc69b --- /dev/null +++ b/boards/m5stack/m5stack_cores3/doc/index.rst @@ -0,0 +1,118 @@ +.. _m5stack_cores3: + +M5Stack CoreS3 +############## + +Overview +******** + +M5Stack CoreS3 is an ESP32-based development board from M5Stack. It is the third generation of the M5Stack Core series. + +M5Stack CoreS3 features consist of: + +- ESP32-S3 chip (dual-core Xtensa LX7 processor @240MHz, WIFI, OTG\CDC functions) +- PSRAM 8MB +- Flash 16MB +- LCD ISP 2", 320x240 pixel ILI9342C +- Capacitive multi touch FT6336U +- Camera 30W pixel GC0308 +- Speaker 1W AW88298 +- Dual Microphones ES7210 Audio decoder +- RTC BM8563 +- USB-C +- SD-Card slot +- Geomagnetic sensor BMM150 +- Proximity sensor LTR-553ALS-WA +- 6-Axis IMU BMI270 +- PMIC AXP2101 +- Battery 500mAh 3,7V + +.. figure:: img/m5stack_cores3.webp + :align: center + :alt: M5Stack-CoreS3 + :width: 400 px + + M5Stack CoreS3 module + +Start Application Development +***************************** + +Before powering up your M5Stack CoreS3, please make sure that the board is in good +condition with no obvious signs of damage. + +System requirements +=================== + +Prerequisites +------------- + +Espressif HAL requires WiFi and Bluetooth binary blobs in order work. Run the command +below to retrieve those files. + +.. code-block:: console + + west blobs fetch hal_espressif + +.. note:: + + It is recommended running the command above after :file:`west update`. + +Building & Flashing +------------------- + +Build and flash applications as usual (see :ref:`build_an_application` and +:ref:`application_run` for more details). + +.. zephyr-app-commands:: + :zephyr-app: samples/hello_world + :board: m5stack_cores3/esp32s3/procpu + :goals: build + +The usual ``flash`` target will work with the ``m5stack_cores3`` board +configuration. Here is an example for the :ref:`hello_world` +application. + +.. zephyr-app-commands:: + :zephyr-app: samples/hello_world + :board: m5stack_cores3/esp32s3/procpu + :goals: flash + +The baud rate of 921600bps is set by default. If experiencing issues when flashing, +try using different values by using ``--esp-baud-rate `` option during +``west flash`` (e.g. ``west flash --esp-baud-rate 115200``). + +You can also 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 build vx.x.x-xxx-gxxxxxxxxxxxx *** + Hello World! m5stack_cores3/esp32s3/procpu + + +Debugging +--------- + +ESP32-S3 support on OpenOCD is available upstream as of version 0.12.0. +Download and install OpenOCD from `OpenOCD`_. + +ESP32-S3 has a built-in JTAG circuitry and can be debugged without any additional chip. Only an USB cable connected to the D+/D- pins is necessary. + +Further documentation can be obtained from the SoC vendor in `JTAG debugging for ESP32-S3`_. + +.. _`OpenOCD`: https://github.com/openocd-org/openocd +.. _`JTAG debugging for ESP32-S3`: https://docs.espressif.com/projects/esp-idf/en/latest/esp32s3/api-guides/jtag-debugging/ + + +Related Documents +***************** + +- `M5Stack CoreS3 official docs `_ +- `M5Stack CoreS3 schematic `_ (PDF) + diff --git a/boards/m5stack/m5stack_cores3/m5stack_cores3-pinctrl.dtsi b/boards/m5stack/m5stack_cores3/m5stack_cores3-pinctrl.dtsi new file mode 100644 index 000000000000000..60530f8adc367ed --- /dev/null +++ b/boards/m5stack/m5stack_cores3/m5stack_cores3-pinctrl.dtsi @@ -0,0 +1,63 @@ +/* + * Copyright (c) 2024 Zhang Xingtao + * + * 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; + }; + }; + + twai_default: twai_default { + group1 { + pinmux = , + ; + }; + }; +}; diff --git a/boards/m5stack/m5stack_cores3/m5stack_cores3_appcpu.dts b/boards/m5stack/m5stack_cores3/m5stack_cores3_appcpu.dts new file mode 100644 index 000000000000000..02b85a6934278e5 --- /dev/null +++ b/boards/m5stack/m5stack_cores3/m5stack_cores3_appcpu.dts @@ -0,0 +1,66 @@ +/* + * Copyright (c) 2023 Espressif Systems (Shanghai) Co., Ltd. + * + * SPDX-License-Identifier: Apache-2.0 + */ +/dts-v1/; + +#include + +/ { + model = "M5Stack CoreS3 APPCPU"; + compatible = "espressif,esp32s3"; + + chosen { + zephyr,sram = &sram0; + zephyr,ipc_shm = &shm0; + zephyr,ipc = &ipm0; + }; +}; + +&ipm0 { + status = "okay"; +}; + +&trng0 { + status = "okay"; +}; + +&flash0 { + status = "okay"; + partitions { + compatible = "fixed-partitions"; + #address-cells = <1>; + #size-cells = <1>; + + /* Reserve 60kB for the bootloader */ + boot_partition: partition@1000 { + label = "mcuboot"; + reg = <0x00001000 0x0000F000>; + read-only; + }; + + /* Reserve 1024kB for the application in slot 0 */ + slot0_partition: partition@10000 { + label = "image-0"; + reg = <0x00010000 0x00100000>; + }; + + /* Reserve 1024kB for the application in slot 1 */ + slot1_partition: partition@110000 { + label = "image-1"; + reg = <0x00110000 0x00100000>; + }; + + /* Reserve 256kB for the scratch partition */ + scratch_partition: partition@210000 { + label = "image-scratch"; + reg = <0x00210000 0x00040000>; + }; + + storage_partition: partition@250000 { + label = "storage"; + reg = <0x00250000 0x00006000>; + }; + }; +}; diff --git a/boards/m5stack/m5stack_cores3/m5stack_cores3_appcpu.yaml b/boards/m5stack/m5stack_cores3/m5stack_cores3_appcpu.yaml new file mode 100644 index 000000000000000..19e6b770c68f311 --- /dev/null +++ b/boards/m5stack/m5stack_cores3/m5stack_cores3_appcpu.yaml @@ -0,0 +1,27 @@ +identifier: m5stack_cores3/esp32s3/appcpu +name: M5Stack CoreS3 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: m5stack diff --git a/boards/m5stack/m5stack_cores3/m5stack_cores3_appcpu_defconfig b/boards/m5stack/m5stack_cores3/m5stack_cores3_appcpu_defconfig new file mode 100644 index 000000000000000..9abf2ff0430aba3 --- /dev/null +++ b/boards/m5stack/m5stack_cores3/m5stack_cores3_appcpu_defconfig @@ -0,0 +1,4 @@ +# SPDX-License-Identifier: Apache-2.0 + +CONFIG_MAIN_STACK_SIZE=2048 +CONFIG_CLOCK_CONTROL=y diff --git a/boards/m5stack/m5stack_cores3/m5stack_cores3_procpu.dts b/boards/m5stack/m5stack_cores3/m5stack_cores3_procpu.dts new file mode 100644 index 000000000000000..159dd7f326a027b --- /dev/null +++ b/boards/m5stack/m5stack_cores3/m5stack_cores3_procpu.dts @@ -0,0 +1,230 @@ +/* + * Copyright (c) 2024 Zhang Xingtao + * + * SPDX-License-Identifier: Apache-2.0 + */ + +/dts-v1/; + +#include +#include "m5stack_cores3-pinctrl.dtsi" +#include +#include +#include + +/ { + model = "M5Stack CoreS3 PROCPU"; + compatible = "m5stack,cores3"; + + chosen { + zephyr,sram = &sram0; + zephyr,console = &usb_serial; + zephyr,shell-uart = &usb_serial; + zephyr,flash = &flash0; + zephyr,display = &ili9342c; + zephyr,code-partition = &slot0_partition; + zephyr,bt-hci = &esp32_bt_hci; + }; + + aliases { + i2c-0 = &i2c0; + watchdog0 = &wdt0; + led0 = &led0; + }; + + leds { + compatible = "gpio-leds"; + led0: led_0 { + gpios = <&gpio0 21 GPIO_ACTIVE_LOW>; + label = "BUILTIN LED"; + }; + }; + + mipi_dbi { + compatible = "zephyr,mipi-dbi-spi"; + dc-gpios = <&gpio0 35 GPIO_ACTIVE_HIGH>; + //reset-gpios = <&axp192_gpio 4 (GPIO_OPEN_DRAIN | GPIO_ACTIVE_LOW)>; + spi-dev = <&spi2>; + write-only; + #address-cells = <1>; + #size-cells = <0>; + + ili9342c: ili9342c@0 { + compatible = "ilitek,ili9342c"; + mipi-max-frequency = <30000000>; + mipi-mode = ; + reg = <0>; + vin-supply = <&axp2101_dldo1>; + //pixel-format = ; + pixel-format = ; + display-inversion; + width = <320>; + height = <240>; + rotation = <0>; + }; + }; +}; + +&usb_serial { + status = "okay"; +}; + +&uart0 { + status = "okay"; + current-speed = <115200>; + pinctrl-0 = <&uart0_default>; + pinctrl-names = "default"; +}; + +&i2c0 { + status = "okay"; + clock-frequency = ; + pinctrl-0 = <&i2c0_default>; + pinctrl-names = "default"; + + axp2101_pmic: axp2101@34 { + compatible = "x-powers,axp2101"; + reg = <0x34>; + status = "okay"; + + axp2101_regulator: axp2101_regulator { + compatible = "x-powers,axp2101-regulator"; + status = "okay"; +/* + axp2101_lx1: DCDC1 { + // regulator-init-microvolt = <3350000>; + // regulator-min-microvolt = <150000>; + // regulator-max-microvolt = <3350000>; + // regulator-initial-mode = < 0x0 >; + regulator-name = "DCDC1"; + regulator-boot-on; + regulator-always-on; + status = "okay"; + }; +*/ + axp2101_lx1: DCDC1 { + regulator-name = "DCDC1"; + regulator-min-microvolt = <1500000>; + regulator-max-microvolt = <3400000>; + status = "okay"; + }; + + axp2101_dldo1: LDOD1 { + regulator-name = "LDOD1"; + regulator-init-microvolt = <2800000>; + regulator-min-microvolt = <500000>; + regulator-max-microvolt = <3400000>; + regulator-boot-on; + status = "okay"; + }; + +/* + axp2101_dldo1: LDOD1 { + regulator-name = "LDOD1"; + regulator-init-microvolt = <2800000>; + regulator-min-microvolt = <500000>; + regulator-max-microvolt = <3300000>; + // regulator-initial-mode = < 0x0 >; + status = "okay"; + }; +*/ + }; + }; + + aw9523b: aw9523b@58 { + compatible = "awinic,aw9523b"; + reg = <0x58>; + status = "okay"; + + aw9523b_gpio: aw9523b_gpio { + compatible = "awinic,aw9523b-gpio"; + gpio-controller; + #gpio-cells = <2>; + ngpios = <16>; + status = "okay"; + + lcd_bt: aw9523b_gpio1 { + gpio-hog; + gpios = <1 (GPIO_OPEN_DRAIN | GPIO_ACTIVE_LOW)>; + output-high; + line-name = "lcd_bg"; + }; + }; + }; +}; + +&trng0 { + status = "okay"; +}; + +&spi2 { + #address-cells = <1>; + #size-cells = <0>; + status = "okay"; + pinctrl-0 = <&spim2_default>; + pinctrl-names = "default"; +}; + +&gpio0 { + status = "okay"; +}; + +&gpio1 { + status = "okay"; +}; + +&wdt0 { + status = "okay"; +}; + +&twai { + pinctrl-0 = <&twai_default>; + pinctrl-names = "default"; +}; + +&timer0 { + status = "okay"; +}; + +&timer1 { + status = "okay"; +}; + +&flash0 { + status = "okay"; + partitions { + compatible = "fixed-partitions"; + #address-cells = <1>; + #size-cells = <1>; + + boot_partition: partition@0 { + label = "mcuboot"; + reg = <0x00000000 0x0000F000>; + read-only; + }; + + slot0_partition: partition@10000 { + label = "image-0"; + reg = <0x00010000 0x00100000>; + }; + + slot1_partition: partition@110000 { + label = "image-1"; + reg = <0x00110000 0x00100000>; + }; + + scratch_partition: partition@210000 { + label = "image-scratch"; + reg = <0x00210000 0x00040000>; + }; + + storage_partition: partition@250000 { + label = "storage"; + reg = <0x00250000 0x00006000>; + }; + }; +}; + +&esp32_bt_hci { + status = "okay"; +}; diff --git a/boards/m5stack/m5stack_cores3/m5stack_cores3_procpu.yaml b/boards/m5stack/m5stack_cores3/m5stack_cores3_procpu.yaml new file mode 100644 index 000000000000000..e0e1f9c32cb7d4d --- /dev/null +++ b/boards/m5stack/m5stack_cores3/m5stack_cores3_procpu.yaml @@ -0,0 +1,21 @@ +identifier: m5stack_cores3/esp32s3/procpu +name: M5Stack CoreS3 PROCPU +type: mcu +arch: xtensa +toolchain: + - zephyr +supported: + - dma + - i2c + - spi + - uart + - watchdog +testing: + ignore_tags: + - bluetooth + - gpio + - net + - pinmux + - pwm + - regulator +vendor: m5stack diff --git a/boards/m5stack/m5stack_cores3/m5stack_cores3_procpu_defconfig b/boards/m5stack/m5stack_cores3/m5stack_cores3_procpu_defconfig new file mode 100644 index 000000000000000..6622689e24e9cb4 --- /dev/null +++ b/boards/m5stack/m5stack_cores3/m5stack_cores3_procpu_defconfig @@ -0,0 +1,44 @@ +# SPDX-License-Identifier: Apache-2.0 + + +CONFIG_MAIN_STACK_SIZE=2048 +CONFIG_CONSOLE=y +CONFIG_SERIAL=y +CONFIG_UART_CONSOLE=y +CONFIG_I2C=y +CONFIG_SPI=y +CONFIG_GPIO=y +CONFIG_GPIO_AW9523B=y +CONFIG_REGULATOR=y +CONFIG_REGULATOR_AXP2101=y + +CONFIG_SHELL=y +CONFIG_I2C_SHELL=y +CONFIG_SPI_SHELL=y +CONFIG_GPIO_SHELL=y +CONFIG_REGULATOR_SHELL=y + +CONFIG_LOG=y +CONFIG_LOG_CMDS=y +CONFIG_LOG_BACKEND_UART=y +CONFIG_GPIO_LOG_LEVEL_DBG=y + +CONFIG_MIPI_DBI=y + +CONFIG_LV_Z_MEM_POOL_SIZE=16384 +CONFIG_LV_Z_SHELL=y + +CONFIG_DISPLAY=y +CONFIG_ILI9342C=y +CONFIG_DISPLAY_LOG_LEVEL_ERR=y + +CONFIG_LVGL=y + +CONFIG_LV_MEM_CUSTOM=y +CONFIG_LV_USE_LOG=y +CONFIG_LV_USE_LABEL=y +CONFIG_LV_USE_BTN=y +CONFIG_LV_USE_ARC=y +CONFIG_LV_USE_IMG=y +CONFIG_LV_USE_MONKEY=y +CONFIG_LV_FONT_MONTSERRAT_14=y diff --git a/boards/m5stack/m5stack_cores3/support/openocd.cfg b/boards/m5stack/m5stack_cores3/support/openocd.cfg new file mode 100644 index 000000000000000..2f740b4a36ab1f4 --- /dev/null +++ b/boards/m5stack/m5stack_cores3/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]