本文へスキップ
Display Engineer
タッチコントローラ · Hynitron

CST328: セットアップ・トラブルシューティング

CST328はHynitron製の静電容量式タッチコントローラで、I2Cインターフェース(アドレス0x1A、16ビットレジスタアドレス)を持ちます。LilyGOによると生産終了しており、後期のボードでは異なるドライバが必要なCST3530が搭載されています。

DEDisplay Engineer Applications Team · ディスプレイ アプリケーションエンジニア更新日 2026年11月11日
メーカーHynitron
種類タッチコントローラ
インターフェースI2C
最大解像度5 touch points

CST328の概要

項目

値

出典

インターフェース

I2C、16ビットレジスタアドレス

ESPHomeドライバ、RS-Key

I2Cアドレス(7ビット)

0x1A

LilyGO T-Deck Pro ピンテーブル、RS-Key

タッチポイント数

Waveshare ESP32-S3-Touch-LCD-2.8 では5点

Waveshare wiki

タッチレポート

レジスタ 0xD000、1ポイントあたり7バイト

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バイトコマンドワード

タッチレポート

0xD000、7バイト

0xD0070000、9バイト

読み出し後のACK

同期バイト 0xAB の書き込み

0xD00002AB の書き込み

T-Deck Proでのアドレス

0x1A

0x1A

RP2350-Touch-LCD-2.8 でのアドレス

0x1A(V1)

0x58(V2)

アイドル時の動作

参照した資料には記載がありません

自動的にスリープします。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 プロジェクトはビルド時にチップを選択します。

出典

  1. LilyGO T-Deck Pro README(CST328からCST3530への変更、アドレス、初期化、割り込み)
  2. LilyGO T-Deck Pro issue #37:CST3530がCST328を置き換え
  3. RS-Key issue #139:RP2350-Touch-LCD-2.8 V1のCST328は0x1A、V2のCST3530は0x58
  4. RS-Key PR #138:CST3530ドライバ(レポート0xD0070000、ACK 0xD00002AB)
  5. reticulum-tdeck issue #19:T-Deck Pro v1.1の一部個体でタッチが機能しない
  6. reticulum-tdeck v1.13.0-rc1:CST3530のプローブ順序
  7. meshcore-firmware issue #2108:T-Deck Pro V1.1のタッチプローブ(cst66xxとcst3xxの読み出し)
  8. Meshtastic PR #11952:0x1AのタッチチップがDS2482と誤検出される
  9. ESPHome CST328タッチスクリーン ドキュメント
  10. ESPHome cst328_touchscreen.cpp ソース
  11. Waveshare ESP32-S3-Touch-LCD-2.8 wiki
  12. Waveshare esp_lcd_touch_cst328 コンポーネント

どのディスプレイが設計に合うか迷っていませんか?

サイズ、インターフェース、ホストプロセッサをお知らせください。ディスプレイエンジニアが 12 時間以内に、データシートと初期化コード付きで 2〜3 件の候補をお返しします。サンプルは 1 個から。