- แนะนำวิธีเปลี่ยน EDID ของ ปลั๊กดัมมี HDMI ได้อย่างง่ายดายด้วย Raspberry Pi
- ปลั๊กดัมมีใช้เพื่อทำให้อุปกรณ์รับรู้เสมือนว่ามีจอภาพเชื่อมต่ออยู่ ทั้งที่ไม่มีอุปกรณ์แสดงผลจริง
- สามารถคัดลอก ข้อมูล EDID ให้เหมือนกับของอุปกรณ์แคปเจอร์ 1080p เพื่อไม่ให้ปลั๊กถูกแสดงเป็นจอ 4K
- สามารถอ่านและเขียน EEPROM ของปลั๊กได้ด้วย I2C controller ของ Raspberry Pi และเครื่องมือ Linux มาตรฐานเท่านั้น
- ตลอดทุกขั้นตอน จำเป็นต้องเลือก I2C bus ให้ถูกต้องและสำรองข้อมูลไว้ก่อนเสมอเพื่อป้องกันความเสียหายของอุปกรณ์
ภาพรวมของปลั๊กดัมมีและ EDID
- ปลั๊กดัมมีคืออุปกรณ์ขนาดเล็กแบบดองเกิลที่เมื่อเสียบเข้ากับพอร์ต HDMI หรือ DVI จะไม่มีการประมวลผลภาพจริง แต่ใช้งาน วงจรขั้นต่ำ เพื่อให้อุปกรณ์ตรวจพบว่า มีจอภาพเชื่อมต่ออยู่
- ภายในมีวงจร เช่น ชิป EEPROM ที่เลียนแบบ EDID (Extended Display Identification Data) ของจอภาพ และตัวต้านทาน pull-up ที่เชื่อมกับ +5V
- มีประโยชน์สำหรับเซิร์ฟเวอร์แบบ headless, อุปกรณ์ไร้ผู้ดูแล และงานอื่น ๆ ที่ต้องการให้ ระบบปฏิบัติการ (OS) ตัดสินว่ามีจอภาพอยู่
เป้าหมายและแนวทาง
- ผู้เขียนแชร์ประสบการณ์ที่ต้องการเปลี่ยน EDID ของ ปลั๊กดัมมี HDMI ที่รองรับความละเอียด 4K เดิม ให้ถูกมองเห็นเป็นอุปกรณ์ 1080p แบบธรรมดา
- เป้าหมายคือแทนที่ EDID ภายในปลั๊กดัมมี ให้ตรงกับข้อมูล EDID ของ อุปกรณ์แคปเจอร์ HDMI ที่รองรับ 1080p
- แม้จะไม่แน่ใจว่า EEPROM ของปลั๊กดัมมีจะเขียนทับได้หรือไม่ แต่ก็น่าลอง
- พอร์ต HDMI ของ Raspberry Pi Zero เชื่อมต่อกับ I2C controller จึงเข้าถึงได้ง่าย
ข้อควรระวังด้านความปลอดภัยและการเริ่มขั้นตอน
- หากทำขั้นตอนนี้ขณะมีจอภาพจริงเชื่อมต่ออยู่ จอที่ไม่มี การป้องกัน EDID อาจมีความเสี่ยงเสียหาย
- ควรทำกับอุปกรณ์อย่าง ปลั๊กดัมมี เท่านั้น ซึ่งหากเสียหายก็ยังยอมรับได้
- นอกจากนี้ ต้องใช้ I2C bus ให้ถูกต้อง และก่อนเขียนข้อมูลต้องอ่านและตรวจสอบ EDID ล่วงหน้าให้แน่ใจเสมอ
การตั้งค่าสภาพแวดล้อมและการเตรียมงาน
- ติดตั้ง Raspberry Pi OS Lite แล้วปรับค่าด้วย
sudo raspi-config
- ติดตั้งเครื่องมือ I2C ด้วย
sudo apt install i2c-tools (สำหรับ Pi Zero ต้องมีเครือข่าย ซึ่งอาจใช้ USB-Ethernet adapter หรือเลี่ยงด้วย chroot บน SD card ได้)
- จำเป็นต้องใช้อะแดปเตอร์ HDMI-to-Mini-HDMI
การตรวจพบ EEPROM ของ EDID และการสำรองข้อมูล
- ในกรณีของ Raspberry Pi Zero จะใช้ I2C bus 2 (Pi รุ่นอื่นอาจใช้หมายเลขต่างกัน)
- ใช้คำสั่ง
i2cdetect เพื่อตรวจว่าพบอุปกรณ์ที่ ที่อยู่ 0x50 ซึ่งเป็นที่อยู่มาตรฐานของ EDID EEPROM
- ที่น่าสนใจคือมีการตอบสนองที่ที่อยู่ 0x51~0x57 ด้วย ทำให้ดูเหมือนมีการเก็บ EDID ไว้หลายชุด
- ใช้
get-edid เพื่อ สำรอง EDID ต้นฉบับ ของปลั๊กดัมมี โดยอ่านสองครั้งแล้วเทียบความตรงกัน
- ใช้
od -v -An -txC เพื่อแสดง EDID ในรูปแบบเลขฐานสิบหก และตรวจสอบความถูกต้องด้วย edidreader.com
การดึง EDID ของอุปกรณ์แคปเจอร์และเขียนลงปลั๊ก
- ถอดปลั๊กดัมมีออก แล้วเชื่อมต่อ อุปกรณ์แคปเจอร์ HDMI เข้ากับ Pi
- ดึง EDID ของอุปกรณ์แคปเจอร์ด้วยวิธีเดียวกัน และตรวจสอบความถูกต้องอีกครั้ง
- จากนั้นเสียบปลั๊กดัมมีกลับเข้าไป แล้ว เขียน EDID ของอุปกรณ์แคปเจอร์ลงใน EEPROM
- เขียนข้อมูลด้วยคำสั่ง
i2cset ทีละไบต์ ซึ่งทำได้ด้วยเครื่องมือ Linux มาตรฐานและ bash เท่านั้น
การตรวจสอบขั้นสุดท้ายและผลลัพธ์
- เมื่อทำเสร็จแล้ว ให้ดึง EDID ของปลั๊กดัมมีออกมาอีกครั้ง แล้วใช้ diff เทียบกับไฟล์ต้นฉบับ เพื่อยืนยันว่าเนื้อหาตรงกัน
- เมื่อนำไปเชื่อมต่อกับคอมพิวเตอร์ทดสอบ ระบบจะมองเห็นเป็น อุปกรณ์แคปเจอร์ HDMI แทนที่จะเป็นจอ 4K เดิม
- สรุปคือสามารถแทนที่ EDID ของปลั๊กดัมมีได้สำเร็จ
ปิดท้ายและคำแนะนำการใช้งาน
- ใช้ขั้นตอนเดียวกันนี้เพื่อเปลี่ยน ปลั๊กดัมมี 1080p รุ่นเก่าให้เป็นอุปกรณ์ที่รองรับ 4K ก็ได้
- แนะนำให้ทำการเขียนผ่าน I2C บน Raspberry Pi เท่านั้น เพราะการทำโดยตรงจากพีซีทั่วไปอาจเสี่ยงทำให้ฮาร์ดแวร์เสียหาย
- หากต้องการความสามารถลักษณะนี้ ขั้นตอนนี้ก็น่าจะเป็นประโยชน์
1 ความคิดเห็น
ความคิดเห็นจาก Hacker News