Skip to content
Display Engineer
Touch controller · Hynitron

CST328: setup & troubleshooting

CST328 is a Hynitron capacitive touch controller with an I2C interface at 0x1A and 16-bit register addresses. LilyGO says it is out of production and later boards ship a CST3530, which needs a different driver.

DEDisplay Engineer Applications Team · Display application engineersUpdated Nov 11, 2026
ManufacturerHynitron
TypeTouch controller
InterfacesI2C
Max resolution5 touch points

CST328 at a glance

Item

Value

Source

Interface

I2C, 16-bit register addresses

ESPHome driver, RS-Key

I2C address (7-bit)

0x1A

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 0xD000, 7 bytes for one point

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

0xD000, 7 bytes

0xD0070000, 9 bytes

Acknowledge after read

Write sync byte 0xAB

Write 0xD00002AB

Address on T-Deck Pro

0x1A

0x1A

Address on RP2350-Touch-LCD-2.8

0x1A (V1)

0x58 (V2)

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 a 0xCA 0xCA marker 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 cst328 platform. Its docs name the Waveshare ESP32-S3 Touch LCD 2.8 board. It has no CST3530 platform.
  • ESP-IDF: Waveshare publishes esp_lcd_touch_cst328 in the Espressif component registry. Its compatibility table lists only the CST328.
  • Rust: the cst328 crate on crates.io, and the RS-Key firmware for both chips.
  • Hynitron's own driver: LilyGO links Hynitron's hyn_driver source 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

  1. LilyGO T-Deck Pro README (CST328 to CST3530, address, init, interrupts)
  2. LilyGO T-Deck Pro issue #37: CST3530 replaces CST328
  3. RS-Key issue #139: RP2350-Touch-LCD-2.8 V1 CST328 0x1A vs V2 CST3530 0x58
  4. RS-Key PR #138: CST3530 driver (report 0xD0070000, ack 0xD00002AB)
  5. reticulum-tdeck issue #19: T-Deck Pro v1.1 touch not working on some units
  6. reticulum-tdeck v1.13.0-rc1: CST3530 probe order
  7. meshcore-firmware issue #2108: T-Deck Pro V1.1 touch probe (cst66xx vs cst3xx reads)
  8. Meshtastic PR #11952: touch chip at 0x1A misdetected as DS2482
  9. ESPHome CST328 touchscreen documentation
  10. ESPHome cst328_touchscreen.cpp source
  11. Waveshare ESP32-S3-Touch-LCD-2.8 wiki
  12. Waveshare esp_lcd_touch_cst328 component

Not sure which display fits your design?

Send us your size, interface and host processor. A display engineer replies within 12 hours with 2–3 options, datasheets and init code. Samples from 1 pc.