Traveling video artists and VJs frequently encounter HDMI connectivity issues at venues that are difficult to diagnose and troubleshoot in real-time. These issues manifest in two critical ways:
- Initial Connection Failures: Unable to establish a stable HDMI connection with venue equipment (projectors, video routers, switchers) due to EDID incompatibilities or negotiation failures
- Connection Dropouts During Performance: HDMI connections that fail mid-performance due to timing sync issues, signal retraining, or other protocol-level problems
Currently, video artists have limited visibility into these problems and lack portable, affordable tools to diagnose HDMI issues in the field. This project aims to develop open-source, cost-accessible hardware tools to monitor and diagnose HDMI connections.
Two complementary devices built from off-the-shelf components:
Purpose: Pre-connection diagnostics and EDID management
Function: Plugs into venue HDMI equipment (projectors, routers, etc.) to read and display supported EDID modes, with capability to inject custom EDID for compatibility
Use Case: Allows VJs to verify compatibility, configure output settings appropriately, and work around problematic venue EDIDs
Inspiration: HDMI dummy plug reprogramming via Raspberry Pi I2C
Purpose: Real-time connection monitoring and protocol analysis
Function: Sits inline between video source and display to monitor HDMI signal health, DDC/I2C traffic, and protocol-level events during performance
Use Case: Logs timing, sync, retraining, HDCP handshake events, and CEC traffic to diagnose intermittent connection issues
Inspiration: HDMI-over-IP extenders (Lenkeng), CEC sniffers, DDC traffic analysis tools
- EDID Reader/Manager: Raspberry Pi with I2C access (address 0x50) for reading/writing EDID data
- Evaluate HDMI dummy plug modification approach (reprogrammable EEPROM)
- Consider EDID injection/override capabilities for compatibility fixes
- Research multi-bank EDID storage (see commercial devices: 5-40 banks)
- Inline Monitor: Research HDMI pass-through or splitter-based solutions
- Investigate Lenkeng HDMI-over-IP extenders as potential monitoring platform
- Evaluate CEC-Tiny-Pro approach for DDC/CEC sniffer (zero additional hardware)
- Consider HDMI breakout cables for I2C/CEC access without signal interruption
- Evaluate whether devices should be separate or combinable (leaning toward separate due to multi-connection monitoring needs)
- Component sourcing to maintain cost accessibility
- I2C-based EDID reading using i2c-tools (read-edid, get-edid)
- EDID parsing and validation (parse-edid, edid-decode)
- EDID generation for custom resolutions/timings (edid-generate)
- Safe EDID writing with verification (edid-checked-writer approach)
- Display supported resolutions, refresh rates, timings, and vendor info
- EDID override/injection for problematic displays
- EDID Reader: On-screen display showing supported modes, timings, manufacturer data
- Inline Monitor: On-screen display + data logging capability (SD card, USB, or network)
- Design for both technical and non-technical users with minimal learning curve
- Standalone operation (no computer required for monitoring)
- Consider USB interface for configuration and firmware updates
- DDC (Display Data Channel): I2C bus monitoring (address 0x50 for EDID, 0x37 for DDC/CI)
- Monitor VCP (VESA Control Protocol) feature codes
- Log DDC/CI transactions for debugging
- Detect EDID read failures or corruption
- CEC (Consumer Electronics Control): Pin 13 monitoring
- Passive sniffing of CEC commands
- Log device discovery and control messages
- TMDS (Transition-Minimized Differential Signaling): Signal quality monitoring
- Clock signal synchronization and drift detection
- Signal integrity and jitter analysis
- Pixel clock frequency verification (25.2MHz to 297MHz range)
- HDCP (High-bandwidth Digital Content Protection):
- Handshake monitoring and failure detection
- Authentication event logging (without key extraction)
- Hot-plug detect (HPD) event tracking
- Signal retraining event detection and logging
- Cable integrity and signal quality metrics
- InfoFrame packet analysis (AVI, Audio, Vendor-Specific)
- Resolution negotiation failures (EDID incompatibilities)
- HDCP handshake issues
- Signal degradation over cable length
- Timing/sync drift during extended operation
- Vendor-specific projector/router compatibility issues
- Intermittent connection dropouts
- DDC/I2C communication failures
- CEC conflicts between devices
- Duplicate serial numbers for sinks confusing MadMapper
- What metrics to log for the inline monitor
- HPD events with timestamps
- HDCP authentication attempts/failures
- Signal retraining events
- DDC/I2C transaction logs
- CEC command sequences
- Resolution/timing changes
- Log format: structured text (CSV/JSON) or binary
- Storage: SD card or USB flash drive
- Real-time vs. post-performance analysis tools
- Visualization of connection health over time
- Export compatibility with standard analysis tools
These are existing methods to read EDID information on different platforms. Our project aims to provide a portable, standalone alternative for field use.
Using read-edid (recommended):
# Install tools
sudo apt-get install read-edid
# Read and parse EDID
sudo get-edid | parse-edidUsing ddcutil:
# Install
sudo apt-get install ddcutil
# Detect monitors
ddcutil detect
# Read EDID
ddcutil --display 1 getvcp knownUsing xrandr (for connected displays):
# List connected displays
xrandr --verbose
# Get detailed output
xrandr --propDirect from sysfs:
# Find EDID in sysfs
find /sys/devices -name edid
# Read and decode EDID
cat /sys/class/drm/card0-HDMI-A-1/edid | edid-decodeThe Raspberry Pi has special HDMI configuration capabilities through its boot configuration system.
Reading EDID on Raspberry Pi:
# Get current EDID
tvservice -d /tmp/edid.dat
edidparser /tmp/edid.dat
# Or use standard Linux tools
sudo get-edid > edid.bin
parse-edid < edid.binBoot Configuration (/boot/firmware/config.txt or /boot/config.txt):
# Force specific HDMI mode
hdmi_group=2 # 1=CEA (TV), 2=DMT (Monitor)
hdmi_mode=82 # 1080p 60Hz
# Force HDMI output even if no display detected
hdmi_force_hotplug=1
# Boost HDMI signal (0-11, default 5)
config_hdmi_boost=7
# Ignore EDID and use safe mode
hdmi_safe=1
# Custom EDID file override
hdmi_edid_file=1
hdmi_edid_filename=custom_edid.datCommon HDMI modes:
- Mode 4: 720p 60Hz
- Mode 16: 1080p 60Hz
- Mode 82: 1080p 60Hz (DMT)
- Mode 97: 1080p 60Hz (reduced blanking)
Useful Raspberry Pi commands:
# Show current HDMI status
tvservice -s
# List supported modes
tvservice -m CEA
tvservice -m DMT
# Set specific mode
tvservice -e "CEA 16" # 1080p 60Hz
# Read I2C EDID directly (requires i2c-tools)
sudo i2cdetect -y 2
sudo i2cdump -y 2 0x50I2C Access on Raspberry Pi:
The Raspberry Pi exposes I2C buses that can be used to read EDID:
- I2C-0, I2C-1: Internal (used for HATs, camera, etc.)
- I2C-2: HDMI DDC (EDID at address 0x50)
Enable I2C in /boot/firmware/config.txt:
dtparam=i2c_arm=onUsing system_profiler:
# Get display information
system_profiler SPDisplaysDataTypeExtracting and decoding EDID (Apple Silicon):
On Apple Silicon Macs, the EDID lives under the IOPortTransportStateDisplayPort class with the key EDID (hex-encoded):
# Get raw EDID
ioreg -lw0 -r -c "IOPortTransportStateDisplayPort" | \
grep -o '"EDID"=<[^>]*>' | \
sed 's/"EDID"=<\(.*\)>/\1/' | \
xxd -r -p > edid.bin
# Decode with edid-decode (install via Homebrew)
brew install edid-decode
edid-decode edid.binExtracting and decoding EDID (Intel Macs):
On Intel Macs, the EDID is under the IODisplayConnect class with the key IODisplayEDID:
# Get raw EDID
ioreg -lw0 -r -c "IODisplayConnect" | \
grep -o '"IODisplayEDID"=<[^>]*>' | \
sed 's/"IODisplayEDID"=<\(.*\)>/\1/' | \
xxd -r -p > edid.bin
# Decode with edid-decode (install via Homebrew)
brew install edid-decode
edid-decode edid.binUsing third-party tools:
BetterDisplay - https://github.com/waydabber/BetterDisplay
DisplayMenu - https://apps.apple.com/us/app/display-menu/id549083868
SwitchResX - https://www.madrau.com/
Using PowerShell:
# Get monitor information
Get-WmiObject WmiMonitorID -Namespace root\wmi |
Format-List *
# Get EDID data
Get-WmiObject -Namespace root\wmi -Class WmiMonitorDescriptorMethods |
ForEach-Object {
$_.WmiGetMonitorRawEEdidV1Block(0)
}Using Command Prompt with WMIC:
Note:
wmicwas deprecated in Windows 10 21H1 and removed in Windows 11 22H2+. Use the PowerShell method above on newer systems.
wmic desktopmonitor get /format:list
wmic /namespace:\\root\wmi path WmiMonitorID get /format:listRegistry method:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Enum\DISPLAY\
EDID is stored as binary data under each display's Device Parameters key.
rem List all connected displays
reg query "HKLM\SYSTEM\CurrentControlSet\Enum\DISPLAY"
rem Find EDID data across all display subkeys
reg query "HKLM\SYSTEM\CurrentControlSet\Enum\DISPLAY" /s /f "EDID"This app may have some utility - https://apps.apple.com/us/app/genr8/id6751822886
IOS UIKit provides very limited display enumearaton capabilities. - https://developer.apple.com/documentation/uikit/uiscreen
Third-party tools:
- MonitorInfoView (NirSoft) - Free utility
- Custom Resolution Utility (CRU) - Includes EDID editor
- EDID Reader - Simple EDID extraction tool
Currently in R&D phase. This repository will document research findings, prototype designs, and eventually provide hardware schematics and software for building these tools.
Hardware EDID Tools:
- Raspberry Pi EDID modification tutorial - Reprogramming HDMI dummy plug I2C EEPROM
- CEC-Tiny-Pro - Arduino HDMI CEC sniffer requiring zero additional hardware
- hdmi-sniff - Python DDC traffic sniffer using Bus Pirate
Software Utilities:
- read-edid - get-edid and parse-edid tools for Linux
- ddcutil - Comprehensive DDC/CI monitor control utility
- edid-checked-writer - Python I2C EDID writer with verification
- edid-generate - Programmatic EDID generation
- linuxhw/EDID - Database of 141,906+ decoded EDIDs
Commercial Reference Devices:
- HDFury Dr HDMI (1080p) and Dr HDMI 4K - Multi-bank EDID managers
- Geffen DisplayPort Detective Plus - DisplayPort EDID manager with sink sniffing
Protocol Documentation:
- HDMI Protocols Demystified - Comprehensive technical overview
- hdl-util/hdmi - FPGA HDMI implementation with pixel clock tables
- EDID Fundamentals - Explanation of EDID fields
- EDID Reader - Online EDID decoder and analysis tool
Interesting Approaches:
- Lenkeng HDMI-over-IP reverse engineering - Potential platform for inline monitoring
- Cheap HDMI capture for Linux - Using Lenkeng devices with libpcap
I2C Addresses:
- 0x50: EDID EEPROM
- 0x37: DDC/CI (Monitor Control)
HDMI Pins:
- Pin 13: CEC (Consumer Electronics Control)
- Pin 15: SCL (I2C Clock)
- Pin 16: SDA (I2C Data)
- Pin 19: HPD (Hot Plug Detect)
Pixel Clock Frequencies:
- 640×480 @ 60Hz: 25.2 MHz
- 1920×1080 @ 60Hz: 148.5 MHz
- 3840×2160 @ 60Hz: 297 MHz
This is an early-stage research project. Feedback, suggestions, and contributions are welcome as we explore solutions to HDMI connectivity challenges in live performance contexts.
Target Users: Video artists, VJs, live visual performers, AV technicians
Design Principles: Cost-accessible, portable, user-friendly, open-source