|
EDID Complete Guide - Principles, Data Structure, and Operations

EDID Complete Guide - Principles, Data Structure, and Operations

What is EDID?

EDID (Extended Display Identification Data) is a data structure sent by displays (including monitors, TVs, projectors) to video sources (such as computers, HDMI devices) to describe their core capabilities:

  • Supported resolutions (such as 1920x1080, 3840x2160)

  • Refresh rates (such as 60Hz, 120Hz)

  • Audio formats (such as stereo, 5.1, Dolby)

  • Color depth and color space (such as RGB, YCbCr)

  • Manufacturer and product information (such as Dell U2723QE)

  • Preferred display mode

Video source devices automatically adapt to the best output configuration by reading the EDID.


Brief History of EDID

EraKey Events
VGA EraVESA launched EDID 1.0 in 1994, transmitted via DDC (based on I²C protocol)
HDMI EraHDMI 1.0 (2003) is compatible with EDID and introduces E-EDID, supporting higher resolutions and audio capabilities

📊 Core Standards Comparison

The following is strictly based on VESA official documentation:

Standard VersionRelease DateMax CapacityNew FeaturesTypical Applications
EDID 1.01994 (VESA)128 bytes• Basic display parameters (size/manufacturer) ** • Supports DDC 1.0 transmission for VGA/CRTEarly CRT monitors
EDID 1.1**1996128 bytes• Added standard timing extension (640×480@72Hz, etc.) ** • Defines monitor serial number fieldMulti-frequency CRT monitors
EDID 1.2**1999128 bytes• Introduced digital input identification (Bit7@0x14) ** • Supports sRGB color space descriptionEarly LCD monitors
EDID 1.3**2000128 bytes• Standardized gamma value field (0x17) ** • Added preferred timing mode flagMainstream LCD/plasma monitors
EDID 1.4**2006128 bytes + extension• Supports HDMI deep color (YCbCr 4:4:4) ** • Added 3D display descriptorHDMI 1.3 devices
E-EDID****(based on EDID 1.4)2005+256 bytes +• Introduced CEA-861 extension block (starting at 0x80)
• Supports HDMI audio formats (LPCM/Dolby/DTS)HDMI TVs/projectors
CEA-861-F**2013Extension block only• Defines HDR metadata (HDR10/HLG) ** • Added 21:9 ultrawide timing4K HDR TVs
DisplayID 1.3**2017 (VESA)4KB• Supports 8K@60Hz/VRR ** • Modular structure (Video/Audio/Container Blocks)High-end gaming monitors/8K TVs

💡 Current mainstream devices still use EDID 1.3/1.4 + CEA-861 extension**


⚙️ How EDID Works

When an HDMI device is connected:

  1. The display sends its EDID data to the graphics card through the DDC (Display Data Channel)

  2. The graphics card reads the display name, manufacturer, supported resolutions and refresh rates from the EDID

  3. The graphics card automatically selects the best resolution and refresh rate for output based on the EDID information


⚠️ Common Problems and Impacts

  • Physical failure: Display EDID damaged → no signal/wrong resolution

  • Peripheral issues: Poor quality splitter with EDID errors → forced resolution downgrade

  • Scenario impacts:

KVM switch/capture card compatibility issues

  • Multi-monitor mixed resolution anomalies

  • Hot-plugging HDMI causing mode reset

**

🔧 Solution: Use an EDID emulator to fix output parameters


🛠️ EDID Practical Operations Guide**

Step 1: Get EDID Data

1. Linux System

# Method 1: Directly read graphics card interface (requires root)
sudo cat /sys/class/drm/card0-HDMI-A-1/edid > edid.bin

# Method 2: Use standard tool package
sudo apt-get install edid-decode  # Install decoder
sudo get-edid | parse-edid       # Get and parse EDID

# Method 3: View brief info via xrandr
xrandr --verbose | grep -A10 EDID

2. Windows System

  1. Open “Device Manager”, expand “Monitors” category, right-click the target monitor and select “Properties”

  2. Switch to “Details” tab, select “Hardware IDs” from the property dropdown to get monitor identification information

  3. Use third-party tools (such as Monitor Asset Manager) to directly read and export complete EDID binary data

3. macOS System

# Extract raw EDID hex
ioreg -lw0 | grep IODisplayEDID | awk '{print $NF}' | xxd -r -p > edid.bin

# Use SwitchResX (GUI tool):
# 1. After installation, go to "Display EDID" tab
# 2. Directly view or export EDID

📊 Step 2: Parse EDID Content

