CST816Sの概要
項目 | 値 | 出典 |
|---|---|---|
I2Cアドレス(7ビット) | | Espressif esp_lcd_touch_cst816s、Linuxデバイスツリーの例 |
タッチポイント数 | 1(1本の指) | EspressifドライバーおよびREADME |
タッチデータ | | Linux hynitron-cst816xドライバー |
チップIDレジスタ | | Espressifドライバー |
Linux互換 | | Linuxデバイスツリーバインディング |
タッチの読み取り
Linuxドライバーはレジスタ0x01から6バイトを読み取ります:
レジスタ | 内容 |
|---|---|
| ジェスチャーコード |
| 指の数(0または1) |
| X、ビッグエンディアン、下位12ビット |
| Y、ビッグエンディアン、下位12ビット |
Linuxドライバーが処理するジェスチャーコード:0x01 上スワイプ、0x02 下スワイプ、0x03 左スワイプ、0x04 右スワイプ、0x0C 長押し。
CST816Sはタッチするまで応答しない
EspressifのREADMEは、このチップが「タッチ検出などのイベントが発生した後にのみI2Cコマンドに応答する。初期化時に応答を期待しないこと」と警告しています。そのため、起動時のI2Cスキャナーでは0x15で何も見つからないことが多く、ESPHomeには起動時のチップID読み取りをスキップするskip_probeオプションが用意されています。一部のチップではIDの読み取りが初期化失敗の原因になりうることにも言及しています。スキャン中は画面にタッチするか、IDチェックをスキップしてください。
リセットと割り込み
- Linuxドライバーはリセットを50 ms間駆動した後、解放して100 ms待機します。Espressifのドライバーはそれぞれの段階で200 ms待機します。
- EspressifのドライバーではINTは任意です(ポーリングも可能)。Linuxドライバーは割り込みを要求し、割り込みがなければプローブに失敗します。
ファントム(ゴースト)タッチ
ある開発者が、Waveshare ESP32-S3-Touch-LCD-2上のCST816Dが、誰もタッチしていないのにタッチを報告するテストスケッチを公開しています。2枚のボードで、Waveshare純正のデモコードを使用した状態で、主に垂直中心線に沿って発生しました。修正は確認されていません。ゴーストタッチが発生した場合は、まずベンダーのデモを実行してハードウェアとコードを切り分け、その後ソフトウェアでのタッチフィルタリングを行う前に、ボードの電源とグランディングを確認してください。
関連するタッチコントローラー
ESPHomeのcst816コンポーネントは、CST716、CST816D、CST816S、CST816T、CST820、CST826、CST836に対応しています。4″〜7″のマルチタッチパネルについてはGT911を、1.28″のラウンドディスプレイについてはGC9A01 + ESP32ガイドをご覧ください。
ガイドと比較
CST816S トラブルシューティングと FAQ
CST816SがI2Cで検出されないのはなぜですか?
CST816Sはタッチなどのイベントが発生するまでI2Cに応答しないため、起動時のI2Cスキャンでは0x15が見つからないのが通常です。スキャン中に画面をタッチするか、先にリセットを解除してください。ESPHomeではskip_probe: trueを設定します。チップによってはIDの読み出しにより初期化が失敗することがあるとEspressifも注意喚起しています。
CST816Sはマルチタッチに対応していますか?
いいえ、対応していません。1本の指の検出のみを報告し、Espressifのドライバーもポイント数を1に制限しています。ただしジェスチャー(上下左右のスライド、ロングプレス)は報告できます。マルチタッチが必要な場合はGT911クラスのコントローラーを使用してください。
CST816でゴーストタッチ(誤検出)が発生するのはなぜですか?
Waveshare ESP32-S3-Touch-LCD-2に搭載されたCST816Dが、ベンダー純正のデモコードの状態で画面の垂直中心線上にタッチを誤報告したという公開事例があり、確定した修正方法はまだありません。まずベンダーのデモを実行して自作コードを切り分け、その上でソフトウェアによるタッチフィルタリングの前に、電源とグランドを確認してください。