CST328の概要
項目 | 値 | 出典 |
|---|---|---|
インターフェース | I2C、16ビットレジスタアドレス | ESPHomeドライバ、RS-Key |
I2Cアドレス(7ビット) | | LilyGO T-Deck Pro ピンテーブル、RS-Key |
タッチポイント数 | Waveshare ESP32-S3-Touch-LCD-2.8 では5点 | Waveshare wiki |
タッチレポート | レジスタ | RS-Key |
割り込み | 対応 | Waveshare wiki、ESPHome(立ち下がりエッジ) |
ステータス | LilyGOによると生産終了 | LilyGO T-Deck Pro README |
これらの数値にはHynitronのデータシートを使用していません。オンラインで見つかったコピーは販売代理店によるアップロードであったため、上記の値はドライバのソースコードおよびボードのドキュメントに基づいています。
CST3530への変更
LilyGOのT-Deck Pro READMEによると、CST328の供給元は「生産を終了」しており、そのため新しいT-Deck Pro v1.1ボードではCST3530が使用されています。さらに「両チップは同じデバイスアドレスを使用する」と記載されており、ファームウェアは初期化時にチップを識別する必要があります。LilyGOはCST3530にHynitronの cst66xx ルーチンを、CST328に cst3xx を使用しています。
WaveshareのRP2350-Touch-LCD-2.8でも同じ変更が行われました。RS-Keyプロジェクトでは、V1はCST328(アドレス 0x1A)、V2はCST3530(アドレス 0x58)であることが記録されています。T-Deck Proではアドレスは変わりませんが、このボードでは変わります。
| CST328 | CST3530 |
|---|---|---|
レジスタアドレッシング | 2バイト | 4バイトコマンドワード |
タッチレポート | | |
読み出し後のACK | 同期バイト | |
T-Deck Proでのアドレス | | |
RP2350-Touch-LCD-2.8 でのアドレス | | |
アイドル時の動作 | 参照した資料には記載がありません | 自動的にスリープします。LilyGO はポーリングよりも割り込みの使用を推奨しています |
CST3530 に関する記述は、作者が V2 ボードでテストした RS-Key のマージ済みドライバーと、LilyGO の README に基づいています。
チップの入れ替わりで現れる症状
この問題に遭遇した両プロジェクトとも、同じ現象を報告しています。ファームウェアは動作しディスプレイも描画されるのに、タップがまったく検知されないというものです。reticulum-tdeck のイシューによると、T-Deck Pro v1.1 の個体によって動作するものとしないものがあり、これは配線不良というよりも生産ロット間の変更に合致します。
さらに注意すべき落とし穴が 2 つあります。
- I2C スキャンではチップを特定できません。 T-Deck Pro では両チップとも
0x1Aで応答します。reticulum-tdeck の作者らは CST3530 を先にプローブしています。CST3530 が「CST328 のレジスタ読み出しを普通に ACK する」ためです。また、このコードは CST3530 ボード上ではまだ実行されていないとも述べています。T-Deck Pro V1.1 での meshcore-firmware のベンチテストでも同じ結果が示されています。CST328 方式の読み出しは ACK されたもののチップタイプも解像度も返らず、一方 CST3530 方式の読み出しでは0xCA 0xCAのマーカーとパネルの 240×320 解像度を含む有効なブロックが返されました。 - 他のドライバーが
0x1Aを名乗る場合があります。 ある公開中の Meshtastic プルリクエストでは、ステータスレジスタのテストが偶然一致したため、I2C スキャンが T-Deck Pro のタッチチップを DS2482-800 ブリッジと誤認したと報告されています。
これは小型タッチコントローラでよく見られるパターンです。ボード上の型番はそのままでも、チップが変更されることがあります。量産で調達する場合は、ディスプレイサプライヤーに搭載されているタッチ IC の種類を確認し、変更があれば事前に通知してもらえるよう依頼してください。変更通知に何が含まれるべきかについては、EOL・PCN 用語集で解説しています。
ESPHome でのブリングアップ
ESPHome の cst328 プラットフォームは I2C の設定が必要で、オプションとして interrupt_pin と reset_pin を受け付けます。セットアップ時の動作は以下のとおりです。
- リセットを 5 ms 間 Low にパルスした後、待機します。
- ファームウェアの CRC を読み出し、
0xCACAを期待します。それ以外の値の場合は、コンポーネントを失敗としてマークします。 - チップタイプ、プロジェクト ID、ファームウェアリビジョン、解像度を読み出した後、チップを通常モードに切り替えます。
ESPHome がタッチスクリーンの失敗を報告した場合、最初に確認すべき箇所がこの CRC チェックです。ESPHome は 2 バイトのレジスタアドレスによる CST328 方式の読み出しを使用しており、meshcore-firmware のベンチテストでは、この方式の読み出しは CST3530 から有用な値を返しませんでした。したがって、CST3530 搭載のボードではこのチェックが失敗すると想定してください。これは当社の推測であり、CST3530 ボード上で ESPHome を実行したわけではありません。
ドライバー対応状況
- ESPHome:
cst328プラットフォーム。ドキュメントでは Waveshare ESP32-S3 Touch LCD 2.8 ボードが名指しされています。CST3530 用のプラットフォームはありません。 - ESP-IDF: Waveshare が
esp_lcd_touch_cst328を Espressif コンポーネントレジストリで公開しています。互換性テーブルには CST328 のみが記載されています。 - Rust: crates.io の
cst328クレート、および両チップに対応した RS-Key ファームウェア。 - Hynitron 純正ドライバー: 両チップについて、LilyGO が Hynitron の
hyn_driverソースをリンクしています。
関連コントローラ
丸型ディスプレイでのシングルタッチには、同じく Hynitron 製の CST816S をご覧ください。最大 5 点対応のより大きなパネルには、GT911 をご覧ください。
CST328 トラブルシューティングと FAQ
最初のロットのボードではタッチが動作したのに、新しいボードでは動作しません。なぜですか?
タッチチップが変更されていないか確認してください。LilyGO によると、新しいロットの T-Deck Pro v1.1 では、同じアドレス 0x1A のまま CST328 の代わりに CST3530 が使用されており、Waveshare の RP2350-Touch-LCD-2.8 V2 も CST3530 に移行しています。CST328 専用ドライバーを使用するプロジェクトでは、同じ症状、つまりディスプレイは動作するのにタップがまったく検知されないことが報告されています。T-Deck Pro では I2C スキャンで両チップを区別できないため、チップタイプを読み出すか、CST3530 のプロトコルで先にプローブしてください。
CST328 の I2C アドレスは何ですか?
LilyGO の T-Deck Pro ピンテーブルでは 0x1A が示されており、RS-Key プロジェクトでは Waveshare RP2350-Touch-LCD-2.8 V1 の CST328 について 0x1A(7 ビット)と記載されています。CST3530 が同じアドレスにあると想定しないでください。RS-Key によると、CST3530 は T-Deck Pro では 0x1A ですが、RP2350-Touch-LCD-2.8 V2 では 0x58 です。
1 つのドライバーで CST328 と CST3530 の両方に対応できますか?
はい。チップを検出できれば対応可能です。LilyGO は、モデルは「初期化時に識別される必要がある」とし、個別の初期化ルーチンを使用しています。reticulum-tdeck プロジェクトは CST3530 を先にプローブしています。CST3530 は CST328 のレジスタ読み出しにも ACK するためです。作者らによると、このコードは CST3530 ボード上ではまだ実行されていないとのことです。一方、RS-Key プロジェクトはビルド時にチップを選択します。
出典
- LilyGO T-Deck Pro README(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、ACK 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タッチスクリーン ドキュメント
- ESPHome cst328_touchscreen.cpp ソース
- Waveshare ESP32-S3-Touch-LCD-2.8 wiki
- Waveshare esp_lcd_touch_cst328 コンポーネント