Перейти к содержимому
Display Engineer
Контроллер сенсора · Hynitron

CST328: настройка и устранение неполадок

CST328 — ёмкостный сенсорный контроллер Hynitron с интерфейсом I2C по адресу 0x1A и 16-битными адресами регистров. По данным LilyGO, он снят с производства, и более поздние платы комплектуются контроллером CST3530, для которого требуется другой драйвер.

DEDisplay Engineer Applications Team · Инженеры по применению дисплеевОбновлено 11 нояб. 2026 г.
ПроизводительHynitron
ТипКонтроллер сенсора
ИнтерфейсыI2C
Макс. разрешение5 touch points

CST328 вкратце

Параметр

Значение

Источник

Интерфейс

I2C, 16-битные адреса регистров

Драйвер ESPHome, RS-Key

Адрес I2C (7 бит)

0x1A

Таблица пинов LilyGO T-Deck Pro, RS-Key

Количество точек касания

5 на плате Waveshare ESP32-S3-Touch-LCD-2.8

Вики Waveshare

Отчёт о касании

Регистр 0xD000, 7 байт на одну точку

RS-Key

Прерывание

Поддерживается

Вики Waveshare, ESPHome (спадающий фронт)

Статус

Снят с производства, по данным LilyGO

README LilyGO T-Deck Pro

Официальный даташит Hynitron при подготовке этих данных не использовался: найденная в сети копия представляет собой выгрузку от реселлера, поэтому приведённые выше значения взяты из исходного кода драйверов и документации к платам.

Замена на CST3530

В README LilyGO T-Deck Pro сказано, что поставщик CST328 "прекратил производство", поэтому на новых платах T-Deck Pro v1.1 устанавливается CST3530. Там же отмечается, что "оба чипа используют один и тот же адрес устройства", поэтому прошивке необходимо определять чип при инициализации. Для CST3530 LilyGO использует подпрограмму cst66xx от Hynitron, а для CST328 — cst3xx.

На плате Waveshare RP2350-Touch-LCD-2.8 произведена та же замена. В проекте RS-Key задокументирована версия V1 с CST328 по адресу 0x1A и версия V2 с CST3530 по адресу 0x58. На T-Deck Pro адрес не меняется, а на этой плате меняется.

CST328

CST3530

Адресация регистров

2 байта

4-байтные командные слова

Отчёт о касании

0xD000, 7 байт

0xD0070000, 9 байт

Подтверждение после чтения

Запись байта синхронизации 0xAB

Запись 0xD00002AB

Адрес на T-Deck Pro

0x1A

0x1A

Адрес на RP2350-Touch-LCD-2.8

0x1A (V1)

0x58 (V2)

Поведение в режиме ожидания

В использованных нами источниках не описано

Автоматически уходит в сон; LilyGO рекомендует прерывания вместо опроса

Данные о CST3530 взяты из объединённого драйвера RS-Key, который его автор тестировал на плате V2, и из README LilyGO.

Как проявляется подмена контроллера

Оба проекта, столкнувшиеся с этой проблемой, сообщали об одном и том же: прошивка работает, дисплей отображает картинку, но касания не регистрируются. В issue проекта reticulum-tdeck отмечается, что на одних экземплярах T-Deck Pro v1.1 всё работало, а на других — нет, что указывает на изменение между производственными партиями, а не на ошибку монтажа.

Ещё две ловушки:

  • Скан шины I2C не идентифицирует чип. На T-Deck Pro оба чипа отвечают по адресу 0x1A. Авторы reticulum-tdeck сначала опрашивают CST3530, потому что CST3530 «без возражений подтверждает чтение регистров CST328». Они также отмечают, что этот код ещё не запускался на плате с CST3530. Стендовый тест в meshcore-firmware на T-Deck Pro V1.1 показывает то же самое: чтение в стиле CST328 было подтверждено, но не вернуло ни типа чипа, ни разрешения, тогда как чтение в стиле CST3530 вернуло корректный блок с маркером 0xCA 0xCA и разрешением панели 240×320.
  • Другие драйверы могут принять 0x1A за свой чип. В открытом pull request проекта Meshtastic сообщается, что скан шины I2C принял тач-контроллер T-Deck Pro за мост DS2482-800, поскольку случайно совпала проверка регистра состояния.

Это типичная ситуация с небольшими тач-контроллерами: маркировка на плате остаётся прежней, а чип меняется. Если вы выпускаете продукцию серийно, уточните у поставщика дисплеев, какой тач-контроллер установлен, и попросите предупреждать о его замене. Наш глоссарий EOL и PCN объясняет, что должно содержаться в уведомлении об изменении.

Запуск с ESPHome

