- Giới thiệu cách có thể dễ dàng thay đổi EDID của HDMI dummy plug bằng Raspberry Pi
- Dummy plug được dùng để khiến thiết bị nhận rằng có màn hình được kết nối dù không có thiết bị xuất hình thực tế
- Có thể sao chép thông tin EDID giống hệt thiết bị capture 1080p để cấu hình sao cho plug không hiển thị như một màn hình 4K
- Có thể đọc và ghi EEPROM của plug chỉ với bộ điều khiển I2C của Raspberry Pi và các công cụ Linux tiêu chuẩn
- Trong toàn bộ quá trình, việc chọn đúng bus I2C và sao lưu là bắt buộc để ngăn ngừa hư hỏng thiết bị
Tổng quan về dummy plug và EDID
- Dummy plug là một thiết bị dạng dongle nhỏ, khi cắm vào cổng HDMI hoặc DVI thì không xử lý hình ảnh thực tế mà chỉ với mạch tối thiểu sẽ khiến thiết bị phát hiện rằng màn hình đã được kết nối
- Bên trong có chip EEPROM mô phỏng EDID (Extended Display Identification Data) của màn hình cùng các mạch như điện trở pull-up nối với +5V
- Nó hữu ích để khiến hệ điều hành (OS) đánh giá rằng có màn hình hiện diện trong các môi trường như máy chủ headless, thiết bị không giám sát trực tiếp, v.v.
Mục tiêu và cách tiếp cận
- Chia sẻ trải nghiệm muốn thay đổi EDID để HDMI dummy plug hỗ trợ độ phân giải 4K hiện có được nhận diện như một thiết bị 1080p đơn giản
- Mục tiêu là thay thế EDID bên trong dummy plug để nó giống hệt thông tin EDID của thiết bị capture HDMI (hỗ trợ 1080p)
- Không chắc EEPROM của dummy plug có cho phép ghi hay không, nhưng đáng để thử
- Cổng HDMI trên Raspberry Pi Zero được nối với bộ điều khiển I2C, nên việc truy cập khá thuận tiện
Lưu ý an toàn và bắt đầu quy trình
- Nếu thực hiện quy trình này khi đang kết nối với màn hình thật, các màn hình không có bảo vệ EDID có nguy cơ bị hỏng
- Chỉ nên thao tác trên các thiết bị như dummy plug, tức là thiết bị mà nếu có hỏng cũng không sao
- Ngoài ra, bắt buộc phải dùng đúng bus I2C, đồng thời phải đọc trước và xác minh EDID chính xác trước khi ghi
Thiết lập môi trường và chuẩn bị
- Cài Raspberry Pi OS Lite, sau đó điều chỉnh cấu hình bằng
sudo raspi-config
- Cài công cụ I2C bằng
sudo apt install i2c-tools (với Pi Zero cần có mạng; có thể обход bằng bộ chuyển USB-Ethernet hoặc chroot trên thẻ SD)
- Cần dùng adapter HDMI-to-Mini-HDMI
Nhận diện và sao lưu EEPROM EDID
- Với Raspberry Pi Zero, sử dụng bus I2C số 2 (các mẫu Pi khác có thể dùng số khác)
- Dùng lệnh
i2cdetect để xác nhận thiết bị được nhận tại địa chỉ 0x50, đây là địa chỉ tiêu chuẩn của EEPROM EDID
- Điều khá lạ là các địa chỉ 0x51~0x57 cũng phản hồi, cho thấy EDID được lưu theo dạng nhiều bản sao
- Dùng
get-edid để sao lưu EDID gốc của dummy plug, đọc hai lần rồi so sánh để xác minh tính nhất quán
- Dùng
od -v -An -txC để xuất EDID dưới dạng mảng hex, rồi kiểm tra tính hợp lệ bằng edidreader.com
Trích xuất EDID từ thiết bị capture và ghi vào plug
- Tháo dummy plug ra rồi kết nối thiết bị capture HDMI với Pi
- Trích xuất EDID của thiết bị capture theo cùng cách, rồi kiểm tra lại tính hợp lệ
- Kết nối lại dummy plug và ghi EDID của thiết bị capture vào EEPROM
- Ghi từng byte bằng lệnh
i2cset, việc này có thể thực hiện chỉ với các công cụ Linux tiêu chuẩn và bash
Xác minh cuối cùng và kết quả
- Sau khi hoàn tất, trích xuất lại EDID của dummy plug rồi so sánh bằng diff với tệp gốc để xác nhận nội dung khớp nhau
- Khi kết nối vào máy tính thử nghiệm, nó không còn được nhận là màn hình 4K ban đầu mà được nhận là thiết bị capture HDMI
- Việc thay thế EDID của dummy plug đã hoàn tất thành công
Kết luận và gợi ý ứng dụng
- Với cùng quy trình, cũng có thể biến dummy plug 1080p đời cũ thành thiết bị hỗ trợ 4K
- Chỉ khuyến nghị thực hiện thao tác ghi I2C trên Raspberry Pi; nếu làm trực tiếp trên PC thông thường có nguy cơ làm hỏng phần cứng
- Nếu bạn cần chức năng liên quan, quy trình này có thể hữu ích
1 bình luận
Ý kiến trên Hacker News