ข้ามไปยังเนื้อหา
Display Engineer
ตัวควบคุมระบบสัมผัส · Hynitron

CST328: การตั้งค่า & การแก้ปัญหา

CST328 เป็นไอซีควบคุมทัชสกรีนแบบ capacitive ของ Hynitron ใช้อินเทอร์เฟซ I2C ที่แอดเดรส 0x1A และรีจิสเตอร์แบบ 16 บิต LilyGO ระบุว่าไอซีรุ่นนี้เลิกผลิตแล้ว โดยบอร์ดรุ่นหลังจะติดตั้ง CST3530 ซึ่งต้องใช้ไดรเวอร์ต่างกัน

DEDisplay Engineer Applications Team · วิศวกรแอปพลิเคชันด้านจออัปเดต 11 พ.ย. 2569
ผู้ผลิตHynitron
ประเภทตัวควบคุมระบบสัมผัส
อินเทอร์เฟซI2C
ความละเอียดสูงสุด5 touch points

CST328 ภาพรวมโดยสังเขป

รายการ

ค่า

แหล่งอ้างอิง

อินเทอร์เฟซ

I2C รีจิสเตอร์แบบ 16 บิต

ไดรเวอร์ ESPHome, RS-Key

แอดเดรส I2C (7 บิต)

0x1A

ตารางพิน LilyGO T-Deck Pro, RS-Key

จำนวนจุดสัมผัส

5 จุด บน Waveshare ESP32-S3-Touch-LCD-2.8

วิกิ Waveshare

การรายงานค่าสัมผัส

รีจิสเตอร์ 0xD000 7 ไบต์ต่อ 1 จุดสัมผัส

RS-Key

อินเทอร์รัพต์

รองรับ

วิกิ Waveshare, ESPHome (ขอบ falling edge)

สถานะ

เลิกผลิตแล้ว ตามข้อมูลของ LilyGO

README ของ LilyGO T-Deck Pro

ค่าตัวเลขเหล่านี้ไม่ได้มาจากดาต้าชีตของ Hynitron โดยตรง เนื่องจากเอกสารที่พบบนอินเทอร์เน็ตเป็นไฟล์ที่ผู้จำหน่ายอัปโหลด ค่าทั้งหมดข้างต้นจึงอ้างอิงจากซอร์สโค้ดไดรเวอร์และเอกสารประกอบบอร์ด

การเปลี่ยนมาใช้ CST3530

README ของ LilyGO T-Deck Pro ระบุว่าผู้ผลิต CST328 "หยุดการผลิตไปแล้ว" บอร์ด T-Deck Pro v1.1 รุ่นใหม่จึงใช้ CST3530 พร้อมระบุว่า "ทั้งสองชิปใช้แอดเดรสอุปกรณ์เดียวกัน" ไฟรม์แวร์จึงต้องตรวจสอบรุ่นชิประหว่างขั้นตอนเริ่มต้น LilyGO ใช้รูทีน cst66xx ของ Hynitron สำหรับ CST3530 และ cst3xx สำหรับ CST328

บอร์ด RP2350-Touch-LCD-2.8 ของ Waveshare เปลี่ยนมาใช้ชิปรุ่นใหม่เช่นเดียวกัน โปรเจกต์ RS-Key บันทึกไว้ว่าเวอร์ชัน V1 ใช้ CST328 ที่แอดเดรส 0x1A และเวอร์ชัน V2 ใช้ CST3530 ที่แอดเดรส 0x58 บน T-Deck Pro แอดเดรสไม่เปลี่ยน แต่บนบอร์ดนี้แอดเดรสเปลี่ยน

CST328

CST3530

การระบุตำแหน่งรีจิสเตอร์

2 ไบต์

คำสั่งแบบ 4 ไบต์

การรายงานค่าสัมผัส

0xD000, 7 ไบต์

0xD0070000, 9 ไบต์

ส่ง acknowledge หลังอ่าน

เขียน sync byte 0xAB

เขียน 0xD00002AB

แอดเดรสบน T-Deck Pro

0x1A

0x1A

ที่อยู่บน RP2350-Touch-LCD-2.8

0x1A (V1)

0x58 (V2)

พฤติกรรมในสถานะ Idle

ไม่มีเอกสารระบุไว้ในแหล่งข้อมูลที่เราใช้อ้างอิง

เข้าสู่โหมด Sleep อัตโนมัติ LilyGO แนะนำให้ใช้ interrupt แทนการ polling

คอลัมน์ของ CST3530 มาจากไดรเวอร์ที่รวมเข้าด้วยกันของ RS-Key ซึ่งผู้เขียนทดสอบบนบอร์ด V2 และจาก README ของ LilyGO

