跳到正文
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,单个触点占 7 字节

RS-Key

中断

支持

Waveshare wiki、ESPHome(下降沿触发)

状态

据 LilyGO 称已停产

LilyGO T-Deck Pro README

以上数据并非出自海栎创的官方数据手册。我们在网上找到的资料手册是经销商上传的版本,因此上述数值来自驱动源码和板卡文档。

换用 CST3530 的情况

LilyGO 的 T-Deck Pro README 称,CST328 供应商“已停产”,因此较新的 T-Deck Pro v1.1 板卡改用 CST3530。README 还指出“两款芯片使用相同的设备地址”,因此固件必须在初始化阶段识别具体芯片。LilyGO 对 CST3530 使用海栎创的 cst66xx 例程,对 CST328 则使用 cst3xx。

Waveshare 的 RP2350-Touch-LCD-2.8 也做了同样的改动。RS-Key 项目记录了 V1 版本使用地址为 0x1A 的 CST328,V2 版本使用地址为 0x58 的 CST3530。在 T-Deck Pro 上地址保持不变,而在这块板卡上地址会变。

CST328

CST3530

寄存器寻址

2 字节

4 字节命令字

触摸报文

0xD000,7 字节

0xD0070000,9 字节

读取后应答

写入同步字节 0xAB

写入 0xD00002AB

在 T-Deck Pro 上的地址

0x1A

0x1A

RP2350-Touch-LCD-2.8 上的地址

0x1A(V1)

0x58(V2)

空闲行为

我们所参考的资料中未作说明

自动进入休眠;LilyGO 建议使用中断而非轮询

CST3530 相关栏目来自 RS-Key 的合并驱动(其作者已在 V2 板上测试过)以及 LilyGO 的 README。

换料问题的具体表现

遇到此问题的两个项目报告的情况完全相同:固件正常运行、显示屏正常显示,但触摸无任何响应。reticulum-tdeck 的 issue 提到,部分 T-Deck Pro v1.1 设备正常、部分不正常,这更符合生产批次之间的变更,而非接线故障。

另外两个陷阱:

  • I2C 扫描无法识别芯片型号。在 T-Deck Pro 上,两颗芯片都在 0x1A 地址应答。reticulum-tdeck 的作者会优先探测 CST3530,因为 CST3530 也"会正常应答 CST328 的寄存器读取"。他们还表示,这段代码尚未在 CST3530 板上运行过。meshcore-firmware 在 T-Deck Pro V1.1 上的台架测试也显示了同样的结果:CST328 风格的读取虽然得到应答,但没有返回芯片型号和分辨率,而 CST3530 风格的读取返回了带有 0xCA 0xCA 标记和面板 240×320 分辨率的有效数据块。
  • 其他驱动也可能把 0x1A 误认为别的芯片。一个公开的 Meshtastic pull request 报告称,其 I2C 扫描把 T-Deck Pro 的触摸芯片误判为 DS2482-800 桥接器,原因是状态寄存器测试恰好匹配。

这是小型触摸控制器的常见情况:板卡上的料号保持不变,而芯片却已更换。如果您批量生产,请向显示供应商确认所贴装的触摸 IC 型号,并要求其在变更前提前告知。我们的EOL 与 PCN 术语表说明了变更通知应包含哪些内容。

使用 ESPHome 进行点亮调试

ESPHome 的 cst328 平台需要先配置 I2C,并支持可选的 interrupt_pin 和 reset_pin。其初始化流程如下:

  • 将复位引脚拉低 5 ms,然后等待。
  • 读取固件 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 在 Espressif 组件仓库中发布了 esp_lcd_touch_cst328。其兼容性表格仅列出 CST328。
  • Rust:crates.io 上的 cst328 crate,以及支持两颗芯片的 RS-Key 固件。
  • Hynitron 官方驱动:LilyGO 链接了 Hynitron 的 hyn_driver 源码,支持两颗芯片。

相关控制器

关于圆形显示屏的单点触摸,请参阅同为 Hynitron 产品的 CST816S。关于最多支持 5 点触摸的更大尺寸面板,请参阅 GT911。

CST328 排障与常见问题

触摸功能在第一批板卡上正常,但在新板卡上完全失效,为什么?

请检查触摸芯片是否已更换。LilyGO 表示,较新的 T-Deck Pro v1.1 批次改用 CST3530 替代 CST328,地址仍为 0x1A;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,它在 T-Deck Pro 上为 0x1A,但在 RP2350-Touch-LCD-2.8 V2 上为 0x58。

一个驱动能否同时支持 CST328 和 CST3530?

可以,前提是驱动能检测芯片型号。LilyGO 表示该型号"必须在初始化期间识别",并使用各自独立的初始化例程。reticulum-tdeck 项目会优先探测 CST3530,因为 CST3530 也会应答 CST328 的寄存器读取;其作者表示该代码尚未在 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,应答 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 片起。