CST816S ภาพรวม
รายการ | ค่า | แหล่งอ้างอิง |
|---|---|---|
ที่อยู่ I2C (7 บิต) | | Espressif esp_lcd_touch_cst816s; ตัวอย่าง device-tree ของ Linux |
จำนวนจุดสัมผัส | 1 (นิ้วเดียว) | ไดรเวอร์และ README ของ Espressif |
ข้อมูลสัมผัส | เริ่มที่ | ไดรเวอร์ Linux hynitron-cst816x |
รีจิสเตอร์ Chip ID | | ไดรเวอร์ของ Espressif |
ค่า compatible บน Linux | | device-tree binding ของ Linux |
การอ่านค่าสัมผัส
ไดรเวอร์ Linux อ่าน 6 ไบต์จากรีจิสเตอร์ 0x01:
รีจิสเตอร์ | เนื้อหา |
|---|---|
| รหัส gesture |
| จำนวนนิ้ว (0 หรือ 1) |
| X, big-endian, 12 บิตล่าง |
| Y, big-endian, 12 บิตล่าง |
รหัส gesture ที่ไดรเวอร์ Linux รองรับ: 0x01 ปัดขึ้น, 0x02 ปัดลง, 0x03 ปัดซ้าย, 0x04 ปัดขวา, 0x0C กดค้าง
CST816S จะไม่ตอบสนองจนกว่าคุณจะแตะหน้าจอ
README ของ Espressif เตือนว่าชิปนี้ "จะตอบสนองต่อคำสั่ง I2C หลังจากมีเหตุการณ์เกิดขึ้นเท่านั้น เช่น การตรวจจับการสัมผัส อย่าคาดหวังว่าจะตอบสนองตอน init" นั่นคือเหตุผลที่ I2C scanner ตอนบูตมักไม่พบอะไรที่ 0x15 และเหตุผลที่ ESPHome มีตัวเลือก skip_probe สำหรับข้ามการอ่าน Chip ID ตอนเริ่มต้น Espressif เสริมด้วยว่าในชิปบางรุ่นการอ่าน ID อาจทำให้การเริ่มต้นล้มเหลว ให้แตะหน้าจอขณะสแกน หรือข้ามการตรวจสอบ ID ไป
การรีเซ็ตและขาอินเทอร์รัปต์
- ไดรเวอร์ Linux ดึงขา reset ค้างไว้ 50 ms ปล่อยแล้วรอ 100 ms ส่วนไดรเวอร์ของ Espressif รอ 200 ms ทั้งสองช่วง
- INT เป็นแบบเลือกใช้ในไดรเวอร์ของ Espressif (สามารถ poll แทนได้) ไดรเวอร์ Linux จะขอ interrupt และ probe ไม่สำเร็จหากไม่มีขานี้
การสัมผัสผิด (ghost touch)
มีนักพัฒนาเผยแพร่เทสต์สเก็ตช์ที่แสดงว่า CST816D บนบอร์ด Waveshare ESP32-S3-Touch-LCD-2 รายงานการสัมผัสที่ไม่มีใครแตะ ส่วนใหญ่อยู่บนแนวเส้นกึ่งกลางแนวตั้ง ซึ่งเกิดขึ้นบนบอร์ดสองตัวและด้วยโค้ดเดโมของ Waveshare เอง ยังไม่มีวิธีแก้ที่ยืนยันได้ หากพบ ghost touch ให้รันเดโมของผู้ผลิตก่อนเพื่อแยกปัญหาฮาร์ดแวร์ออกจากโค้ดของคุณ จากนั้นตรวจสอบไฟเลี้ยงและกราวด์ของบอร์ด ก่อนจะกรองการสัมผัสด้วยซอฟต์แวร์
คอนโทรลเลอร์ที่เกี่ยวข้อง
คอมโพเนนต์ cst816 ของ ESPHome ระบุ CST716, CST816D, CST816S, CST816T, CST820, CST826 และ CST836 สำหรับพาเนลมัลติทัชขนาด 4″–7″ ดู GT911 สำหรับจอแสดงผลกลมขนาด 1.28″ ดูคู่มือ GC9A01 + ESP32 ของเรา
คู่มือและการเปรียบเทียบ
การแก้ปัญหาและคำถามที่พบบ่อยของ CST816S
ทำไม CST816S ของฉันจึงไม่ถูกตรวจพบบน I2C?
CST816S จะตอบสนองบน I2C ก็ต่อเมื่อมีอีเวนต์เช่นการสัมผัสเกิดขึ้นเท่านั้น ดังนั้นการสแกน I2C ตอนบูตมักไม่พบอะไรที่ 0x15 ให้แตะหน้าจอขณะสแกน ปล่อยพินรีเซ็ตก่อน และใน ESPHome ให้ตั้งค่า skip_probe: true Espressif ระบุว่าบนชิปบางรุ่นการอ่าน ID อาจทำให้การเริ่มต้นล้มเหลว
CST816S รองรับมัลติทัชหรือไม่?
ไม่ รายงานได้เพียงนิ้วเดียว ไดรเวอร์ของ Espressif จำกัดจำนวนจุดสัมผัสไว้ที่ 1 แต่รายงานท่าทาง (gesture) ได้ ได้แก่ ปัดขึ้น ลง ซ้าย ขวา และกดค้าง สำหรับมัลติทัชให้ใช้คอนโทรลเลอร์ระดับ GT911
ทำไม CST816 ของฉันจึงรายงาน ghost touch?
มีรายงานสาธารณะหนึ่งรายการที่พบว่า CST816D บน Waveshare ESP32-S3-Touch-LCD-2 รายงานการสัมผัสตามแนวเส้นกึ่งกลางแนวตั้งแม้ใช้โค้ดสาธิตของผู้ขายเอง และยังไม่มีวิธีแก้ที่ได้รับการยืนยัน ให้รันโค้ดสาธิตของผู้ขายเพื่อตัดปัญหาจากโค้ดของคุณออกก่อน จากนั้นตรวจสอบการจ่ายไฟและกราวด์ก่อนจะกรองการสัมผัสในซอฟต์แวร์
แหล่งที่มา
- Espressif ESP-BSP: ไดรเวอร์ esp_lcd_touch_cst816s
- Espressif ESP-BSP: README ของ esp_lcd_touch_cst816s
- Linux kernel: drivers/input/touchscreen/hynitron-cst816x.c
- Linux kernel: device-tree binding ของ hynitron,cst816x
- ESPHome: จอสัมผัส CST816
- seanuleh: สเก็ตช์ทดสอบ ghost touch สำหรับ Waveshare ESP32-S3-Touch-LCD-2 (CST816D)