อาการของปัญหาเมื่อชิปถูกสลับ

ทั้งสองโปรเจกต์ที่เจอปัญหานี้รายงานอาการตรงกัน: เฟิร์มแวร์รันได้และจอแสดงผลได้ แต่การแตะไม่ถูกจดจำเลย issue ของ reticulum-tdeck ระบุว่า T-Deck Pro v1.1 บางเครื่องใช้ได้และบางเครื่องใช้ไม่ได้ ซึ่งสอดคล้องกับการเปลี่ยนแปลงระหว่างล็อตการผลิต มากกว่าความผิดพลาดด้านการเดินสาย

กับดักอีกสองข้อ:

  • การสแกน I2C ไม่สามารถระบุชนิดชิปได้ บน T-Deck Pro ชิปทั้งสองตอบกลับที่ 0x1A ทั้งคู่ ผู้เขียน reticulum-tdeck จึง probe หา CST3530 เป็นอันดับแรก เพราะ CST3530 "ตอบรับการอ่านรีจิสเตอร์แบบ CST328 อย่างไม่มีปัญหา" ทั้งนี้พวกเขาระบุด้วยว่าโค้ดส่วนนี้ยังไม่เคยรันบนบอร์ด CST3530 มาก่อน การทดสอบ bench test ของ meshcore-firmware บน T-Deck Pro V1.1 ให้ผลเช่นเดียวกัน: การอ่านแบบ CST328 ได้รับการตอบรับแต่ไม่คืนค่าชนิดชิปและความละเอียด ส่วนการอ่านแบบ CST3530 คืนค่าบล็อกที่ถูกต้องพร้อม marker 0xCA 0xCA และความละเอียด 240×320 ของแผงจอ
  • ไดรเวอร์อื่นอาจเข้าใจว่าเป็นชิปที่ 0x1A ก็ได้ pull request ของ Meshtastic ที่ยังเปิดอยู่รายงานว่าการสแกน I2C เข้าใจผิดว่าชิป touch ของ T-Deck Pro เป็น bridge DS2482-800 เพราะการทดสอบ status-register บังเอิญตรงกัน

นี่เป็นรูปแบบที่พบบ่อยกับ touch controller ขนาดเล็ก: หมายเลขพาร์ตบนบอร์ดยังคงเดิมแต่ชิปภายในเปลี่ยนไป หากคุณผลิตเป็นปริมาณมาก ควรสอบถามผู้จำหน่ายจอว่าติดตั้ง touch IC รุ่นใด และขอให้แจ้งล่วงหน้าหากมีการเปลี่ยนรุ่น อภิธานศัพท์ EOL และ PCN ของเราอธิบายว่า change notice ที่ดีควรมีเนื้อหาอย่างไร

การ bring-up ด้วย ESPHome

แพลตฟอร์ม cst328 ของ ESPHome ต้องมีการตั้งค่า I2C และรับ interrupt_pin และ reset_pin แบบตัวเลือกได้ ขั้นตอน setup ของมันทำดังนี้:

  • ดึงขา reset เป็น low นาน 5 ms แล้วรอ
  • อ่าน CRC ของเฟิร์มแวร์และคาดหวังค่า 0xCACA หากได้ค่าอื่นจะทำเครื่องหมายว่าคอมโพเนนต์ล้มเหลว
  • อ่านชนิดชิป project ID, firmware revision และความละเอียด จากนั้นสลับชิปเข้าสู่โหมดปกติ

การตรวจ CRC เป็นจุดแรกที่ควรตรวจหาก ESPHome รายงานว่า touchscreen ล้มเหลว ESPHome ใช้การอ่านแบบ CST328 ที่มีที่อยู่รีจิสเตอร์ 2 ไบต์ และจาก bench test ของ meshcore-firmware การอ่านลักษณะนี้ไม่คืนค่าที่ใช้ประโยชน์ได้จาก CST3530 ดังนั้นบนบอร์ดที่ใช้ CST3530 ให้คาดหวังว่าการตรวจนี้จะล้มเหลว ซึ่งเป็นข้ออ้างอิงของเราเอง: เรายังไม่เคยรัน ESPHome บนบอร์ด CST3530

การรองรับของไดรเวอร์

  • ESPHome: แพลตฟอร์ม cst328 เอกสารของมันระบุบอร์ด Waveshare ESP32-S3 Touch LCD 2.8 และไม่มีแพลตฟอร์มสำหรับ CST3530
  • ESP-IDF: Waveshare เผยแพร่ esp_lcd_touch_cst328 ใน Espressif component registry ตารางความเข้ากันได้ของมันระบุเฉพาะ CST328 เท่านั้น
  • Rust: crate cst328 บน crates.io และเฟิร์มแวร์ RS-Key ที่รองรับทั้งสองชิป
  • ไดรเวอร์จาก Hynitron เอง: LilyGO ลิงก์ซอร์สโค้ด hyn_driver ของ Hynitron ซึ่งรองรับทั้งสองชิป