Платформа cst328 в ESPHome требует настройки I2C и принимает необязательные параметры interrupt_pin и reset_pin. При инициализации она выполняет следующее:

  • Подаёт низкий уровень на вывод сброса на 5 мс, затем ждёт.
  • Считывает CRC прошивки и ожидает значение 0xCACA. При любом другом значении компонент помечается как сбойный.
  • Считывает тип чипа, идентификатор проекта, ревизию прошивки и разрешение, затем переводит чип в нормальный режим.

Проверку CRC стоит проверить в первую очередь, если ESPHome сообщает о сбое тачскрина. ESPHome использует чтения в стиле CST328 с 2-байтовыми адресами регистров, а в стендовом тесте meshcore-firmware такое чтение с CST3530 не вернуло ничего полезного. Поэтому на плате с CST3530 ожидайте, что эта проверка завершится сбоем. Это наше предположение: мы не запускали ESPHome на плате с CST3530.

Поддержка драйверов

  • ESPHome: платформа cst328. В её документации упоминается плата Waveshare ESP32-S3 Touch LCD 2.8. Отдельной платформы для CST3530 нет.
  • ESP-IDF: Waveshare публикует esp_lcd_touch_cst328 в реестре компонентов Espressif. В таблице совместимости указан только CST328.
  • Rust: крейт cst328 на crates.io, а также прошивка RS-Key, поддерживающая оба чипа.
  • Собственный драйвер Hynitron: LilyGO ссылается на исходный код hyn_driver от Hynitron для обоих чипов.

Смежные контроллеры

Об одноточечном таче на круглых дисплеях читайте в разделе CST816S, тоже от Hynitron. О более крупных панелях с поддержкой до 5 точек — GT911.

CST328: устранение неисправностей и FAQ

Тач работал на первой партии плат, но не работает на новых. Почему?

Проверьте, не изменился ли тач-контроллер. LilyGO сообщает, что в новых партиях T-Deck Pro v1.1 вместо CST328 установлен CST3530 по тому же адресу 0x1A, а Waveshare в RP2350-Touch-LCD-2.8 V2 также перешла на CST3530. Проекты с драйвером только под CST328 сообщали о том же симптоме: дисплей работает, а касания не регистрируются. Скан шины I2C на T-Deck Pro не различает эти два чипа, поэтому считайте тип чипа или сначала опросите по протоколу CST3530.

Какой I2C-адрес у CST328?

В таблице распиновки T-Deck Pro от LilyGO указан 0x1A, а в проекте RS-Key для CST328 на Waveshare RP2350-Touch-LCD-2.8 V1 указан 0x1A (7-битный). Не считайте, что CST3530 находится по тому же адресу: согласно RS-Key, на T-Deck Pro это 0x1A, но на RP2350-Touch-LCD-2.8 V2 — 0x58.

Может ли один драйвер поддерживать и CST328, и CST3530?

Да, если драйвер определяет чип. LilyGO указывает, что модель «должна быть идентифицирована при инициализации», и использует отдельные процедуры инициализации. Проект reticulum-tdeck сначала опрашивает CST3530, поскольку CST3530 также подтверждает чтение регистров CST328; его авторы отмечают, что этот код ещё не запускался на плате с CST3530. Проект RS-Key вместо этого выбирает чип на этапе сборки.

Источники

  1. README LilyGO T-Deck Pro (замена CST328 на CST3530, адрес, инициализация, прерывания)
  2. LilyGO T-Deck Pro, issue #37: CST3530 заменяет CST328
  3. RS-Key, issue #139: RP2350-Touch-LCD-2.8 V1 — CST328 0x1A против V2 — CST3530 0x58
  4. RS-Key, PR #138: драйвер CST3530 (отчёт 0xD0070000, подтверждение 0xD00002AB)
  5. reticulum-tdeck, issue #19: на части устройств T-Deck Pro v1.1 не работает сенсор
  6. reticulum-tdeck v1.13.0-rc1: порядок опроса CST3530
  7. meshcore-firmware, issue #2108: опрос сенсора на T-Deck Pro V1.1 (чтение cst66xx против cst3xx)
  8. Meshtastic, PR #11952: сенсорный чип на 0x1A ошибочно определялся как DS2482
  9. Документация ESPHome по CST328 touchscreen
  10. Исходный код ESPHome cst328_touchscreen.cpp
  11. Wiki Waveshare ESP32-S3-Touch-LCD-2.8
  12. Компонент Waveshare esp_lcd_touch_cst328

Не знаете, какой дисплей подойдёт вашему проекту?

Пришлите размер, интерфейс и хост-процессор. Инженер по дисплеям в течение 12 часов ответит с 2–3 вариантами, даташитами и кодом инициализации. Образцы от 1 шт.