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