From d24518ef881e868ae6d0c674131132c8ea57ad7d Mon Sep 17 00:00:00 2001 From: Martin Kiepfer Date: Thu, 4 Jan 2024 13:56:15 +0100 Subject: [PATCH 1/2] shield: m5stack_m5dial: Add support for m5dial shield M5Dial is an IoT development board based on m5stack_stamps3. It features an LCD screen, touch interface, a rotary button, an RTC and a piezo beeper. Signed-off-by: Martin Kiepfer --- .../shields/m5stack_m5dial/Kconfig.defconfig | 22 ++ boards/shields/m5stack_m5dial/Kconfig.shield | 7 + .../doc/img/m5stack_m5dial.webp | Bin 0 -> 54522 bytes boards/shields/m5stack_m5dial/doc/index.rst | 206 ++++++++++++++++++ .../m5stack_m5dial/m5stack_m5dial.overlay | 139 ++++++++++++ 5 files changed, 374 insertions(+) create mode 100644 boards/shields/m5stack_m5dial/Kconfig.defconfig create mode 100644 boards/shields/m5stack_m5dial/Kconfig.shield create mode 100644 boards/shields/m5stack_m5dial/doc/img/m5stack_m5dial.webp create mode 100644 boards/shields/m5stack_m5dial/doc/index.rst create mode 100644 boards/shields/m5stack_m5dial/m5stack_m5dial.overlay diff --git a/boards/shields/m5stack_m5dial/Kconfig.defconfig b/boards/shields/m5stack_m5dial/Kconfig.defconfig new file mode 100644 index 0000000000000..c573e57a6d04b --- /dev/null +++ b/boards/shields/m5stack_m5dial/Kconfig.defconfig @@ -0,0 +1,22 @@ +# M5Stack M5Dial shield configuration +# Copyright (c) 2023 Martin Kiepfer +# SPDX-License-Identifier: Apache-2.0 + +if SHIELD_M5STACK_M5DIAL + +config INPUT + default y + +config INPUT_FT5336_INTERRUPT + default y if INPUT + +config LV_COLOR_16_SWAP + default y if LVGL + +config PWM + default y + +config REGULATOR + default y + +endif # SHIELD_M5STACK_M5DIAL diff --git a/boards/shields/m5stack_m5dial/Kconfig.shield b/boards/shields/m5stack_m5dial/Kconfig.shield new file mode 100644 index 0000000000000..c3bd37610b975 --- /dev/null +++ b/boards/shields/m5stack_m5dial/Kconfig.shield @@ -0,0 +1,7 @@ +# M5Stack M5Dial board configuration + +# Copyright (c) 2023 Martin Kiepfer +# SPDX-License-Identifier: Apache-2.0 + +config SHIELD_M5STACK_M5DIAL + def_bool $(shields_list_contains,m5stack_m5dial) diff --git a/boards/shields/m5stack_m5dial/doc/img/m5stack_m5dial.webp b/boards/shields/m5stack_m5dial/doc/img/m5stack_m5dial.webp new file mode 100644 index 0000000000000000000000000000000000000000..2c40f5c6f97801dc6d8492a3c1c8eec7a1c13e80 GIT binary patch literal 54522 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 IzV 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 literal 0 HcmV?d00001 diff --git a/boards/shields/m5stack_m5dial/doc/index.rst b/boards/shields/m5stack_m5dial/doc/index.rst new file mode 100644 index 0000000000000..5af0991ca4292 --- /dev/null +++ b/boards/shields/m5stack_m5dial/doc/index.rst @@ -0,0 +1,206 @@ +.. _m5stack_m5dial: + +M5Stack M5Dial +############## + +Overview +******** + +M5Dial is an ESP32-based development board from M5Stack. +The device features an embedded ``m5stack_stamps3`` module that runs +the ESP32-S3 microcontroller. + +.. figure:: img/m5stack_m5dial.webp + :align: center + :alt: M5Stack M5Dial + + M5Stack M5Dial + +Key components +============== + +The Zephyr ``m5stack_m5dial`` shield configuration supports the following key components: + ++------------------------+-----------------------------------------------------------------------+------------+ +| Key Component | Description | Status | ++========================+=======================================================================+============+ +| LCD IPS round display | 240x240 pixel display features GC9A01A display controller interfaced | supported | +| (240x240 pixel) | via SPI | | ++------------------------+-----------------------------------------------------------------------+------------+ +| WS1850S NFC | Wisesun NFC reader IC interfaced via I2C. | todo | ++------------------------+-----------------------------------------------------------------------+------------+ +| RTC8563 RTC | Real-Time clock interfaced via I2C. | supported | ++------------------------+-----------------------------------------------------------------------+------------+ +| Rotary encoder | Round rotary button (``INPUT_KEY_LEFT`` and ``INPUT_KEY_RIGHT`` | supported | +| | events). | | ++------------------------+-----------------------------------------------------------------------+------------+ +| Reset button | Directly interconnected to EN signal of StampS3 module. | supported | ++------------------------+-----------------------------------------------------------------------+------------+ +| User-button | Custom user button. | supported | ++------------------------+-----------------------------------------------------------------------+------------+ +| Builtin Beeper/Buzzer | PWM controller beeper, properly operating between 200Hz and 2kHz | supported | ++------------------------+-----------------------------------------------------------------------+------------+ + +M5Stack M5Dial features 2 external grove ports (A and B) + +Grove header A +--------------- + +Functionality is accessible via ``grove_headerA`` + ++-----+----------------------------+---------------------------+ +| Pin | ``m5stack_stamps3_header`` | Function | ++=====+============================+===========================+ +| 1 | 16 | I2C-SCL (``groveA_i2c```) | ++-----+----------------------------+---------------------------+ +| 2 | 14 | I2C-SDL (``groveA_i2c``) | ++-----+----------------------------+---------------------------+ +| 3 | | 5V-Output | ++-----+----------------------------+---------------------------+ +| 4 | | GND | ++-----+----------------------------+---------------------------+ + + +Grove header B +--------------- + +Functionality is accessible via ``grove_headerB`` + ++-----+----------------------------+-----------+ +| Pin | ``m5stack_stamps3_header`` | Function | ++=====+============================+===========+ +| 1 | 0 | In | ++-----+----------------------------+-----------+ +| 2 | 1 | Out | ++-----+----------------------------+-----------+ +| 3 | | 5V-Output | ++-----+----------------------------+-----------+ +| 4 | | GND | ++-----+----------------------------+-----------+ + + +Battery-Support +--------------- + +Although ``m5stack_m5dial`` does not natively come with a battery, it features +support for connecting a battery to it. The battery connector is underneath the +StampS3 module. + +To keep the module running on the battery only, without an external supply, an +internal power-hold signal must be activated. This can be controlled via regulator +``battery_hold``, which is activated by default. + +Pin Mapping +=========== + +M5Dial is utilizing the :dtcompatible:`m5stack,stamps3-header` header. +Following table shows the pin mapping, the interconnection to the +M5Stack-StampS3 module and its according function. + ++----------+--------------------------------+---------+-----------+-----------------------------------+ +| StampS3 | stamps3-header | M5Dial | M5Dial | Description | +| pin | | pin | signal | | ++----------+--------------------------------+---------+-----------+-----------------------------------+ +| M1-1 | ``m5stack_stamps3_header:0`` | J2.1 | GI | Grove-B In | ++----------+--------------------------------+---------+-----------+-----------------------------------+ +| M1-2 | ``m5stack_stamps3_header:1`` | J2-2 | GO | Grove-B Out | ++----------+--------------------------------+---------+-----------+-----------------------------------+ +| M1-3 | ``m5stack_stamps3_clkout0:2`` | | Beep | Beeper | ++----------+--------------------------------+---------+-----------+-----------------------------------+ +| M1-4 | ``m5stack_stamps3_header:3`` | | LCD_RS | LCD Cmd/Data | ++----------+--------------------------------+---------+-----------+-----------------------------------+ +| M1-5 | ``m5stack_stamps3_spilcd`` | | LCD_MOSI | LCD SPI-MOSI | ++----------+--------------------------------+---------+-----------+-----------------------------------+ +| M1-6 | ``m5stack_stamps3_spilcd`` | | LCD_SCK | LCD SPI-CLK | ++----------+--------------------------------+---------+-----------+-----------------------------------+ +| M1-7 | ``m5stack_stamps3_spilcd`` | | LCD_CS | LCD SPI-CS | ++----------+--------------------------------+---------+-----------+-----------------------------------+ +| M1-8 | ``m5stack_stamps3_header:7`` | | LCD_RESET | LCD Reset (active-low) | ++----------+--------------------------------+---------+-----------+-----------------------------------+ +| M1-9 | ``m5stack_stamps3_clkout0:0`` | | LCD_BL | LCD Backlight | +| | | | | (PWM controlled MOSFET) | ++----------+--------------------------------+---------+-----------+-----------------------------------+ +| M1-10 | ``m5stack_stamps3_header:9`` | | RC522_INT | NFC Interrupt | ++----------+--------------------------------+---------+-----------+-----------------------------------+ +| M1-11 | **GND** | Ground | ++----------+--------------------------------+---------+-----------+-----------------------------------+ +| M1-12 | ``m5stack_stamps3_i2c1`` | | TP_SDA | Internal I2C-SDA | +| | | | | (Touch, NFC and RTC) | ++----------+--------------------------------+---------+-----------+-----------------------------------+ +| M1-13 | **VIN_5V** | 5V Input voltage | +| | | (via USB-C connector of StampS3) | ++----------+--------------------------------+---------+-----------+-----------------------------------+ +| M1-14 | ``m5stack_stamps3_i2c1`` | | TP_SCL | Internal I2C-SCL | +| | | | | (Touch, NFC and RTC) | ++----------+--------------------------------+---------+-----------+-----------------------------------+ +| M1-15 | ``m5stack_stamps3_i2c0`` | J3-2 | SDA | Grove-A I2C-SDA | ++----------+--------------------------------+---------+-----------+-----------------------------------+ +| M1-16 | ``m5stack_stamps3_header:15`` | | TP_INT | Touch Interrupt | ++----------+--------------------------------+---------+-----------+-----------------------------------+ +| M1-17 | ``m5stack_stamps3_i2c0`` | J3-1 | SCL | Grove-A I2C-SCL | ++----------+--------------------------------+---------+-----------+-----------------------------------+ +| M1-18 | **GND** | Ground | ++----------+--------------------------------+---------+-----------+-----------------------------------+ +| M1-19 | | | MTCK | | ++----------+--------------------------------+---------+-----------+-----------------------------------+ +| M1-20 | | | Boot | | ++----------+--------------------------------+---------+-----------+-----------------------------------+ +| M1-21 | ``m5stack_stamps3_header:20`` | | B | Rotary left key | ++----------+--------------------------------+---------+-----------+-----------------------------------+ +| M1-22 | | | EN | Enable signal for 3V3 | ++----------+--------------------------------+---------+-----------+-----------------------------------+ +| M1-23 | ``m5stack_stamps3_header:22`` | | A | Rotary right key | ++----------+--------------------------------+---------+-----------+-----------------------------------+ +| M1-24 | | | RX | | ++----------+--------------------------------+---------+-----------+-----------------------------------+ +| M1-25 | ``m5stack_stamps3_header:24`` | | WAKE | User-Button | ++----------+--------------------------------+---------+-----------+-----------------------------------+ +| M1-26 | | | TX | | ++----------+--------------------------------+---------+-----------+-----------------------------------+ +| M1-27 | ``m5stack_stamps3_header:26`` | | HOLD | Battery-hold signal | ++----------+--------------------------------+---------+-----------+-----------------------------------+ +| M1-28 | **3_3V** | 3.3V main output | +| | | (via StampS3 DCDC) | ++----------+--------------------------------+---------+-----------+-----------------------------------+ + +Start Application Development +***************************** + +Before powering up your M5Stack M5Dial, please make sure that the board is in good +condition with no obvious signs of damage. + +Building & Flashing +=================== + +M5Dial is based on ``m5stack_stamps3``. +You may build and flash applications for M5Stack StampS3 as usual (see +:ref:`build_an_application` and :ref:`application_run` for more details), and +include this shield as an overlay. + +A good first example to test is :zephyr:code-sample:`lvgl`: +.. zephyr-app-commands:: + :zephyr-app: samples/subsys/display/lvgl + :board: m5stack_stamps3 + :shield: m5stack_m5dial + :goals: build 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``). + +.. note:: + Because there currently is missing automatic PWM control or an external backlight + driver, the display backlight be default is disabled. You may need to enable it + in your application or by using the PWM shell. + +Debugging +--------- + +M5Stack M5Dial debugging is not supported due to pinout limitations. + +Related Documents +***************** + +- `M5Stack M5Dial schematic `_ +- `M5Stack M5Dial documentation `_ +- `ESP32S3 Datasheet `_ diff --git a/boards/shields/m5stack_m5dial/m5stack_m5dial.overlay b/boards/shields/m5stack_m5dial/m5stack_m5dial.overlay new file mode 100644 index 0000000000000..25996698c6075 --- /dev/null +++ b/boards/shields/m5stack_m5dial/m5stack_m5dial.overlay @@ -0,0 +1,139 @@ +/* + * Copyright (c) 2023 Martin Kiepfer + * + * SPDX-License-Identifier: Apache-2.0 + */ +#include +#include +#include +#include + +/ { + chosen { + zephyr,display = &gc9x01x_lcd; + zephyr,display-backlight = &backlight_pwm; + zephyr,rtc = &pfc8563_rtc; + }; + + aliases { + sw0 = &user_button_1; /* overwrite StampS3 user button */ + }; + + gpio_keys { + compatible = "gpio-keys"; + + user_button_1: button_1 { + label = "User button 1"; + gpios = <&m5stack_stamps3_header 24 GPIO_ACTIVE_LOW>; + zephyr,code = ; + }; + + rotary_left: rotary_left { + label = "rotary left"; + gpios = <&m5stack_stamps3_header 20 GPIO_ACTIVE_LOW>; + zephyr,code = ; + }; + + rotary_right: rotary_right { + label = "rotary right"; + gpios = <&m5stack_stamps3_header 22 GPIO_ACTIVE_LOW>; + zephyr,code = ; + }; + }; + + mipi_dbi_gc9x01x_240x240 { + compatible = "zephyr,mipi-dbi-spi"; + spi-dev = <&m5stack_stamps3_spilcd>; + dc-gpios = <&m5stack_stamps3_header 3 GPIO_ACTIVE_HIGH>; + reset-gpios = <&m5stack_stamps3_header 7 GPIO_ACTIVE_LOW>; + write-only; + #address-cells = <1>; + #size-cells = <0>; + + gc9x01x_lcd: gc9x01x_lcd@0 { + compatible = "galaxycore,gc9x01x"; + reg = <0>; + mipi-max-frequency = <100000000>; + display-inversion; + pixel-format = ; + + width = <240>; + height = <240>; + + mipi-mode = ; + }; + }; + + backlight_pwm: backlight_pwm { + status = "okay"; + compatible = "pwm-clock"; + #clock-cells = <1>; + pwms = <&m5stack_stamps3_clkout0 0 PWM_MSEC(5) PWM_POLARITY_NORMAL>; + }; + + beeper_pwm: beeper_pwm { + status = "okay"; + compatible = "pwm-clock"; + #clock-cells = <1>; + pwms = <&m5stack_stamps3_clkout0 2 PWM_USEC(1500) PWM_POLARITY_NORMAL>; + }; + + battery_hold { + compatible = "regulator-fixed"; + regulator-name = "battery_hold"; + enable-gpios = <&m5stack_stamps3_header 26 GPIO_ACTIVE_HIGH>; + regulator-boot-on; + }; + + grove_headerA: grove_headerA { + compatible = "grove-header"; + #gpio-cells = <2>; + gpio-map-mask = <0xffffffff 0xffffffc0>; + gpio-map-pass-thru = <0 0x3f>; + gpio-map = <0 0 &m5stack_stamps3_header 16 0>, + <1 0 &m5stack_stamps3_header 14 0>; + }; + + grove_headerB: grove_headerB { + compatible = "grove-header"; + #gpio-cells = <2>; + gpio-map-mask = <0xffffffff 0xffffffc0>; + gpio-map-pass-thru = <0 0x3f>; + gpio-map = <0 0 &m5stack_stamps3_header 0 0>, + <1 0 &m5stack_stamps3_header 1 0>; + }; + + lvgl_pointer { + compatible = "zephyr,lvgl-pointer-input"; + input = <&ft5267_touch>; + swap-xy; + }; + +}; +&m5stack_stamps3_clkout0 { + status = "okay"; + +}; + +&m5stack_stamps3_i2c1 { + status = "okay"; + + ft5267_touch: ft3267@38 { + compatible = "focaltech,ft5336"; + reg = <0x38>; + int-gpios = <&m5stack_stamps3_header 15 0>; + }; + + pfc8563_rtc: pfc8563@51 { + compatible = "nxp,pcf8563"; + reg = <0x51>; + status = "okay"; + }; +}; + +&m5stack_stamps3_spilcd { + status = "okay"; + dma-enabled; +}; + +groveA_i2c: &m5stack_stamps3_i2c0 {}; From 759ff448347981c8782180ca4387dd5a4182da8e Mon Sep 17 00:00:00 2001 From: Martin Kiepfer Date: Thu, 4 Jan 2024 13:59:59 +0100 Subject: [PATCH 2/2] demo: lvgl: Increase main stack size for m5stack_stamps3 board Default main-stack size of m5stack_stamps3 is not sufficient. Signed-off-by: Martin Kiepfer --- boards/shields/m5stack_m5dial/doc/index.rst | 1 + samples/subsys/display/lvgl/boards/m5stack_stamps3_procpu.conf | 3 +++ 2 files changed, 4 insertions(+) create mode 100644 samples/subsys/display/lvgl/boards/m5stack_stamps3_procpu.conf diff --git a/boards/shields/m5stack_m5dial/doc/index.rst b/boards/shields/m5stack_m5dial/doc/index.rst index 5af0991ca4292..37ab70612573b 100644 --- a/boards/shields/m5stack_m5dial/doc/index.rst +++ b/boards/shields/m5stack_m5dial/doc/index.rst @@ -178,6 +178,7 @@ You may build and flash applications for M5Stack StampS3 as usual (see include this shield as an overlay. A good first example to test is :zephyr:code-sample:`lvgl`: + .. zephyr-app-commands:: :zephyr-app: samples/subsys/display/lvgl :board: m5stack_stamps3 diff --git a/samples/subsys/display/lvgl/boards/m5stack_stamps3_procpu.conf b/samples/subsys/display/lvgl/boards/m5stack_stamps3_procpu.conf new file mode 100644 index 0000000000000..1ac2b1c55c9b7 --- /dev/null +++ b/samples/subsys/display/lvgl/boards/m5stack_stamps3_procpu.conf @@ -0,0 +1,3 @@ +# SPDX-License-Identifier: Apache-2.0 + +CONFIG_MAIN_STACK_SIZE=4096