Linux Standard Decoding Process

# Use edid-decode to parse binary file
edid-decode edid.bin

# Example output of key information:
Manufacturer: DEL Model: a102 Serial Number: 12345678  
Preferred timing: 2560x1440 @ 60 Hz  
Monitor name: Dell U2719D  
CEA-861 Extension: HDR10 supported

Windows Quick View

Read directly through Monitor Asset Manager:

  • Basic Display Parameters: Input type/size/gamma value

  • Supported Timings: All resolution and refresh rate combinations

  • Extension Blocks: HDMI-specific audio/color depth information


⚙️ Step 3: Modify EDID (Advanced Operations)

Applicable Scenarios

  1. The monitor itself doesn’t support native best resolution, need to force specific resolution output through custom EDID

  2. Compatibility issues when using KVM switch or HDMI capture card, need to modify EDID to match

  3. Resolution confusion or color anomalies in multi-monitor environment, need to unify or correct each monitor’s EDID information

Operation Methods

▸ Linux Platform

# 1. Generate custom EDID (requires edid-generator installed)
echo '/* Custom resolution block */' > custom.txt
edid-generator custom.txt > custom.bin

# 2. Force graphics card to use new EDID
sudo cp custom.bin /sys/kernel/debug/dri/0/HDMI-A-1/edid_override

▸ Windows Platform

  1. Use graphical tools like AW EDID Editor to open exported EDID file for modification

  2. After modification, force the custom EDID to the corresponding display output via registry or driver configuration

▸ Hardware-level Writing** Write modified EDID directly to emulator via devices like Dr HDMI**.


✅ Step 4: Verify Modification Results

Universal Verification Methods

# Linux re-read EDID
hexdump -C /sys/class/drm/card0-HDMI-A-1/edid

# Windows use Monitor Asset Manager for secondary verification

Expected Results:

  • Custom parameters should appear in the resolution list

  • Monitor properties display modified manufacturer/model information (such as Dell U2719D in the original example)


⚠️ Notes

  1. After modifying EDID, the checksum (last byte) must be recalculated, otherwise the graphics card will refuse to read the EDID data

  2. Custom resolutions and refresh rates cannot exceed the hardware capability limits of the monitor and graphics card, otherwise no signal output may occur

  3. Be sure to backup the original EDID data before modification for quick recovery if problems occur


📌 Common Problem Troubleshooting

ProblemPossible CauseSolution
No signal after modificationChecksum error/timing exceeds limitsUse edid-decode to verify validity
Resolution list not updatedGraphics card driver cache not clearedRestart system or uninstall/reinstall driver
Multi-monitor EDID conflictKVM switch EDID copy errorConfigure independent EDID emulation for each port

All operation steps are from original technical documentation, no third-party extensions.

Step 2: Parse EDID Structure

The following is a byte-by-byte technical analysis strictly based on the EDID 1.4 standard (128-byte base structure):

EDID 1.4 Binary Structure Complete Analysis

(Offsets in hexadecimal)

🔢 Header Area (0x00-0x07)

OffsetLengthValueDescription
0x00800 FF FF FF FF FF FF 00EDID fixed header, used to identify data validity

🏷️ Manufacturer Information (0x08-0x11)

OffsetLengthFieldEncoding Rules
0x082Manufacturer IDCompressed ASCII: **Byte1 = ((Byte1 & 0x7C) >> 2) + 64
Byte2 = ((Byte1 & 0x03) << 3) + ((Byte2 & 0xE0) >> 5) + 64
Byte3 = (Byte2 & 0x1F) + 64
0x0A2Product CodeLittle-endian format monitor model code
0x0C4Serial NumberManufacturer-defined serial number (may be empty)
0x101Week of Manufacture1-54 represents week number, 55=unspecified
0x111Year of ManufactureCurrent year - 1990 (e.g., 2023=33)

📊 Version Identification (0x12-0x13)**

OffsetFieldTypical ValueMeaning
0x12EDID Version0x01Major version number (still 1 in version 1.4)
0x13EDID Revision0x04Revision value for version 1.4

🖥️ Basic Display Parameters (0x14-0x18)

OffsetBit FieldDescription
0x14Bit7:6Video input type: **00=analog, 01=digital, 10=undefined
Bit5:4Sync signal type (valid for analog input)
Bit3:2Color bit depth (for digital input):
00=undefined, 01=6bit, 10=8bit
0x15Horizontal size (cm)Actual display width (0=unspecified)
0x16Vertical size (cm)Actual display height
0x17Gamma(Value+100)/100, e.g., 0x22=2.2
0x18Power management featuresBit7:DPMS standby support, etc.

