Skip to content

Adding Support for new board: LilyGO T-Deck Max (e-paper) — lilygo-tdeckmax #539

Description

@Crazypedia

Summary

I'd like to contribute support for the LilyGO T-Deck Max (the e-paper T-Deck variant — vendor repo Xinyuan-LilyGO/T-Deck-MAX, ESP32-S3 / 16 MB / 8 MB PSRAM). It's been brought up on real hardware against the current Devices/ devicetree HAL and boots cleanly to the launcher with display, keyboard, touch, and power working. Per the CONTRIBUTING.md, I'm opening this to discuss before sending a PR.

Hardware

Function Part Bus / notes
MCU ESP32-S3, 16 MB flash, 8 MB PSRAM
Display GDEQ031T10 e-paper, 240×320, 1bpp SPI2 (shared)
Touch Hynitron CST66xx @ 0x1A I2C0 (vendor docs mislabel it CST328)
Keyboard TCA8418 4×10 matrix @ 0x34 I2C0, backlight + INT
Power SY6970 charger @ 0x6A + BQ27220 fuel gauge @ 0x55 I2C0
IO expander XL9555 gates touch/keyboard reset + LoRa power
Storage microSD (SpiSdCardDevice) shares SPI2 with EPD
Radio Semtech SX1262 LoRa shares SPI2 (planned as a separate follow-up)

Status (verified on hardware)

Working & confirmed on-device:

  • Boot to launcher, stable (no panic/WDT)
  • E-paper display incl. windowed partial refresh + ghost-gate (ported from GxEPD2 waveforms), mono theme
  • CST66xx touch (navigation + tap-to-activate)
  • TCA8418 keyboard (nav + typing)
  • Power: battery metrics (BQ27220) + power-off / ship-mode (SY6970)

WIP / not yet solid:

  • SD card mount on the shared SPI bus (intermittent)
  • Intermittent crash shortly after Wi-Fi connect (still diagnosing; appears core/network, not board)

Possible upstream bug found during bring-up (happy to file separately): leaving the Files app can hang the loader — files::View::deinit calls lv_obj_remove_event_cb on an already-freed dir_entry_list, spinning loader_dispatch until the task WDT fires. Reproducible direction; not board-specific.

Plan

To keep PRs single-purpose, I'll contribute incrementally:

  1. Base board first — display + keyboard + touch (the minimum to boot and interact).
  2. Power, then the SX1262 radio, then remaining fixes — each as its own follow-up PR.

This introduces one new reusable driver, plus one promoted to shared use:

  • Drivers/GDEQ031T10 — generic UC8253-based e-paper driver with partial refresh.
  • Drivers/CST66xx — the Hynitron CST66xx touch protocol (4-byte register addressing) as a shared component, so other boards using this part can reuse it.

Device id lilygo-tdeckmax, display name "T-Deck Max" (deliberately distinct from the color "T-Deck"/"T-Deck Pro").

The work is on a branch and builds against current main (ESP-IDF 5.5.2). Open to any convention preferences before I open the base-board PR.

Metadata

Metadata

Assignees

No one assigned

    Labels

    deviceRelated to a Tactilty device implementation (new or existing)enhancementNew feature or request

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions