From 0bbc1b27c238a2b975e624e1c84b7f5420ea4d0f Mon Sep 17 00:00:00 2001 From: TOKITA Hiroshi Date: Thu, 17 Oct 2024 07:25:48 +0900 Subject: [PATCH 1/2] boards: m5stack: cores3: Add CoreS3 SE variant Add `se` variant to support the low-cost CoreS3 SE. - Add configuration files Add `m5stack_cores3_procpu_se(.dts|.yaml|defconfig)` files. Reorganize dts files to split common parts. - Update .yaml file Add gpio, can, counter, entropy, pwm, and pinmux to the supported feature group. Remove the `ignore_tags:` section. - Update documents Add and modify information about CoreS3 SE. Add more description about sysbuild. Signed-off-by: TOKITA Hiroshi --- boards/m5stack/m5stack_cores3/Kconfig | 3 +- .../m5stack_cores3/Kconfig.m5stack_cores3 | 3 +- boards/m5stack/m5stack_cores3/board.yml | 3 + .../doc/img/m5stack_cores3_se.webp | Bin 0 -> 50522 bytes boards/m5stack/m5stack_cores3/doc/index.rst | 194 ++++++++++++++++-- .../m5stack_cores3/m5stack_cores3_procpu.dts | 54 +---- .../m5stack_cores3/m5stack_cores3_procpu.yaml | 18 +- .../m5stack_cores3_procpu_common.dtsi | 59 ++++++ .../m5stack_cores3_procpu_se.dts | 14 ++ .../m5stack_cores3_procpu_se.yaml | 19 ++ .../m5stack_cores3_procpu_se_defconfig | 7 + 11 files changed, 293 insertions(+), 81 deletions(-) create mode 100644 boards/m5stack/m5stack_cores3/doc/img/m5stack_cores3_se.webp create mode 100644 boards/m5stack/m5stack_cores3/m5stack_cores3_procpu_common.dtsi create mode 100644 boards/m5stack/m5stack_cores3/m5stack_cores3_procpu_se.dts create mode 100644 boards/m5stack/m5stack_cores3/m5stack_cores3_procpu_se.yaml create mode 100644 boards/m5stack/m5stack_cores3/m5stack_cores3_procpu_se_defconfig diff --git a/boards/m5stack/m5stack_cores3/Kconfig b/boards/m5stack/m5stack_cores3/Kconfig index 26f6eed3551af..8cef5ae03edd6 100644 --- a/boards/m5stack/m5stack_cores3/Kconfig +++ b/boards/m5stack/m5stack_cores3/Kconfig @@ -3,5 +3,6 @@ config HEAP_MEM_POOL_ADD_SIZE_BOARD int - default 4096 if BOARD_M5STACK_CORES3_ESP32S3_PROCPU + default 4096 if BOARD_M5STACK_CORES3_ESP32S3_PROCPU || \ + BOARD_M5STACK_CORES3_ESP32S3_PROCPU_SE default 256 if BOARD_M5STACK_CORES3_ESP32S3_APPCPU diff --git a/boards/m5stack/m5stack_cores3/Kconfig.m5stack_cores3 b/boards/m5stack/m5stack_cores3/Kconfig.m5stack_cores3 index 990925a96bb90..59a5912341703 100644 --- a/boards/m5stack/m5stack_cores3/Kconfig.m5stack_cores3 +++ b/boards/m5stack/m5stack_cores3/Kconfig.m5stack_cores3 @@ -5,5 +5,6 @@ config BOARD_M5STACK_CORES3 select SOC_ESP32S3 - select SOC_ESP32S3_PROCPU if BOARD_M5STACK_CORES3_ESP32S3_PROCPU + select SOC_ESP32S3_PROCPU if BOARD_M5STACK_CORES3_ESP32S3_PROCPU || \ + BOARD_M5STACK_CORES3_ESP32S3_PROCPU_SE select SOC_ESP32S3_APPCPU if BOARD_M5STACK_CORES3_ESP32S3_APPCPU diff --git a/boards/m5stack/m5stack_cores3/board.yml b/boards/m5stack/m5stack_cores3/board.yml index 64479891d23d8..765c6b9eba232 100644 --- a/boards/m5stack/m5stack_cores3/board.yml +++ b/boards/m5stack/m5stack_cores3/board.yml @@ -4,3 +4,6 @@ board: vendor: m5stack socs: - name: esp32s3 + variants: + - name: se + cpucluster: procpu diff --git a/boards/m5stack/m5stack_cores3/doc/img/m5stack_cores3_se.webp b/boards/m5stack/m5stack_cores3/doc/img/m5stack_cores3_se.webp new file mode 100644 index 0000000000000000000000000000000000000000..90e4450a8e7ffcecb27d93f4ace0c3e374685b09 GIT binary patch literal 50522 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 Dd^39p literal 0 HcmV?d00001 diff --git a/boards/m5stack/m5stack_cores3/doc/index.rst b/boards/m5stack/m5stack_cores3/doc/index.rst index 4ee0d8461b697..d9025e3f6d8af 100644 --- a/boards/m5stack/m5stack_cores3/doc/index.rst +++ b/boards/m5stack/m5stack_cores3/doc/index.rst @@ -4,25 +4,27 @@ Overview ******** M5Stack CoreS3 is an ESP32-based development board from M5Stack. It is the third generation of the M5Stack Core series. +M5Stack CoreS3 SE is the compact version of CoreS3. It has the same form factor as the original M5Stack, +and some features were reduced from CoreS3. -M5Stack CoreS3 features consist of: +M5Stack CoreS3/CoreS3 SE features consist of: - ESP32-S3 chip (dual-core Xtensa LX7 processor @240MHz, WIFI, OTG and 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.7 V +- Battery 500mAh 3.7 V (Not available for CoreS3 SE) +- Camera 30W pixel GC0308 (Not available for CoreS3 SE) +- Geomagnetic sensor BMM150 (Not available for CoreS3 SE) +- Proximity sensor LTR-553ALS-WA (Not available for CoreS3 SE) +- 6-Axis IMU BMI270 (Not available for CoreS3 SE) Start Application Development ***************************** @@ -48,24 +50,145 @@ below to retrieve those files. It is recommended running the command above after :file:`west update`. Building & Flashing -------------------- +******************* + +Simple boot +=========== + +The board could be loaded using the single binary image, without 2nd stage bootloader. +It is the default option when building the application without additional configuration. + +.. note:: + + Simple boot does not provide any security features nor OTA updates. + +MCUboot bootloader +================== + +User may choose to use MCUboot bootloader instead. In that case the bootloader +must be 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: + +.. tabs:: + + .. group-tab:: M5Stack CoreS3 + + .. zephyr-app-commands:: + :tool: west + :zephyr-app: samples/hello_world + :board: m5stack_cores3/esp32s3/procpu + :goals: build + :west-args: --sysbuild + :compact: + + .. group-tab:: M5Stack CoreS3 SE + + .. zephyr-app-commands:: + :tool: west + :zephyr-app: samples/hello_world + :board: m5stack_cores3/esp32s3/procpu/se + :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: m5stack_cores3/esp32s3/procpu - :goals: build +.. tabs:: + + .. group-tab:: M5Stack CoreS3 + + .. zephyr-app-commands:: + :zephyr-app: samples/hello_world + :board: m5stack_cores3/esp32s3/procpu + :goals: build + + .. group-tab:: M5Stack CoreS3 SE + + .. zephyr-app-commands:: + :zephyr-app: samples/hello_world + :board: m5stack_cores3/esp32s3/procpu/se + :goals: build The usual ``flash`` target will work with the ``m5stack_cores3/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: m5stack_cores3/esp32s3/procpu - :goals: flash +.. tabs:: + + .. group-tab:: M5Stack CoreS3 + + .. zephyr-app-commands:: + :zephyr-app: samples/hello_world + :board: m5stack_cores3/esp32s3/procpu + :goals: flash + + .. group-tab:: M5Stack CoreS3 SE + + .. zephyr-app-commands:: + :zephyr-app: samples/hello_world + :board: m5stack_cores3/esp32s3/procpu/se + :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 @@ -85,9 +208,8 @@ message in the monitor: *** Booting Zephyr OS build vx.x.x-xxx-gxxxxxxxxxxxx *** Hello World! m5stack_cores3/esp32s3/procpu - Debugging ---------- +********* ESP32-S3 support on OpenOCD is available at `OpenOCD ESP32`_. @@ -95,6 +217,42 @@ ESP32-S3 has a built-in JTAG circuitry and can be debugged without any additiona Further documentation can be obtained from the SoC vendor in `JTAG debugging for ESP32-S3`_. +Here is an example for building the :zephyr:code-sample:`hello_world` application. + +.. tabs:: + + .. group-tab:: M5Stack CoreS3 + + .. zephyr-app-commands:: + :zephyr-app: samples/hello_world + :board: m5stack_cores3/esp32s3/procpu + :goals: debug + + .. group-tab:: M5Stack CoreS3 SE + + .. zephyr-app-commands:: + :zephyr-app: samples/hello_world + :board: m5stack_cores3/esp32s3/procpu/se + :goals: debug + +You can debug an application in the usual way. Here is an example for the :zephyr:code-sample:`hello_world` application. + +.. tabs:: + + .. group-tab:: M5Stack CoreS3 + + .. zephyr-app-commands:: + :zephyr-app: samples/hello_world + :board: m5stack_cores3/esp32s3/procpu + :goals: debug + + .. group-tab:: M5Stack CoreS3 SE + + .. zephyr-app-commands:: + :zephyr-app: samples/hello_world + :board: m5stack_cores3/esp32s3/procpu/se + :goals: debug + References ********** @@ -102,5 +260,7 @@ References .. _`M5Stack CoreS3 Documentation`: http://docs.m5stack.com/en/core/CoreS3 .. _`M5Stack CoreS3 Schematic`: https://m5stack.oss-cn-shenzhen.aliyuncs.com/resource/docs/datasheet/core/K128%20CoreS3/Sch_M5_CoreS3_v1.0.pdf +.. _`M5Stack CoreS3 SE Documentation`: https://docs.m5stack.com/en/core/M5CoreS3%20SE +.. _`M5Stack CoreS3 SE Schematic`: https://m5stack.oss-cn-shenzhen.aliyuncs.com/resource/docs/products/core/M5CORES3%20SE/M5_CoreS3SE.pdf .. _`OpenOCD ESP32`: https://github.com/espressif/openocd-esp32/releases .. _`JTAG debugging for ESP32-S3`: https://docs.espressif.com/projects/esp-idf/en/latest/esp32s3/api-guides/jtag-debugging/ diff --git a/boards/m5stack/m5stack_cores3/m5stack_cores3_procpu.dts b/boards/m5stack/m5stack_cores3/m5stack_cores3_procpu.dts index 2042ca2422a49..1def598cdec76 100644 --- a/boards/m5stack/m5stack_cores3/m5stack_cores3_procpu.dts +++ b/boards/m5stack/m5stack_cores3/m5stack_cores3_procpu.dts @@ -1,53 +1,24 @@ /* - * Copyright (c) 2024 Zhang Xingtao + * Copyright (c) 2024 TOKITA Hiroshi * * SPDX-License-Identifier: Apache-2.0 */ /dts-v1/; -#include -#include -#include "m5stack_cores3-pinctrl.dtsi" +#include "m5stack_cores3_procpu_common.dtsi" / { model = "M5Stack CoreS3 PROCPU"; compatible = "m5stack,cores3"; - chosen { - zephyr,sram = &sram0; - zephyr,console = &usb_serial; - zephyr,shell-uart = &usb_serial; - zephyr,flash = &flash0; - zephyr,code-partition = &slot0_partition; - zephyr,bt-hci = &esp32_bt_hci; - }; - aliases { - i2c-0 = &i2c0; - watchdog0 = &wdt0; accel0 = &bmi270; magn0 = &bmm150; }; }; -&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"; - bmi270: bmi270@69 { compatible = "bosch,bmi270"; reg = <0x69>; @@ -59,24 +30,3 @@ reg = <0x10>; }; }; - -&spi2 { - #address-cells = <1>; - #size-cells = <0>; - status = "okay"; - pinctrl-0 = <&spim2_default>; - pinctrl-names = "default"; -}; - -&wdt0 { - status = "okay"; -}; - -&psram0 { - reg = <0x3c000000 DT_SIZE_M(8)>; - status = "okay"; -}; - -&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 index e0e1f9c32cb7d..1db3de005d229 100644 --- a/boards/m5stack/m5stack_cores3/m5stack_cores3_procpu.yaml +++ b/boards/m5stack/m5stack_cores3/m5stack_cores3_procpu.yaml @@ -5,17 +5,15 @@ arch: xtensa toolchain: - zephyr supported: - - dma + - gpio + - uart - i2c - spi - - uart + - can + - counter - watchdog -testing: - ignore_tags: - - bluetooth - - gpio - - net - - pinmux - - pwm - - regulator + - entropy + - pwm + - dma + - pinmux vendor: m5stack diff --git a/boards/m5stack/m5stack_cores3/m5stack_cores3_procpu_common.dtsi b/boards/m5stack/m5stack_cores3/m5stack_cores3_procpu_common.dtsi new file mode 100644 index 0000000000000..70d2c7d768cd5 --- /dev/null +++ b/boards/m5stack/m5stack_cores3/m5stack_cores3_procpu_common.dtsi @@ -0,0 +1,59 @@ +/* + * Copyright (c) 2024 Zhang Xingtao + * + * SPDX-License-Identifier: Apache-2.0 + */ + +#include +#include +#include "m5stack_cores3-pinctrl.dtsi" + +/ { + chosen { + zephyr,sram = &sram0; + zephyr,console = &usb_serial; + zephyr,shell-uart = &usb_serial; + zephyr,flash = &flash0; + zephyr,code-partition = &slot0_partition; + zephyr,bt-hci = &esp32_bt_hci; + }; + + aliases { + i2c-0 = &i2c0; + watchdog0 = &wdt0; + }; +}; + +&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"; +}; + +&spi2 { + #address-cells = <1>; + #size-cells = <0>; + status = "okay"; + pinctrl-0 = <&spim2_default>; + pinctrl-names = "default"; +}; + +&wdt0 { + status = "okay"; +}; + +&esp32_bt_hci { + status = "okay"; +}; diff --git a/boards/m5stack/m5stack_cores3/m5stack_cores3_procpu_se.dts b/boards/m5stack/m5stack_cores3/m5stack_cores3_procpu_se.dts new file mode 100644 index 0000000000000..93cdeda68cbcb --- /dev/null +++ b/boards/m5stack/m5stack_cores3/m5stack_cores3_procpu_se.dts @@ -0,0 +1,14 @@ +/* + * Copyright (c) 2024 TOKITA Hiroshi + * + * SPDX-License-Identifier: Apache-2.0 + */ + +/dts-v1/; + +#include "m5stack_cores3_procpu_common.dtsi" + +/ { + model = "M5Stack CoreS3 SE PROCPU"; + compatible = "m5stack,cores3-se"; +}; diff --git a/boards/m5stack/m5stack_cores3/m5stack_cores3_procpu_se.yaml b/boards/m5stack/m5stack_cores3/m5stack_cores3_procpu_se.yaml new file mode 100644 index 0000000000000..0427aa4f12089 --- /dev/null +++ b/boards/m5stack/m5stack_cores3/m5stack_cores3_procpu_se.yaml @@ -0,0 +1,19 @@ +identifier: m5stack_cores3/esp32s3/procpu/se +name: M5Stack CoreS3 SE PROCPU +type: mcu +arch: xtensa +toolchain: + - zephyr +supported: + - gpio + - uart + - i2c + - spi + - can + - counter + - watchdog + - entropy + - pwm + - dma + - pinmux +vendor: m5stack diff --git a/boards/m5stack/m5stack_cores3/m5stack_cores3_procpu_se_defconfig b/boards/m5stack/m5stack_cores3/m5stack_cores3_procpu_se_defconfig new file mode 100644 index 0000000000000..6539bd42e5947 --- /dev/null +++ b/boards/m5stack/m5stack_cores3/m5stack_cores3_procpu_se_defconfig @@ -0,0 +1,7 @@ +# SPDX-License-Identifier: Apache-2.0 + +CONFIG_MAIN_STACK_SIZE=2048 +CONFIG_CONSOLE=y +CONFIG_SERIAL=y +CONFIG_UART_CONSOLE=y +CONFIG_GPIO=y From 7011fa3e724c61790f609f096f2b02f20355050a Mon Sep 17 00:00:00 2001 From: TOKITA Hiroshi Date: Tue, 5 Nov 2024 00:16:08 +0900 Subject: [PATCH 2/2] boards: m5stack: cores3: Add mbus and grove connector Adding M-Bus and Grove connector and also add configuration for related peripherals. Signed-off-by: TOKITA Hiroshi --- .../m5stack_cores3/grove_connectors.dtsi | 18 ++++++++ .../m5stack_cores3-pinctrl.dtsi | 39 ++++++++++++++++ .../m5stack_cores3_procpu_common.dtsi | 46 +++++++++++++++++++ .../m5stack_mbus_connectors.dtsi | 34 ++++++++++++++ 4 files changed, 137 insertions(+) create mode 100644 boards/m5stack/m5stack_cores3/grove_connectors.dtsi create mode 100644 boards/m5stack/m5stack_cores3/m5stack_mbus_connectors.dtsi diff --git a/boards/m5stack/m5stack_cores3/grove_connectors.dtsi b/boards/m5stack/m5stack_cores3/grove_connectors.dtsi new file mode 100644 index 0000000000000..4139a48b86732 --- /dev/null +++ b/boards/m5stack/m5stack_cores3/grove_connectors.dtsi @@ -0,0 +1,18 @@ +/* + * Copyright (c) 2024 TOKITA Hiroshi + * SPDX-License-Identifier: Apache-2.0 + */ + +/ { + grove_header: grove_header { + compatible = "grove-header"; + #gpio-cells = <2>; + gpio-map-mask = <0xffffffff 0xffffffc0>; + gpio-map-pass-thru = <0 0x3f>; + gpio-map = <0 0 &gpio0 1 0>, + <1 0 &gpio0 2 0>; + }; +}; + +grove_i2c: &i2c1 {}; +grove_uart: &uart2 {}; diff --git a/boards/m5stack/m5stack_cores3/m5stack_cores3-pinctrl.dtsi b/boards/m5stack/m5stack_cores3/m5stack_cores3-pinctrl.dtsi index a759fbc3c7794..78f4c841147a8 100644 --- a/boards/m5stack/m5stack_cores3/m5stack_cores3-pinctrl.dtsi +++ b/boards/m5stack/m5stack_cores3/m5stack_cores3-pinctrl.dtsi @@ -20,6 +20,28 @@ }; }; + uart1_default: uart1_default { + group1 { + pinmux = ; + output-high; + }; + group2 { + pinmux = ; + bias-pull-up; + }; + }; + + uart2_default: uart2_default { + group1 { + pinmux = ; + output-high; + }; + group2 { + pinmux = ; + bias-pull-up; + }; + }; + spim2_default: spim2_default { group1 { pinmux = , @@ -40,4 +62,21 @@ output-high; }; }; + + i2c1_default: i2c1_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_procpu_common.dtsi b/boards/m5stack/m5stack_cores3/m5stack_cores3_procpu_common.dtsi index 70d2c7d768cd5..474da0931435a 100644 --- a/boards/m5stack/m5stack_cores3/m5stack_cores3_procpu_common.dtsi +++ b/boards/m5stack/m5stack_cores3/m5stack_cores3_procpu_common.dtsi @@ -7,6 +7,8 @@ #include #include #include "m5stack_cores3-pinctrl.dtsi" +#include "m5stack_mbus_connectors.dtsi" +#include "grove_connectors.dtsi" / { chosen { @@ -19,7 +21,11 @@ }; aliases { + uart-0 = &uart0; + uart-1 = &uart1; + uart-2 = &uart2; i2c-0 = &i2c0; + i2c-1 = &i2c1; watchdog0 = &wdt0; }; }; @@ -35,6 +41,28 @@ pinctrl-names = "default"; }; +&uart1 { + status = "okay"; + current-speed = <115200>; + pinctrl-0 = <&uart1_default>; + pinctrl-names = "default"; +}; + +&uart2 { + status = "disabled"; + current-speed = <115200>; + pinctrl-0 = <&uart2_default>; + pinctrl-names = "default"; +}; + +&gpio0 { + status = "okay"; +}; + +&gpio1 { + status = "okay"; +}; + &i2c0 { status = "okay"; clock-frequency = ; @@ -42,7 +70,15 @@ pinctrl-names = "default"; }; +&i2c1 { + status = "okay"; + clock-frequency = ; + pinctrl-0 = <&i2c1_default>; + pinctrl-names = "default"; +}; + &spi2 { + status = "okay"; #address-cells = <1>; #size-cells = <0>; status = "okay"; @@ -50,10 +86,20 @@ pinctrl-names = "default"; }; +&twai { + status = "disabled"; + pinctrl-0 = <&twai_default>; + pinctrl-names = "default"; +}; + &wdt0 { status = "okay"; }; +&trng0 { + status = "okay"; +}; + &esp32_bt_hci { status = "okay"; }; diff --git a/boards/m5stack/m5stack_cores3/m5stack_mbus_connectors.dtsi b/boards/m5stack/m5stack_cores3/m5stack_mbus_connectors.dtsi new file mode 100644 index 0000000000000..c91d0b372d0b4 --- /dev/null +++ b/boards/m5stack/m5stack_cores3/m5stack_mbus_connectors.dtsi @@ -0,0 +1,34 @@ +/* + * Copyright (c) 2024 TOKITA Hiroshi + * SPDX-License-Identifier: Apache-2.0 + */ + +/ { + m5stack_mbus_header: m5stack_mbus_connector { + compatible = "m5stack,mbus-header"; + #gpio-cells = <2>; + gpio-map-mask = <0xffffffff 0xffffffc0>; + gpio-map-pass-thru = <0 0x3f>; + gpio-map = /* GND */ <1 0 &gpio 10 0>, /* ADC */ + /* GND */ <3 0 &gpio 8 0>, /* PB_IN */ + /* GND */ /* RESET/EN */ + /* MOSI */ <6 0 &gpio 37 0>, <7 0 &gpio 5 0>, /* GPIO */ + /* MISO */ <8 0 &gpio 35 0>, <9 0 &gpio 9 0>, /* PB_OUT */ + /* SCK */ <10 0 &gpio 36 0>, /* 3.3V */ + /* RXD0 */ <12 0 &gpio 44 0>, <13 0 &gpio 43 0>, /* TXD0 */ + /* PC_RX */ <14 0 &gpio 18 0>, <15 0 &gpio 17 0>, /* PC_TX */ + /* intSDA */ <16 0 &gpio 12 0>, <17 0 &gpio 11 0>, /* intSCL */ + /* PA_SDA */ <18 0 &gpio 2 0>, <19 0 &gpio 1 0>, /* PA_SCL */ + /* GPIO */ <20 0 &gpio 6 0>, <21 0 &gpio 7 0>, /* GPIO */ + /* I2S_DOUT */ <22 0 &gpio 13 0>, <23 0 &gpio 0 0>, /* I2S_LRCK */ + /* NC */ <25 0 &gpio 3 0>; /* I2S_DIN */ + /* NC */ /* 5V */ + /* NC */ /* BAT */ + }; +}; + +m5stack_mbus_i2c0: &i2c0 {}; +m5stack_mbus_i2c1: &i2c1 {}; +m5stack_mbus_uart0: &uart0 {}; +m5stack_mbus_uart1: &uart1 {}; +m5stack_mbus_spi: &spi2 {};