CST816S em resumo
Item | Valor | Fonte |
|---|---|---|
Endereço I2C (7 bits) | | Espressif esp_lcd_touch_cst816s; exemplo de device-tree do Linux |
Pontos de toque | 1 (dedo único) | Driver da Espressif e README |
Dados de toque | Começa em | Driver hynitron-cst816x do Linux |
Registrador de Chip ID | | Driver da Espressif |
Compatível com Linux | | Binding de device-tree do Linux |
Lendo um toque
O driver do Linux lê 6 bytes a partir do registrador 0x01:
Registrador | Conteúdo |
|---|---|
| Código do gesto |
| Número de dedos (0 ou 1) |
| X, big-endian, 12 bits baixos |
| Y, big-endian, 12 bits baixos |
Códigos de gesto tratados pelo driver do Linux: 0x01 deslizar para cima, 0x02 deslizar para baixo, 0x03 deslizar para a esquerda, 0x04 deslizar para a direita, 0x0C pressionamento longo.
O CST816S não responde até você tocá-lo
O README da Espressif adverte que o chip "só responde a comandos I2C após um evento, como a detecção de um toque. Não espere que ele responda na inicialização." É por isso que um scanner I2C executado no boot frequentemente não encontra nada em 0x15, e por isso o ESPHome tem uma opção skip_probe que pula a leitura do chip ID na inicialização. A Espressif acrescenta que, em alguns chips, ler o ID pode fazer a inicialização falhar. Toque na tela enquanto faz a varredura, ou pule a verificação do ID.
Reset e interrupção
- O driver do Linux aciona o reset por 50 ms, o libera e aguarda 100 ms. O driver da Espressif aguarda 200 ms de cada lado.
- O INT é opcional no driver da Espressif (ele pode fazer polling). O driver do Linux solicita uma interrupção e falha no probe sem uma.
Toques fantasma
Um desenvolvedor publicou um sketch de teste mostrando o CST816D no Waveshare ESP32-S3-Touch-LCD-2 reportando toques que ninguém fez, principalmente ao longo da linha central vertical, em duas placas e com o próprio código de demonstração da Waveshare. Nenhuma correção foi confirmada. Se você ver toques fantasma, primeiro execute a demo do fabricante para separar o hardware do seu código, depois verifique a alimentação e o aterramento da placa antes de filtrar toques em software.
Controladores relacionados
O componente cst816 do ESPHome lista CST716, CST816D, CST816S, CST816T, CST820, CST826 e CST836. Para painéis multi-touch de 4″ a 7″, veja GT911; para displays redondos de 1.28″, consulte nosso guia de GC9A01 + ESP32.
Guias e comparativos
CST816S: solução de problemas e perguntas frequentes
Por que meu CST816S não é detectado no I2C?
O CST816S só responde ao I2C após um evento como um toque, portanto uma varredura na inicialização normalmente não encontra nada em 0x15. Toque na tela durante a varredura, libere o reset primeiro e, no ESPHome, configure skip_probe: true. A Espressif observa que, em alguns chips, ler o ID pode fazer a inicialização falhar.
O CST816S suporta multi-touch?
Não. Ele reporta um único dedo; o driver da Espressif limita a contagem de pontos a 1. Ele reporta gestos: deslizar para cima, para baixo, para a esquerda e para a direita, além de toque longo. Para multi-touch, use um controlador da classe GT911.
Por que meu CST816 reporta toques fantasma?
Um relatório público mostra um CST816D no Waveshare ESP32-S3-Touch-LCD-2 reportando toques ao longo da linha central vertical com o próprio código de demonstração do fornecedor, e nenhuma correção foi confirmada. Execute a demo do fornecedor para descartar um problema no seu código e, em seguida, verifique a alimentação e o aterramento antes de filtrar os toques em software.
Fontes
- Espressif ESP-BSP: driver esp_lcd_touch_cst816s
- Espressif ESP-BSP: README do esp_lcd_touch_cst816s
- Kernel Linux: drivers/input/touchscreen/hynitron-cst816x.c
- Kernel Linux: binding de device tree hynitron,cst816x
- ESPHome: touchscreen CST816
- seanuleh: sketch de teste de toque fantasma para Waveshare ESP32-S3-Touch-LCD-2 (CST816D)