🎨 Chromaticity Coordinates (0x19-0x23)**

Stores CIE 1931 color space gamut parameters:

  • 0x19-0x1A: Red X/Y (10-bit precision)

  • 0x1B-0x1C: Green X/Y

  • 0x1D-0x1E: Blue X/Y

  • 0x1F-0x20: White Point X/Y

⏱️ Timing Information Area

AreaOffsetDescription
Established Timings0x23-0x25Bitmap of 8 basic modes (VGA/720x400, etc.)
Standard Timings0x26-0x358 standard resolution descriptors, 2 bytes each: **- Byte 1: Horizontal pixels/8 - 31 (e.g., 1920=0xA0)
  • Byte 2: Aspect ratio (Bit7:6) + Refresh rate-60 (Bit5:0) | | Descriptor Block 1-4 | 0x36-0x7B | 18 bytes × 4, can store: • Detailed timing (from 0x36) • Monitor name (ASCII) • Serial number string • Range limit descriptor |

📌 Extension Marker (0x7E-0x7F)**

OffsetFunction
0x7ENumber of extension blocks (0=no extension)
0x7FChecksum: Sum of first 127 bytes modulo 256 = 0

🧩 Complete Example Analysis

Assuming an EDID fragment:

00 FF FF FF FF FF FF 00 4C 2D 01 00 01 00 00 00
0A 1E 01 03 80 35 1E 78 2A EE 91 A3 54 4C 99 26
0F 50 54 A5 6B 80 81 00 81 40 81 80 95 00 B3 00
D1 00 01 01 01 01 28 3C 80 A0 70 B0 23 40 30 20
36 00 07 44 21 00 00 1A 00 00 00 FD 00 38 4B 1E
53 11 00 0A 20 20 20 20 20 20 00 00 00 FC 00 53
41 4D 53 55 4E 47 0A 20 20 20 20 20 00 00 00 FF
00 48 4B 41 30 30 31 0A 20 20 20 20 20 20 00 C2

Key information extraction:

  1. Manufacturer and Product ID: Parse manufacturer code (e.g., SAMSUNG) from 0x08–0x0A, as well as product model and serial number

  2. EDID Version and Basic Display Parameters: Get EDID version number (e.g., 1.3), input type (digital/analog), screen size and gamma value from 0x12–0x18

  3. Supported Timing Modes: Extract preferred resolution and refresh rate from DTD (Detailed Timing Descriptor), such as 1920×1080@60Hz

  4. Monitor Name and Serial Number: Extract monitor name string (e.g., “SAMSUNG”) and serial number (e.g., “HKA001”) from descriptor tags (0xFC and 0xFF)


🔧 Technical Verification Points

  1. Checksum verification: Sum the first 127 bytes of EDID byte by byte, take the lower 8 bits and compare with the 128th byte (checksum), the result should be 0 for the data to be complete and valid

  2. Timing validity check: Pixel clock frequency in DTD must be within the monitor’s physical support range, and horizontal and vertical sync parameters must comply with VESA standard timing requirements

  3. Extension block consistency: Video data blocks (VIC numbers) in CEA-861 extension block must match the resolutions and refresh rates declared in the base block to avoid conflicting configurations

All parsing rules are from VESA EDID 1.4 standard documentation, no third-party extensions.

Step 3: Decode CEA Extension (HDMI Key)** View via edid-decode:

Video Data Block:
  VIC 16: 1920x1080@60Hz
  VIC 97: 3840x2160@60Hz
Audio Data Block:
  LPCM 2 channels 32/44.1/48 kHz

🔩 Advanced Application Scenarios**

When EDID modification is needed:

  • Force specific resolution output (e.g., 4K→1080p)

  • Solve capture card compatibility issues

  • Bypass device handshake failures

Tool Recommendations:

  • Linux: edid-generator

  • Windows: AW EDID Editor

  • Hardware: Dr HDMI emulator


💎 Summary

EDID is the “ID card” system of display technology:

  1. It allows graphics cards to automatically know the monitor’s capability parameters, achieving plug-and-play optimal image output

  2. From the 128-byte basic structure in the VGA era to the CEA-861 extension in the HDMI era, EDID has always played a key role in device handshake negotiation

  3. Mastering EDID parsing and modification methods can effectively troubleshoot monitor compatibility issues and optimize multi-screen display experience


[Note] All technical details, time nodes, and tool names are strictly from the original materials, no new information introduced.