CST328 at a glance
Item | Value | Source |
|---|---|---|
Interface | I2C, 16-bit register addresses | ESPHome driver, RS-Key |
I2C address (7-bit) | | LilyGO T-Deck Pro pin table, RS-Key |
Touch points | 5 on the Waveshare ESP32-S3-Touch-LCD-2.8 | Waveshare wiki |
Touch report | Register | RS-Key |
Interrupt | Supported | Waveshare wiki, ESPHome (falling edge) |
Status | Out of production, per LilyGO | LilyGO T-Deck Pro README |
We did not use a Hynitron datasheet for these figures. The copy we found online is a reseller upload, so the values above come from driver source and board documentation.
The CST3530 swap
LilyGO's T-Deck Pro README says the CST328 supplier "has discontinued production", so newer T-Deck Pro v1.1 boards use a CST3530. It adds that "both chips use the same device address", so the firmware has to identify the chip during initialization. LilyGO uses Hynitron's cst66xx routine for the CST3530 and cst3xx for the CST328.
Waveshare's RP2350-Touch-LCD-2.8 made the same change. The RS-Key project documents V1 with a CST328 at 0x1A and V2 with a CST3530 at 0x58. On the T-Deck Pro the address does not change; on this board it does.
| CST328 | CST3530 |
|---|---|---|
Register addressing | 2 bytes | 4-byte command words |
Touch report | | |
Acknowledge after read | Write sync byte | Write |
Address on T-Deck Pro | | |
Address on RP2350-Touch-LCD-2.8 | | |
Idle behaviour | Not documented in the sources we used | Sleeps automatically; LilyGO recommends interrupts over polling |
The CST3530 columns come from RS-Key's merged driver, which its author tested on a V2 board, and from LilyGO's README.
How the swap shows up
Both projects that hit this reported the same thing: the firmware runs and the display draws, but no tap registers. The reticulum-tdeck issue says some T-Deck Pro v1.1 units worked and others did not, which fits a change between production batches rather than a wiring fault.
Two more traps:
- An I2C scan does not identify the chip. On the T-Deck Pro both chips answer at
0x1A. The reticulum-tdeck authors probe for the CST3530 first, because a CST3530 "happily acknowledges CST328 register reads". They also say this code had not yet run on a CST3530 board. A meshcore-firmware bench test on a T-Deck Pro V1.1 shows the same thing: the CST328-style read was acknowledged but returned no chip type and no resolution, while the CST3530-style read returned a valid block with a0xCA 0xCAmarker and the panel's 240×320 resolution. - Other drivers can claim
0x1A. An open Meshtastic pull request reports that its I2C scan took the T-Deck Pro touch chip for a DS2482-800 bridge, because a status-register test happened to match.
This is a common pattern with small touch controllers: the part number on the board stays the same while the chip changes. If you build in volume, ask your display supplier which touch IC is fitted, and to tell you before it changes. Our EOL and PCN glossary explains what a change notice should contain.
Bring-up with ESPHome
ESPHome's cst328 platform needs I2C configured and takes optional interrupt_pin and reset_pin. Its setup does the following:
- Pulses reset low for 5 ms, then waits.
- Reads the firmware CRC and expects
0xCACA. On any other value it marks the component failed. - Reads the chip type, project ID, firmware revision and resolution, then switches the chip to normal mode.
The CRC check is the first place to look if ESPHome reports the touchscreen failed. ESPHome uses CST328 reads with 2-byte register addresses, and in the meshcore-firmware bench test that kind of read returned nothing useful from a CST3530. So on a board with a CST3530, expect this check to fail. That is our inference: we have not run ESPHome on a CST3530 board.
Driver support
- ESPHome: the
cst328platform. Its docs name the Waveshare ESP32-S3 Touch LCD 2.8 board. It has no CST3530 platform. - ESP-IDF: Waveshare publishes
esp_lcd_touch_cst328in the Espressif component registry. Its compatibility table lists only the CST328. - Rust: the
cst328crate on crates.io, and the RS-Key firmware for both chips. - Hynitron's own driver: LilyGO links Hynitron's
hyn_driversource for both chips.
Related controllers
For one-finger touch on round displays, see CST816S, also from Hynitron. For larger panels with up to 5 points, see GT911.
CST328 troubleshooting & FAQ
Touch worked on my first batch of boards but is dead on the new ones. Why?
Check whether the touch chip changed. LilyGO says newer T-Deck Pro v1.1 batches use a CST3530 instead of the CST328, at the same address 0x1A, and Waveshare’s RP2350-Touch-LCD-2.8 V2 also moved to a CST3530. Projects with a CST328-only driver reported the same symptom: the display works and no tap registers. An I2C scan cannot tell the two chips apart on the T-Deck Pro, so read the chip type or probe the CST3530 protocol first.
What is the CST328 I2C address?
LilyGO’s T-Deck Pro pin table gives 0x1A, and the RS-Key project lists 0x1A (7-bit) for the CST328 on the Waveshare RP2350-Touch-LCD-2.8 V1. Do not assume a CST3530 is at the same address: it is 0x1A on the T-Deck Pro but 0x58 on the RP2350-Touch-LCD-2.8 V2, per RS-Key.
Can one driver support both CST328 and CST3530?
Yes, if it detects the chip. LilyGO says the model “must be identified during initialization” and uses separate init routines. The reticulum-tdeck project probes for the CST3530 first, because a CST3530 also acknowledges CST328 register reads; its authors say this had not yet run on a CST3530 board. The RS-Key project instead picks the chip at build time.
Sources
- LilyGO T-Deck Pro README (CST328 to CST3530, address, init, interrupts)
- LilyGO T-Deck Pro issue #37: CST3530 replaces CST328
- RS-Key issue #139: RP2350-Touch-LCD-2.8 V1 CST328 0x1A vs V2 CST3530 0x58
- RS-Key PR #138: CST3530 driver (report 0xD0070000, ack 0xD00002AB)
- reticulum-tdeck issue #19: T-Deck Pro v1.1 touch not working on some units
- reticulum-tdeck v1.13.0-rc1: CST3530 probe order
- meshcore-firmware issue #2108: T-Deck Pro V1.1 touch probe (cst66xx vs cst3xx reads)
- Meshtastic PR #11952: touch chip at 0x1A misdetected as DS2482
- ESPHome CST328 touchscreen documentation
- ESPHome cst328_touchscreen.cpp source
- Waveshare ESP32-S3-Touch-LCD-2.8 wiki
- Waveshare esp_lcd_touch_cst328 component