ชิปควบคุมที่เกี่ยวข้อง

สำหรับ touch นิ้วเดียวบนจอทรงกลม ดู CST816S ซึ่งเป็นผลิตภัณฑ์ของ Hynitron เช่นกัน สำหรับแผงจอขนาดใหญ่ที่รองรับสูงสุด 5 จุด ดู GT911

การแก้ปัญหาและคำถามที่พบบ่อยของ CST328

Touch ใช้ได้กับบอร์ดล็อตแรก แต่ไม่ทำงานในล็อตใหม่ เพราะอะไร?

ตรวจสอบว่าชิป touch เปลี่ยนรุ่นหรือไม่ LilyGO ระบุว่าล็อต T-Deck Pro v1.1 ที่ใหม่กว่าใช้ CST3530 แทน CST328 ที่ที่อยู่เดิมคือ 0x1A และ Waveshare’s RP2350-Touch-LCD-2.8 V2 ก็เปลี่ยนไปใช้ CST3530 เช่นกัน โปรเจกต์ที่ใช้ไดรเวอร์รองรับเฉพาะ CST328 รายงานอาการเดียวกัน: จอแสดงผลได้แต่การแตะไม่ถูกจดจำ การสแกน I2C แยกสองชิปนี้ออกจากกันไม่ได้บน T-Deck Pro จึงควรอ่านค่าชนิดชิปหรือ probe โปรโตคอล CST3530 เป็นอันดับแรก

ที่อยู่ I2C ของ CST328 คืออะไร?

ตาราง pin ของ T-Deck Pro จาก LilyGO ระบุ 0x1A และโปรเจกต์ RS-Key ระบุ 0x1A (7-bit) สำหรับ CST328 บน Waveshare RP2350-Touch-LCD-2.8 V1 อย่าสันนิษฐานว่า CST3530 อยู่ที่ที่อยู่เดียวกัน: ตาม RS-Key มันอยู่ที่ 0x1A บน T-Deck Pro แต่เป็น 0x58 บน RP2350-Touch-LCD-2.8 V2

ไดรเวอร์เดียวสามารถรองรับทั้ง CST328 และ CST3530 ได้หรือไม่?

ได้ หากไดรเวอร์ตรวจจับชนิดชิปได้ LilyGO ระบุว่ารุ่นชิป "ต้องได้รับการระบุระหว่างการ initialize" และใช้ init routine แยกกัน โปรเจกต์ reticulum-tdeck probe หา CST3530 เป็นอันดับแรก เพราะ CST3530 ตอบรับการอ่านรีจิสเตอร์แบบ CST328 ด้วย โดยผู้เขียนระบุว่าโค้ดนี้ยังไม่เคยรันบนบอร์ด CST3530 ส่วนโปรเจกต์ RS-Key เลือกชิปตอน build แทน

แหล่งที่มา

  1. README ของ LilyGO T-Deck Pro (การเปลี่ยนจาก CST328 เป็น CST3530, ที่อยู่, init, interrupt)
  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 (report 0xD0070000, ack 0xD00002AB)
  5. reticulum-tdeck issue #19: สัมผัสของ T-Deck Pro v1.1 บางเครื่องไม่ทำงาน
  6. reticulum-tdeck v1.13.0-rc1: ลำดับการ probe ชิป CST3530
  7. meshcore-firmware issue #2108: การ probe สัมผัสของ T-Deck Pro V1.1 (การอ่านแบบ cst66xx เทียบกับ cst3xx)
  8. Meshtastic PR #11952: ชิปสัมผัสที่ 0x1A ถูกตรวจจับผิดเป็น DS2482
  9. เอกสาร ESPHome CST328 touchscreen
  10. ซอร์สโค้ด ESPHome cst328_touchscreen.cpp
  11. วิกิ Waveshare ESP32-S3-Touch-LCD-2.8
  12. คอมโพเนนต์ esp_lcd_touch_cst328 ของ Waveshare

ไม่แน่ใจว่าจอแบบใดเหมาะกับงานออกแบบของคุณ?

ส่งขนาด อินเทอร์เฟซ และโปรเซสเซอร์โฮสต์มาให้เรา วิศวกรจอจะตอบกลับภายใน 12 ชั่วโมงพร้อมตัวเลือก 2–3 รายการ datasheet และโค้ดเริ่มต้น ตัวอย่างเริ่มที่ 1 ชิ้น