CST816S вкратце
Параметр | Значение | Источник |
|---|---|---|
I2C-адрес (7-битный) | | Espressif esp_lcd_touch_cst816s; пример device-tree для Linux |
Количество точек касания | 1 (один палец) | Драйвер и README Espressif |
Данные касания | Начинаются с | Драйвер Linux hynitron-cst816x |
Регистр Chip ID | | Драйвер Espressif |
compatible в Linux | | Binding device-tree для Linux |
Чтение касания
Драйвер Linux считывает 6 байтов из регистра 0x01:
Регистр | Содержимое |
|---|---|
| Код жеста |
| Число пальцев (0 или 1) |
| X, big-endian, младшие 12 бит |
| Y, big-endian, младшие 12 бит |
Коды жестов, обрабатываемые драйвером Linux: 0x01 свайп вверх, 0x02 свайп вниз, 0x03 свайп влево, 0x04 свайп вправо, 0x0C долгое нажатие.
CST816S не отвечает, пока к нему не прикоснуться
В README Espressif предупреждают, что чип "отвечает на I2C-команды только после события, например обнаружения касания. Не ожидайте ответа при инициализации." Поэтому I2C-сканер при загрузке часто ничего не находит по адресу 0x15, и именно поэтому в ESPHome есть опция skip_probe, пропускающая чтение Chip ID при старте. В Espressif также отмечают, что на некоторых чипах чтение ID может привести к сбою инициализации. Касайтесь экрана во время сканирования или пропустите проверку ID.
Сброс и прерывание
- Драйвер Linux удерживает сброс 50 мс, отпускает его и ждёт 100 мс. Драйвер Espressif ждёт 200 мс с каждой стороны.
- В драйвере Espressif вывод INT необязателен (возможен опрос). Драйвер Linux запрашивает прерывание и не проходит пробированиe без него.
Фантомные (ложные) касания
Один разработчик опубликовал тестовый скетч, показывающий, что CST816D на плате Waveshare ESP32-S3-Touch-LCD-2 сообщает о касаниях, которых никто не делал, — в основном вдоль вертикальной центральной линии, на двух платах и с собственным демо-кодом Waveshare. Подтверждённого исправления нет. Если вы столкнулись с фантомными касаниями, сначала запустите демо производителя, чтобы отделить проблему оборудования от вашего кода, затем проверьте питание и заземление платы и только потом фильтруйте касания программно.
Связанные контроллеры
Компонент cst816 в ESPHome поддерживает CST716, CST816D, CST816S, CST816T, CST820, CST826 и CST836. Для мультитач-панелей 4″–7″ см. GT911; для круглых дисплеев 1.28″ см. наше руководство по GC9A01 + ESP32.
Руководства и сравнения
CST816S: устранение неисправностей и FAQ
Почему мой CST816S не определяется на шине I2C?
CST816S отвечает по I2C только после события, например касания, поэтому сканирование шины при загрузке обычно ничего не находит по адресу 0x15. Коснитесь экрана во время сканирования, предварительно снимите сброс, а в ESPHome задайте skip_probe: true. Espressif отмечает, что на некоторых чипах чтение ID может привести к сбою инициализации.
Поддерживает ли CST816S мультитач?
Нет. Контроллер сообщает об одном пальце; драйвер Espressif ограничивает количество точек значением 1. При этом он распознаёт жесты: скольжение вверх, вниз, влево и вправо, а также долгое нажатие. Для мультитача используйте контроллер класса GT911.
Почему мой CST816 выдаёт фантомные касания?
Известен один публичный случай: CST816D на плате Waveshare ESP32-S3-Touch-LCD-2 сообщал о касаниях вдоль вертикальной центральной линии даже на штатном демо-коде производителя, и подтверждённого исправления нет. Запустите демо производителя, чтобы исключить ошибку в вашем коде, затем проверьте питание и заземление, прежде чем фильтровать касания программно.
Источники
- Espressif ESP-BSP: драйвер esp_lcd_touch_cst816s
- Espressif ESP-BSP: README драйвера esp_lcd_touch_cst816s
- Ядро Linux: drivers/input/touchscreen/hynitron-cst816x.c
- Ядро Linux: привязка device-tree hynitron,cst816x
- ESPHome: сенсорная панель CST816
- seanuleh: тестовый скетч фантомных касаний для Waveshare ESP32-S3-Touch-LCD-2 (CST816D)