ILI9881C คืออะไร
ILI9881C เป็นไดรเวอร์ของ Ilitek สำหรับพาเนล TFT แบบ MIPI DSI โดยทั่วไปเป็นพาเนลแนวตั้งขนาด 720×1280 หรือ 800×1280 ตัวไดรเวอร์นี้ไม่มีอินเทอร์เฟซพิกเซลแบบ SPI หรือ RGB คำสั่งและพิกเซลทั้งหมดส่งผ่าน DSI เท่านั้น Ilitek ไม่เปิดเผย datasheet ต่อสาธารณะ ดังนั้นแหล่งอ้างอิงที่ใช้งานได้จริงคือไดรเวอร์ใน mainline Linux panel-ilitek-ili9881c.c รวมถึงตาราง init จากผู้ผลิตพาเนลของคุณ
คอนโทรลเลอร์ตัวเดียว หลายตาราง init
ไดรเวอร์ของ Linux ไม่ได้มีเพียงค่าคอนฟิกูเรชันเดียว แต่มีตาราง init, display timing และจำนวนเลนแยกกันสำหรับพาเนลแต่ละรุ่นที่รองรับ พาเนลที่ระบุไว้ใน mainline ได้แก่:
- Raspberry Pi Touch Display 2 ขนาด 5″ และ 7″ (
raspberrypi,dsi-5inch,raspberrypi,dsi-7inch): 720×1280, 2 data lane - Waveshare 7.0″ DSI Touch A: 2 data lane
- พาเนลจาก Banana Pi, Startek, TDO, Feixin, Bestar, Wanchanglong และ Ampire: 720×1280 หรือ 800×1280 ใช้ 2 หรือ 4 เลนขึ้นอยู่กับพาเนล
พาเนลสองรุ่นที่ใช้คอนโทรลเลอร์ตัวเดียวกันก็อาจยังต้องใช้ตาราง init และค่า timing ที่แตกต่างกัน หากคัดลอกตาราง init จากบอร์ดอื่น หน้าจออาจยังคงมืดสนิทหรือแสดงลายทาง แม้ลิงก์ DSI จะเชื่อมต่อสำเร็จแล้วก็ตาม ควรเริ่มจากตารางสำหรับพาเนลรุ่นที่ตรงกันเท่านั้น
mainline Linux มีไดรเวอร์สำหรับ ILI9881C แต่ไม่มีรายการสำหรับ ILI9881D พาเนล ILI9881D เช่น PJ5015B14 ของเรา (4.99″ 720×1280 IPS) ควรถือว่าต้องใช้ตาราง init และค่า timing ของตัวเองจาก datasheet ของพาเนล
ลำดับการจ่ายไฟ (Power-on sequence) ในไดรเวอร์ของ Linux
ไดรเวอร์ mainline เปิดพาเนลตามลำดับนี้:
- เปิด IOVCC รอ 5 ms จากนั้นเปิดแหล่งจ่ายไฟหลักและรอ 5 ms
- สถานะ reset ค้างไว้ 20 ms ปล่อย reset แล้วรอ 20 ms
- ส่งตาราง init ของพาเนล ILI9881C ซึ่งใช้คำสั่งสลับเพจ (page-switch) เพื่อเข้าถึงเรจิสเตอร์ของผู้ผลิต (vendor registers)
- กลับไปที่เพจ 0 เปิดใช้งานเอาต์พุต tearing-effect และส่งคำสั่ง Exit Sleep
- รอ 120 ms แล้วส่งคำสั่ง Display On
Raspberry Pi: Touch Display 2
เอกสารของ Raspberry Pi โหลด Touch Display 2 ด้วย overlay เหล่านี้:
dtoverlay=vc4-kms-dsi-ili9881-5inchdtoverlay=vc4-kms-dsi-ili9881-7inch
เพิ่ม ,dsi0 เพื่อใช้พอร์ต DSI อีกตัว รุ่น 5″ และ 7″ เป็นพาเนล 720×1280 พร้อมทัชสกรีนแบบห้าจุด ส่วนรุ่น 10″ ใช้คอนโทรลเลอร์และ overlay ต่างกัน (vc4-kms-dsi-ili79600-10-1inch) และต้องใช้ DSI 4 เลน
พาเนล ILI9881C หรือ ILI9881D แบบกำหนดเองบน Pi ต้องมี device-tree overlay ที่ระบุรายการพาเนลที่ตรงกัน การใช้ overlay ของ Touch Display 2 ซ้ำจะได้ผลเฉพาะเมื่อพาเนลตรงกับตาราง init และค่า timing นั้นจริง ๆ
ESP32-P4 และ M5Stack Tab5
ไดรเวอร์ mipi_dsi ของ ESPHome รองรับพาเนล ILI9881C บน ESP32-P4 ด้วยจำนวน 1 หรือ 2 data lane (ค่าเริ่มต้นคือ 2) M5Stack Tab5 เป็นตัวอย่างที่ชัดเจนว่าการเลือกนี้เปราะบางแค่ไหน ESPHome ระบุรุ่นฮาร์ดแวร์ไว้สามเวอร์ชัน:
- ผลิตก่อนวันที่ 14 ตุลาคม 2025: ไดรเวอร์จอแสดงผล ILI9881C พร้อมคอนโทรลเลอร์ทัชสกรีน GT911 แยกต่างหาก ใช้โมเดล
M5STACK-TAB5 - เครื่องรุ่นหลังจากนั้น: คอนโทรลเลอร์แบบรวมจอแสดงผลและทัชสกรีนไว้ด้วยกัน ซึ่งเป็น ST7123 (
M5STACK-TAB5-ST7123) หรือ ST7121 (M5STACK-TAB5-ST7121)
ลำดับ init ทั้งสามแบบไม่สามารถใช้แทนกันได้ หากเลือกโมเดลจอแสดงผลผิด หน้าจอจะมืดสนิทโดยไม่มีข้อผิดพลาดที่เกี่ยวข้องแสดงใน log แต่ถ้าเลือกไดรเวอร์ทัชสกรีนผิดจะมี error แสดงใน log ดังนั้น ESPHome จึงแนะนำให้ระบุรุ่นบอร์ดจากไดรเวอร์ทัชสกรีนก่อน
เช็กลิสต์การ bring-up
- ยืนยันจำนวนเลนและโหมด DSI (video, sync-pulse หรือ burst) จาก datasheet ของพาเนล ค่าที่ตั้งไว้ฝั่ง host ต้องตรงกัน
- ใช้ตาราง init สำหรับพาเนลรุ่นที่ตรงกัน ไม่ใช่แค่ตามชื่อคอนโทรลเลอร์
- ตรวจสอบลำดับ reset และการจ่ายไฟ บอร์ดบางรุ่นควบคุม reset หรือไฟผ่าน IO expander
- แบ็กไลต์ติดแต่ไม่มีภาพ มักหมายความว่าใช้ตาราง init ผิด จำนวนเลนผิด หรือค่า DSI timing ไม่ตรงกัน ไม่ใช่พาเนลเสีย
สำหรับการเลือกอินเทอร์เฟซ ดูที่ MIPI DSI vs LVDS vs eDP และ หน้าอินเทอร์เฟซ MIPI DSI
คู่มือและการเปรียบเทียบ
การแก้ปัญหาและคำถามที่พบบ่อยของ ILI9881C
สามารถใช้ overlay ของ Raspberry Pi Touch Display 2 ซ้ำกับพาเนล ILI9881C รุ่นอื่นได้หรือไม่?
ได้ก็ต่อเมื่อพาเนลตรงกับตาราง init, ค่า timing และการตั้งค่า 2 เลนนั้นเท่านั้น ไดรเวอร์ mainline Linux เก็บตาราง init, mode และจำนวนเลนแยกกันสำหรับพาเนลทุกรุ่นที่รองรับ ดังนั้นพาเนล ILI9881C รุ่นอื่นโดยทั่วไปจึงต้องมีรายการพาเนลและ overlay ของตัวเอง
หน้าจอ M5Stack Tab5 ของฉันมืดสนิทใน ESPHome ควรเลือกโมเดลไหน?
ESPHome ระบุ Tab5 ไว้สามเวอร์ชัน: เครื่องที่ผลิตก่อนวันที่ 14 ตุลาคม 2025 ใช้ ILI9881C พร้อมคอนโทรลเลอร์ทัชสกรีน GT911 (M5STACK-TAB5); เครื่องรุ่นหลังจากนั้นใช้ ST7123 (M5STACK-TAB5-ST7123) หรือ ST7121 (M5STACK-TAB5-ST7121) การเลือกโมเดลจอแสดงผลผิดจะล้มเหลวอย่างเงียบ ๆ ส่วนไดรเวอร์ทัชสกรีนผิดจะแสดง error ใน log ดังนั้นให้ระบุรุ่นบอร์ดจากไดรเวอร์ทัชสกรีนก่อน
ILI9881D เหมือนกับ ILI9881C หรือไม่?
อย่าสรุปเช่นนั้น Linux mainline มีไดรเวอร์ของ ILI9881C แต่ไม่มีรายการสำหรับ ILI9881D ดังนั้นพาเนล ILI9881D จึงต้องมีตาราง init sequence และค่า timing ของตัวเองจากดาต้าชีตของพาเนล
พาเนล ILI9881C ใช้ DSI กี่เลน?
ขึ้นอยู่กับพาเนล ในไดรเวอร์ Linux mainline รายการของ Raspberry Pi 5″/7″ และ Waveshare 7″ ใช้ 2 lanes ขณะที่พาเนลขนาด 720×1280 และ 800×1280 หลายรุ่นใช้ 4 lanes ควรตั้งค่าฝั่ง host ให้ตรงกับดาต้าชีตของพาเนลที่ใช้