CST328 вкратце
Параметр | Значение | Источник |
|---|---|---|
Интерфейс | I2C, 16-битные адреса регистров | Драйвер ESPHome, RS-Key |
Адрес I2C (7 бит) | | Таблица пинов LilyGO T-Deck Pro, RS-Key |
Количество точек касания | 5 на плате Waveshare ESP32-S3-Touch-LCD-2.8 | Вики Waveshare |
Отчёт о касании | Регистр | 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-байтные командные слова |
Отчёт о касании | | |
Подтверждение после чтения | Запись байта синхронизации | Запись |
Адрес на T-Deck Pro | | |
Адрес на RP2350-Touch-LCD-2.8 | | |
Поведение в режиме ожидания | В использованных нами источниках не описано | Автоматически уходит в сон; 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 вместо этого выбирает чип на этапе сборки.
Источники
- README LilyGO T-Deck Pro (замена CST328 на CST3530, адрес, инициализация, прерывания)
- LilyGO T-Deck Pro, issue #37: CST3530 заменяет CST328
- RS-Key, issue #139: RP2350-Touch-LCD-2.8 V1 — CST328 0x1A против V2 — CST3530 0x58
- RS-Key, PR #138: драйвер CST3530 (отчёт 0xD0070000, подтверждение 0xD00002AB)
- reticulum-tdeck, issue #19: на части устройств T-Deck Pro v1.1 не работает сенсор
- reticulum-tdeck v1.13.0-rc1: порядок опроса CST3530
- meshcore-firmware, issue #2108: опрос сенсора на T-Deck Pro V1.1 (чтение cst66xx против cst3xx)
- Meshtastic, PR #11952: сенсорный чип на 0x1A ошибочно определялся как DS2482
- Документация ESPHome по CST328 touchscreen
- Исходный код ESPHome cst328_touchscreen.cpp
- Wiki Waveshare ESP32-S3-Touch-LCD-2.8
- Компонент Waveshare esp_lcd_touch_cst328