Extended Display Identification Data
Extended Display Identification Data (EDID) is a standardized data structure developed by the Video Electronics Standards Association (VESA) that enables video display devices, such as monitors and televisions, to communicate their technical capabilities—including supported resolutions, refresh rates, color formats, and manufacturer details—to a connected video source like a graphics card or media player via the Display Data Channel (DDC).[1][2] This bidirectional communication, facilitated by the I²C protocol over DDC lines in interfaces like VGA, DVI, HDMI, and DisplayPort, supports plug-and-play functionality by allowing the source device to automatically configure optimal output settings, thereby ensuring compatibility and preventing issues such as signal mismatches or blank screens.[1][3] The EDID standard originated in 1994 with version 1.0, introduced alongside the initial DDC specification to standardize monitor identification and timing data exchange in an era of increasing display complexity.[1][4] Subsequent revisions addressed evolving needs: version 1.3, released in 2000, incorporated support for widescreen aspect ratios and additional timing descriptors; version 1.4, finalized in 2006 as part of the Enhanced EDID (E-EDID) framework, added comprehensive colorimetry data, including support for xvYCC and sYCC color spaces, along with refined monitor range limits for horizontal and vertical frequencies.[1][5] An interim version 2.0, proposed with a larger 256-byte structure for greater flexibility, was largely deprecated due to compatibility challenges, with VESA instead favoring extensible 128-byte blocks under E-EDID.[2] At its core, EDID consists of a mandatory 128-byte base block (Block 0) stored in the display's non-volatile memory, which outlines fundamental parameters such as the vendor ID (encoded via three-character ASCII codes), product code, serial number, display size, and basic timing information derived from established VESA standards like Generalized Timing Formula (GTF) or Coordinated Video Timings (CVT).[1][5] Optional extension blocks—each also 128 bytes—allow for expanded details, including detailed timing descriptors for specific resolutions (up to four per block), color point data for white and red/green/blue primaries, and vendor-specific extensions like those from the Consumer Electronics Association (CEA) for HDMI audio/video capabilities.[1][2] The structure concludes with checksums to verify data integrity during transmission. EDID's role extends beyond basic identification, influencing modern AV systems by enabling features like multi-monitor setups, hot-plugging, and adaptive syncing technologies, though challenges such as incomplete implementations or EDID corruption can necessitate emulators or management tools for reliable operation.[1] In 2009, VESA introduced DisplayID as a modular successor with variable-length data blocks for broader device support, including consumer electronics, but EDID persists as the dominant format due to its backward compatibility and widespread adoption across legacy and current interfaces.[2][6]Overview and Purpose
Definition and Core Function
Extended Display Identification Data (EDID) is a standardized 128-byte binary data structure embedded in digital displays, designed to communicate the display's capabilities to a video source device, such as a graphics processing unit (GPU).[5] Published by the Video Electronics Standards Association (VESA), EDID serves as a metadata format that describes essential display characteristics, including supported resolutions, refresh rates, color depth and formats, and—in cases with extensions—audio capabilities.[7] This enables automatic configuration of the video signal for compatibility and optimal performance, supporting plug-and-play interoperability between displays and sources.[3] The primary role of EDID is to inform the source device about the display's operational limits and preferred timings, allowing the GPU to generate an appropriately formatted output signal without requiring user adjustment.[5] For instance, it conveys details on horizontal and vertical pixel counts, frame rates, and pixel encoding schemes to prevent signal mismatches that could result in blank screens or distorted images.[3] EDID evolved from foundational Display Data Channel (DDC) standards to provide a more comprehensive capability exchange.[8] EDID is transmitted from the display to the source during the connection handshake via the Enhanced Display Data Channel (E-DDC), which uses the I²C serial bus protocol at a standard address like 0x50.[5] The source initiates a read request, and the display responds by sending the 128-byte block (or multiple blocks if extensions are present), ensuring the data is accessible immediately upon link establishment.[7] Key elements of the EDID structure include a fixed 8-byte header with the pattern 00 FF FF FF FF FF FF 00 for easy identification, followed by vendor-specific details such as a 3-character Industry Standard Architecture (ISA) code for the manufacturer ID, a 16-bit product code, a 32-bit serial number, and manufacturing timing encoded as week and year values.[5] These identification components allow the source to uniquely recognize the display model and apply tailored settings, while the overall structure concludes with a checksum byte to verify data integrity.[3]Role in Video Interfaces
Extended Display Identification Data (EDID) integrates with video interfaces primarily through the VESA Display Data Channel (DDC) protocol, which operates over an I²C serial bus to enable the source to read the display's capabilities, with the optional DDC/CI extension providing bidirectional communication for monitor control.[9] The DDC/CI uses specific I²C slave addresses—typically 50h/51h (A0h/A1h) for EDID read operations and 37h for CI commands—to allow the source to query the display's capabilities without interrupting video transmission.[9] This setup supports plug-and-play functionality by ensuring the source can dynamically retrieve and interpret EDID data to configure output signals appropriately.[5] In various interfaces, EDID transmission occurs via dedicated channels: HDMI employs the DDC lines (pins 15 for SCL and 16 for SDA) powered by +5V on pin 18, facilitating EDID exchange alongside TMDS video signals.[9] DisplayPort maps DDC to its bidirectional AUX channel using an I²C-over-AUX protocol, which emulates standard I²C transactions at up to 1 Mbps (or faster in later versions) for EDID reads while handling link training and status.[10] VGA supports EDID optionally over I²C on pins 12 (SDA) and 15 (SCL) with +5V on pin 9, though adoption is less universal due to its analog nature.[9] For USB-C and Thunderbolt, EDID integrates through DisplayPort Alternate Mode or embedded HDMI signaling, leveraging the USB-C connector's SuperSpeed pairs reconfigured for video protocols.[11] The handshake process begins upon device connection, where hot-plug detection—signaled by voltage on dedicated pins (e.g., HPD in HDMI/DisplayPort or +5V in VGA)—prompts the source to query the display's EDID within 20 ms.[9] The base 128-byte EDID block (Block 0) is read first via sequential or random I²C accesses, followed by any extension blocks (up to 255, totaling 32 KB) indicated by a segment pointer register at I²C slave address 0x30 in E-DDC, allowing comprehensive capability reporting.[9] This process ensures reliable signal negotiation, but in setups with extenders, switches, or daisy-chained displays, EDID emulation is often employed to mimic valid data blocks and prevent handshake failures that could result in no signal or black screens.[3] For instance, in an HDMI connection, the source reads the display's EDID to select a supported mode like 4K at 60 Hz with HDR metadata if advertised in the extension blocks, optimizing output without manual configuration.[3]Historical Development
Origins and Early Standards
The Extended Display Identification Data (EDID) standard originated from efforts by the Video Electronics Standards Association (VESA) to address inconsistencies in monitor capability reporting during the early days of personal computing, where systems often relied on manual configuration or limited interfaces like the VESA BIOS Extension (VBE) for video modes without standardized display feedback.[3] Introduced in 1994 as part of the Display Data Channel (DDC) standard version 1.0, EDID provided a structured method for monitors to convey identification and timing information to graphics adapters via the I²C bus on VGA connectors, enabling more reliable plug-and-play functionality beyond VBE's video adapter focus.[8] This development was influenced by emerging bus standards like EISA and PCI, which emphasized standardized hardware communication in PCs.[12] Version 1.0 of EDID, released in August 1994 within DDC standard version 1.0 revision 0, established the foundational 128-byte binary format stored in a monitor's EEPROM.[8] The structure included a fixed header (bytes 0-7 set to 00h), a manufacturer identifier (bytes 8-9 using three-character codes), product code (bytes 10-11), serial number (bytes 12-15), manufacturing date (bytes 16-17 as week and year), EDID version and revision (bytes 18-19), and timing data encompassing established timings (byte 20 for legacy VESA modes), standard timings (bytes 21-35 for 8x aspect ratio and horizontal pixels), and four detailed timing descriptors (bytes 36-125, each 18 bytes for custom modes or reserved).[12] Version 1.1, introduced in April 1996 via EDID standard version 2 revision 0, built on this by defining previously unused fields in the descriptors and adding support for monitor-specific information such as serial numbers and manufacturing dates in a more robust manner, while maintaining backward compatibility.[8] EDID version 1.2, released in November 1997 under EDID standard version 3, further refined the format by providing additional definitions for existing data fields, including enhanced monitor descriptors within the 18-byte blocks to describe features like range limits, and laying groundwork for extensibility without altering the core 128-byte size.[13] Version 1.3, formalized on February 9, 2000, in the Enhanced EDID (E-EDID) standard release A revision 1, introduced key advancements such as support for LCD-specific timings via new descriptor tags, color point data for chromaticity coordinates, and secondary Generalized Timing Formula (GTF) curve coefficients in the range limits descriptor, while mandating certain descriptors like monitor name and range limits for better interoperability.[8] These early versions up to 1.3 emphasized conceptual standardization for CRT-dominated displays but paved the way for 1.4 enhancements in handling diverse modern panels.[8]Revision Timeline
The EDID standard reached version 1.4 in September 2006, as part of the VESA Enhanced Extended Display Identification Data (E-EDID) Release A, Revision 2, which expanded the format to support up to four 18-byte descriptors for detailed timing information, introduced Coordinated Video Timings (CVT) support alongside the existing Generalized Timings Formula (GTF), included optional secondary GTF curve parameters in the display range limits, and added 3-byte CVT timing codes for more precise video mode definitions.[5] This revision built on the foundations of earlier versions like 1.3 by enhancing timing flexibility while maintaining backward compatibility, allowing a total structure of up to 256 bytes when including one 128-byte extension block.[5] In 2000, VESA formalized the E-EDID standard to incorporate extension blocks systematically, providing guidelines for adding multiple optional blocks beyond the base 128-byte structure to accommodate evolving display capabilities without altering the core format.[5] Following version 1.4, VESA issued no major revisions to the core EDID format, instead directing development efforts toward specialized extension blocks, such as the Consumer Technology Association (CTA) timing extension under CEA-861, to address modern video interfaces and content types.[14] Microsoft introduced a Vendor Specific Data Block (VSDB) within the EDID extension framework specifically for head-mounted displays (HMDs) and specialized monitors, starting with version 1 for Windows Mixed Reality HMDs in Windows 10 version 1703 (April 2017), with additional versions for non-Microsoft compositors in 2018 and further enhancements in 2020, enabling identification of Windows-specific features like compatibility with mixed reality compositors and desktop integration flags to ensure proper handling in Windows 10 and later versions.[15] VESA continues to maintain EDID 1.4 as a legacy standard for broad compatibility in display interfaces, while actively promoting DisplayID as its successor for supporting higher resolutions, tiled displays, and future-oriented features.[16]Core EDID Format (Version 1.4)
Overall Structure
The Enhanced Extended Display Identification Data (E-EDID) version 1.4 defines a fixed 128-byte data block that encapsulates a display device's identification and capability information in a standardized format for transmission over video interfaces.[5] This block, known as Block 0, begins with an 8-byte header occupying bytes 0 through 7, consisting of the fixed pattern 00h FFh FFh FFh FFh FFh FFh 00h, which serves to identify the structure as an EDID block.[5] Bytes 8 through 17 provide core identification details: bytes 8-9 encode the manufacturer's name using a 3-character International Standards Association (ISA) code packed into two bytes; bytes 10-11 hold the 16-bit product identification code assigned by the manufacturer; bytes 12-15 contain the optional 32-bit serial number; and bytes 16-17 specify the manufacture week (1-52, or 0 for model year) and year (relative to 1990).[5] Bytes 18-19 specify the EDID structure version (01h) and revision (04h for version 1.4). Bytes 20-23 cover basic display parameters, including video input signal type (byte 20), maximum horizontal and vertical screen size or aspect ratio (byte 21), display transfer characteristic (gamma, byte 22), and feature support such as standby modes and RGB color (byte 23). Bytes 24-34 provide chromaticity data, encoding the red, green, blue, and white point coordinates in fixed-point format for color management.[5] Bytes 35-37 (offsets 0x23-0x25) cover established timings in a 3-byte field, using 19 bits (plus reserved) to indicate support for up to 19 predefined video modes, such as 800×600 at 60 Hz, with byte 37 including one additional mode plus reserved bits for manufacturer-specific timings.[5] Bytes 38-53 (offsets 0x26-0x35) then detail standard timings across eight 2-byte blocks, each specifying horizontal and vertical pixel counts, aspect ratio, and a refresh rate range multiplier.[5] The bulk of the timing and capability data resides in bytes 54-125 (offsets 0x36-0x7D), organized into four 18-byte descriptor blocks that report detailed video timings, monitor characteristics, or other attributes to convey the display's operational limits.[5] These descriptors play a key role in reporting the display's supported resolutions and features to the connected source device. Finally, bytes 126-127 include the extension flag (byte 126, indicating the number of optional 128-byte extension blocks that follow) and the checksum (byte 127, ensuring the sum of all 128 bytes equals 0 modulo 256 for data integrity).[5] Extension blocks, if present, each begin with a tag byte (such as 02h for the CEA extension) followed by a version byte, allowing for additional standardized data structures beyond the base block.[5]Header and Identifier Blocks
The header of the EDID 1.4 structure occupies bytes 0 through 7 and consists of a fixed byte sequence: 00h followed by six FFh bytes and concluding with 00h.[5] This pattern serves as a unique identifier to signal the presence of a valid EDID block, distinguishing it from raw Display Data Channel (DDC) data or other non-EDID content transmitted over the interface.[5] It ensures that source devices, such as graphics cards or media players, can reliably detect and parse the structure during initialization.[5] Immediately following the header, bytes 8 through 17 form the vendor identification block, which provides essential details for uniquely recognizing the display device.[5] Bytes 8 and 9 encode the manufacturer's three-character ASCII name using a compressed 5-bit code format derived from the EISA PnP ID scheme, where each character (A-Z) maps to values 1 through 26, packed into 10 bits across the two bytes with the most significant bit of each nibble set to zero.[5] For example, the code for "SAM" (Samsung) would be represented as 0xDAh in byte 8 and 0x4Dh in byte 9.[5] Bytes 10 and 11 specify a 16-bit product code assigned by the manufacturer, stored in little-endian order (least significant byte first), allowing differentiation among models from the same vendor.[5] Bytes 12 through 15 hold a 32-bit serial number, also in little-endian format, ranging from 0 to 4,294,967,295, which may be omitted (set to all zeros) if not used by the manufacturer.[5] The identification block concludes with manufacturing timing data in bytes 16 and 17.[5] Byte 16 indicates the week of manufacture as an 8-bit value from 1 to 52 (or 53/54 for leap years), with 0x00 denoting unspecified or reserved for model year usage; if set to 0xFF, it signals that byte 17 represents a model year rather than a manufacture year.[5] Byte 17 provides the year as an 8-bit offset from 1990 (e.g., 0x11 for 2001), supporting dates up to 2245, or the model year if flagged accordingly.[5] Together, these fields enable source devices to uniquely identify the display, cache its capabilities for subsequent connections, and support features like firmware updates or inventory tracking without re-querying the full EDID.[5] Byte 126, known as the extension flag, is an 8-bit unsigned integer (0x00 to 0xFF) that specifies the number of optional 128-byte extension blocks appended after the base EDID structure.[5] A value of 0x00 indicates a basic EDID without extensions, while higher values (up to 0xFE or 0xFF, depending on block map usage) denote enhanced EDID (E-EDID) with additional data such as CTA-861 timings or color management.[5] This byte allows sources to determine the total data length and process extensions sequentially for comprehensive display configuration.[5] The final byte, 127, is the checksum, an 8-bit value (0x00 to 0xFF) calculated such that the sum of all 128 bytes in the block equals 0 modulo 256.[5] It provides a simple integrity check against transmission errors or tampering; sources must recompute the sum upon receipt, and any mismatch invalidates the block, prompting retries or fallback modes.[5] This mechanism ensures reliable delivery of identification and capability data over the DDC bus.[5]Established Timings and Standard Timings
The established timings block in the EDID 1.4 structure provides a compact bitmap representation of support for predefined VESA Display Monitor Timings (DMT), allowing displays to signal compatibility with common legacy and standard video modes without requiring detailed descriptors.[5] This block occupies three bytes (offsets 0x23 to 0x25), forming a 24-bit field where each bit set to 1 indicates factory-tested support for a specific timing, ensuring the image is properly sized and centered on the display.[5] The first two bytes cover 16 standard VESA modes, while the third byte includes one additional mode plus reserved bits for manufacturer-specific timings.[5] Representative examples from the bitmap include bit 0 of the first byte (offset 0x23, bit 0) for 720 × 400 at 70 Hz, bit 5 for 640 × 480 at 60 Hz, and bit 7 for 1024 × 768 at 60 Hz; in the second byte (offset 0x24), bit 7 supports 800 × 600 at 72 Hz, and bit 0 supports 1280 × 1024 at 75 Hz; the third byte (offset 0x25) has bit 7 for 800 × 600 at 56 Hz, with bits 6-0 reserved or for proprietary use.[5] In EDID 1.4, an optional Established Timings III descriptor (tag F7h in one of the 18-byte descriptor blocks) extends this with bit flags for up to 44 additional modes from the VESA DMT standard, such as 1280 × 1024 at 60 Hz (bit 4 of the first byte in the descriptor), further enhancing support for higher resolutions.[5] These timings prioritize well-known VESA standards, enabling graphics sources to quickly select compatible modes from a shared set of up to 25 predefined options (17 base established plus 8 from the extension) plus more via the III descriptor.[5] The standard timings block follows immediately, spanning 16 bytes (offsets 0x26 to 0x35) for eight 2-byte entries that define additional common timings beyond the established bitmap, ordered by priority with the first entry often indicating the preferred mode.[5] Each entry's first byte specifies the horizontal active pixels H using the formula H = 8 \times (V + 31), where V is the byte value (ranging from 0x01 to 0xB3 for H from 256 to 1680 pixels); unused entries are padded with 0x01 0x01.[5] For example, V = 0x31 (49 decimal) yields H = 8 \times (49 + 31) = 640 pixels, while V = 0x45 gives 800 pixels, V = 0x61 gives 1024 pixels, and V = 0x81 gives 1280 pixels.[5] The second byte of each entry encodes the aspect ratio in bits 7-6 (00 binary for 16:10, 01 for 4:3, 10 for 5:4, 11 for 16:9) and the vertical refresh rate in bits 5-0 as a code R where the rate is $60 + R Hz (ranging from 60 Hz for R=0 to 123 Hz for R=63).[5] For instance, a second byte of 0x40 (binary 0100 0000) indicates 4:3 aspect at 60 Hz, while 0xC1 (binary 1100 0001) specifies 16:9 at 61 Hz.[5] Together, the established and standard timings allow sources to negotiate up to 25 common modes efficiently, with custom timings available through detailed descriptors for non-standard requirements.[5]Detailed Timing Descriptors
Detailed Timing Descriptors in the EDID 1.4 main block provide a mechanism for specifying custom video timings beyond the predefined established and standard timings, enabling support for preferred or non-standard display modes. Each descriptor occupies an 18-byte block, with up to four such blocks available in the 128-byte EDID structure, typically located at offsets 36h–47h, 48h–59h, 5Ah–6Bh, and 6Ch–7Dh. The first descriptor often represents the preferred timing mode, which is the native resolution and refresh rate optimized for the display. These descriptors allow precise definition of pixel clock, active and blanking periods, synchronization parameters, and additional attributes like image size and sync polarities, facilitating compatibility with diverse video interfaces such as VGA, DVI, and HDMI.[5] The format of each 18-byte block is structured as follows, with all multi-byte values stored in little-endian order:| Byte | Description | Details |
|---|---|---|
| 0-1 | Pixel Clock | 16-bit value representing the clock frequency in units of 10 kHz (divided by 10 for MHz). For example, 0258h (600 decimal) corresponds to 60 MHz, commonly used for 1024×768 resolution at 60 Hz. Range: 10 kHz to 6553.5 MHz. |
| 2 | Horizontal Active Video (low 8 bits) | Lower 8 bits of the horizontal active pixels. |
| 3 | Horizontal Blanking (low 8 bits) | Lower 8 bits of the horizontal blanking pixels. |
| 4 | Horizontal Active Video (high 4 bits) + Horizontal Blanking (high 4 bits) | Bits 7–4: high 4 bits of horizontal active; bits 3–0: high 4 bits of horizontal blanking. Full horizontal active = (byte 4 >> 4 << 8) | byte 2; full blanking similarly. |
| 5 | Vertical Active Video (low 8 bits) | Lower 8 bits of vertical active lines. |
| 6 | Vertical Blanking (low 8 bits) | Lower 8 bits of vertical blanking lines. |
| 7 | Vertical Active Video (high 4 bits) + Vertical Blanking (high 4 bits) | Bits 7–4: high 4 bits of vertical active; bits 3–0: high 4 bits of vertical blanking. |
| 8 | Horizontal Sync Offset (low 8 bits) | Lower 8 bits of the offset from active video to sync start. |
| 9 | Horizontal Sync Pulse Width (low 8 bits) | Lower 8 bits of horizontal sync duration. |
| 10 | Vertical Sync Pulse Width (high 4 bits) + Vertical Sync Offset (low 4 bits) | Bits 7–4: vertical sync pulse width (lower 4 bits); bits 3–0: vertical sync offset (lower 4 bits). |
| 11 | Horizontal/Vertical Sync High Bits | Bits 7–6: H sync offset high 2 bits; bits 5–4: H sync pulse high 2 bits; bits 3–2: V sync offset high 2 bits; bits 1–0: V sync pulse high 2 bits. |
| 12 | Horizontal Image Size (low 8 bits) | Lower 8 bits of horizontal image size (in cm/10 or %). |
| 13 | Vertical Image Size (low 8 bits) | Lower 8 bits of vertical image size (in cm/10 or %). |
| 14 | Horizontal Image Size (high 4 bits) + Vertical Image Size (high 4 bits) | Bits 7–4: high 4 bits of horizontal image size; bits 3–0: high 4 bits of vertical image size. If byte 14 = 00h and bytes 12-13 indicate no size, aspect ratio is encoded instead. |
| 15 | Horizontal Border | Horizontal border size in pixels (typically 0 for modern displays). |
| 16 | Vertical Border | Vertical border size in lines (typically 0). |
| 17 | Flags | Bit-level attributes for timing characteristics (detailed below). |
- Bit 7: Interlaced (1 = interlaced mode, 0 = progressive/non-interlaced).
- Bits 6–5: Stereo viewing support (00 = no stereo; 01 = field sequential right image when viewed from left; 10 = field sequential left image when viewed from right; 11 = 4-way interleaved or side-by-side).
- Bit 4: Sync signal type (1 = separate horizontal and vertical syncs; 0 = analog composite sync on HSync).
- Bit 3: Vertical sync polarity (1 = positive, 0 = negative).
- Bit 2: Horizontal sync polarity (1 = positive, 0 = negative).
- Bits 1–0: Reserved (must be 00).
Monitor Name and Range Limit Descriptors
In the EDID 1.4 format, the Monitor Name Descriptor occupies an 18-byte block within one of the four descriptor fields, typically used to provide a human-readable identifier for the display device. This descriptor is identified by tag 0xFC at byte 2, with bytes 0 and 1 set to 00h, byte 3 set to 00h, and bytes 5 through 17 containing an ASCII-encoded string of up to 13 characters for the monitor name, padded with spaces (0x20h) if necessary and often terminated with a line feed (0x0Ah); byte 4 is unused (00h). For instance, the name "Samsung SyncMaster" would be represented by the corresponding ASCII values in these bytes, enabling operating systems and applications to display the model name to users. Although optional in EDID 1.4, this descriptor is recommended to facilitate device recognition and troubleshooting.[5] The Monitor Range Limits Descriptor, also an 18-byte block tagged with 0xFD at byte 2 (with bytes 0 and 1 as 00h), specifies the display's supported frequency ranges and maximum pixel clock to guide video sources in generating compatible timings. Byte 3 encodes the minimum vertical refresh rate in Hz (values 00h–FFh, potentially offset by up to 768 Hz via flags in byte 8), byte 4 the maximum vertical rate, byte 5 the minimum horizontal scan rate in kHz (similarly offsettable), byte 6 the maximum horizontal rate, and byte 7 the maximum supported pixel clock as clock rate in MHz / 10 (e.g., 0Dh for 130 MHz, rounded to nearest 10 MHz). Byte 8 contains flags for rate offsets (bits 3–2 for vertical, bits 1–0 for horizontal) and GTF support (bit 7 traditionally for basic GTF, though extended in 1.4), while byte 9 indicates the timing support type: 00h for default GTF, 01h for range limits only, 02h for secondary GTF, 03h for both GTF variants, or 04h for CVT support. Bytes 10–17 are reserved (00h) unless secondary GTF is indicated, in which case they store curve parameters including the start break frequency (byte 11, in kHz/2), C coefficient ×2 (byte 12), M coefficient (bytes 13–14, little-endian), K (byte 15), and J coefficient ×2 (byte 16), with byte 17 often set to 0x0Ah. This descriptor is optional but recommended for monitors supporting continuous frequencies, allowing sources to apply the Generalized Timing Formula (GTF) to derive timings when detailed or standard timings are absent; GTF compliance is signaled by the continuous frequency bit (bit 3 of byte 17h in the main EDID block). The GTF enables timing generation via equations adjusting blanking duty cycles based on frequency, such as scaling factors involving C and J for vertical total calculations relative to pixel clock and horizontal totals.[5][17]Advanced Descriptors in EDID 1.4
Display Range Limits
The Display Range Limits descriptor in EDID 1.4 specifies the operational boundaries for a display, including the minimum and maximum vertical sync frequencies (in Hz, bytes 5 and 6), horizontal sync frequencies (in kHz, bytes 7 and 8), and the maximum supported pixel clock (in units of 10 MHz, byte 9).[5] These values allow graphics sources to generate timings within the display's capabilities, with optional offset flags in byte 4 (bit 5 for vertical, bit 3 for horizontal) extending ranges beyond 255 Hz or kHz for high-performance monitors.[5] When the Generalized Timing Formula (GTF) secondary curve is supported, byte 10 is set to 02h, and bytes 11 through 16 encode the GTF secondary curve parameters: start break frequency in kHz divided by 2 (byte 11), offset constant C multiplied by 2 (byte 12), multiplier M as 16-bit value (bytes 13-14, LSB first), scaling factor K (byte 15), and adjustment constant J multiplied by 2 (byte 16), with byte 17 reserved (00h).[5][17] This secondary curve refines the default GTF by incorporating these parameters for non-linear blanking calculations, particularly useful for CRTs and LCDs requiring adjusted front and back porch margins to optimize image centering and stability across varying resolutions. The GTF formula for horizontal blanking under this curve is given by H_{\text{blank}} = \round\left( \frac{A \cdot V_{\text{pixels}} + B \cdot V_{\text{freq}} + C}{P_{\text{clock}} / H_{\text{pixels}}} + D \right), where A, B, C, and D derive from the encoded coefficients, and a similar expression applies to vertical blanking; this approach ensures compliant timings by scaling blanking intervals based on vertical dimensions and refresh rates.[17] Support for Coordinated Video Timings (CVT) is indicated by setting byte 10 to 04h within the descriptor, signaling the display's ability to handle timings optimized for flat-panel efficiency with reduced blanking overhead.[5] Bytes 11-17 then detail: version (byte 11=01h), maximum active pixels per line (16-bit little-endian, bytes 12-13), supported aspect ratios (byte 14, bits 7-4: 4:3=0001b, 16:10=0010b, 16:9=0100b, 5:4=1000b; bits 3-0 reserved), preferred vertical refresh rate (byte 15, bits 1-0: 00b=60 Hz, 01b=75 Hz, 10b=85 Hz, 11b=50 Hz; bits 7-2 reserved), bytes 16-17 reserved.[5] This enables sources to select CVT timings with minimal blanking for LCD and digital displays. The core CVT pixel clock formula is P_{\text{clock}} = H_{\text{total}} \times V_{\text{total}} \times R_{\text{refresh}}, which coordinates horizontal and vertical totals to minimize blanking and support modular clock steps of 0.25 MHz, prioritizing bandwidth efficiency for LCD and digital displays.[18]Color Point and Management Data
In EDID version 1.4, color point data is primarily conveyed through the display chromaticity coordinates block, which specifies the color characteristics of the display's primaries and white point using CIE 1931 chromaticity coordinates.[5] This block occupies bytes 19h through 22h of the main EDID structure, encoding 10-bit binary fractions for the red (Rx, Ry), green (Gx, Gy), blue (Bx, By), and white (Wx, Wy) points, with low-order bits in bytes 19h and 1Ah, and high-order bits in bytes 1Bh through 22h.[5] The values represent fractions of the CIE 1931 (2°) color space, scaled by a factor of 1024 for precision (accurate to approximately ±0.0005), allowing video sources to map content colors accurately to the display's native gamut.[5] The white point defined here serves as the default reference (typically the factory-set value at power-on), often aligned with standard illuminants like D65 for sRGB compliance.[5] A dedicated sRGB support flag in bit 2 of the feature support byte (18h) indicates if the display adheres to the sRGB color space standard (IEC 61966-2-1), requiring the chromaticity coordinates to match sRGB primaries and the D65 white point (approximately x=0.3127, y=0.3290).[5] When this flag is set, sources apply sRGB gamma (approximately 2.2) and color space transformations without additional calibration, ensuring consistent rendering on compatible displays.[5] For displays supporting multiple white points or custom color spaces, the Additional Color Point Descriptor (tag FBh) provides optional extensions in the monitor descriptor blocks (bytes 36h–7Dh).[5] Each 18-byte descriptor begins with the header 00 00 00 FB 00, followed by data for up to two additional white points: byte 5 specifies the index (01h–FFh, with 00h indicating no data), bytes 6–8 encode the white-x coordinate (10 bits, low bits in byte 6), bytes 9–11 encode white-y similarly, and byte 12 provides the associated gamma value (00h–FEh representing (gamma × 100) – 100, e.g., 120h for gamma 2.2; FFh defers to extension blocks).[5] Bytes 13–17 are padding or line feeds (0Ah 20h). With up to three such descriptors available (after allocating blocks for other uses like range limits), this supports defining up to six color points total, including the default, for scenarios like D65 (sRGB/BT.709) or custom primaries in wide-gamut displays.[5] This enables sources to select appropriate white points and gamma for accurate color reproduction, particularly in professional or calibrated environments.[5] The Color Management Data Descriptor (tag F9h) further enhances color handling by providing coefficients for advanced transformations, as defined in the VESA Display Color Management (DCM) Standard Version 1.[5] This optional 18-byte block starts with header 00 00 00 F9 00, byte 5 as version (typically 03h), and bytes 6–17 containing six 16-bit signed polynomial coefficients (LSB first): a3 and a2 for red (bytes 6–9), green (10–13), and blue (14–17).[5] These coefficients form part of a 3x3 color management matrix or polynomial model to convert between the display's native primaries and standard spaces like sRGB or Adobe RGB (1998), accounting for deviations from ideal primaries.[5] For instance, on a wide-gamut display supporting DCI-P3, flags or combined chromaticity data signal the source to apply BT.709-to-DCI-P3 mapping, improving color accuracy in HDR or cinematic content without overdriving the panel.[5] Byte-level flags are not explicitly defined in base EDID 1.4 for specific spaces like DCI-P3, but the structure integrates with extension blocks for such indications.[5]CVT Timing Support
The CVT 3-byte timing codes descriptor in EDID 1.4 is an 18-byte monitor descriptor identified by tag F8h in bytes 0–4 (00h 00h 00h F8h 00h), followed by version byte 5 set to 01h, allowing up to four 3-byte codes in bytes 6–17 to specify supported Coordinated Video Timings (CVT) modes not covered by established or standard timings.[5] Each 3-byte code encodes the vertical active pixels (11 bits for N = floor((V_active - 1)/2), derived as N = ((byte 7 bits 7-5 << 8) | byte 6), then V_active = 2 * N + 1), aspect ratio (2 bits in byte 7 bits 3–2: 00b for 4:3, 01b for 16:9, 10b for 16:10, 11b for 15:9), preferred vertical refresh rate (2 bits in byte 8 bits 6–5: 00b for 50 Hz, 01b for 60 Hz, 10b for 75 Hz, 11b for 85 Hz), and five flag bits in byte 8 bits 4–0 indicating supported refresh rates and blanking options (e.g., bit 0 for reduced blanking version 1 with ~0.5% Hsync offset, bit 1 for reduced blanking version 2).[5] The horizontal active pixels are then computed as H_active = 8 × round((V_active × aspect_ratio_fraction) / 8), where aspect_ratio_fraction is 4/3, 16/9, 16/10, or 15/9 as appropriate (ensuring multiple of 8).[5] Full timing parameters, including horizontal total, are derived by applying the CVT standard formulas to the decoded parameters, prioritizing reduced blanking where flagged to minimize non-active periods.[19] For reduced blanking (version 1), the horizontal blanking is calculated to achieve an ideal duty cycle near 20% while ensuring minimum sync and porch durations (e.g., horizontal front porch ≥ 1.25% of active, sync width ≥ 8% of total, back porch ≥ 4.8 µs), resulting in H_total = H_active + H_blank.[19] A representative example is the code for 1920×1080 at 60 Hz with reduced blanking: byte 6 = 0x1B, byte 7 = 0x48 (high bits 010b in 7-5 for N=539=0x21B, aspect 01b for 16:9 in 4-3), byte 8 = 0x41 (preferred 60 Hz with bits 6-5=01b, bit 0 set for reduced blanking v1), yielding H_active = 1920, and per CVT 1.1 formulas, H_total = 2200 pixels (H_blank = 280) with pixel clock 148.5 MHz.[5][19] This descriptor enables precise signaling of CVT modes optimized for flat-panel displays, reducing vertical blanking to as low as 460 µs and horizontal blanking variably (e.g., 280 pixels for the above example versus 530 for standard blanking), thereby supporting higher refresh rates on bandwidth-limited links without excessive pixel clock increases.[19] The additional standard timings descriptor, using tag FAh in bytes 0–4 (00h 00h 00h FAh 00h) and version 01h in byte 5, extends the core EDID's eight 2-byte standard timings (bytes 38h–45h) by providing six more 2-byte entries in bytes 6–17 (e.g., bytes 6–7 for timing 9, up to bytes 16–17 for timing 14), each encoding horizontal active ÷ 8 – 31 (6 bits), aspect ratio and refresh – 60 (10 bits).[5] These additional codes allow monitors to declare support for extra resolutions like 1440×900 or 1680×1050 at common rates, using the same compact format as the core block but placed in a detailed timing descriptor slot for flexibility in modern LCD configurations.[5] Together, these features in EDID 1.4 facilitate efficient communication of CVT-based timings, emphasizing minimal blanking to align with LCD characteristics and enable higher performance without compatibility issues from legacy CRT-oriented standards.[5]Additional Video Timing Codes
The Established Timings III descriptor, introduced in EDID 1.4, serves as a compact mechanism to indicate support for additional VESA Discrete Monitor Timings (DMT) beyond those covered by the base Established Timings I and II fields or standard timing identifiers.[5] This optional monitor descriptor, tagged with F7h, allows displays to signal compatibility with up to 44 predefined video modes in a bit-mapped format, promoting broader interoperability without requiring space-intensive detailed timing blocks.[5] The descriptor occupies an 18-byte block within the monitor descriptors section of the EDID base structure (bytes 108-125 or similar positions). It begins with the standard short descriptor header (bytes 0-2: 00h 00h 00h), followed by the tag byte (byte 3: F7h), a revision byte (byte 4: typically 0Ah), and then 12 bytes of bit flags (bytes 5-16) where each set bit (1) denotes support for a specific VESA DMT mode.[5] The final two bytes (17-18) are reserved and set to 00h. Each bit maps to a unique timing from the VESA DMT standard, covering resolutions from 640x350 to 2560x1600 and refresh rates up to 120 Hz, with most using normal blanking unless specified as reduced blanking (RB).[5] This structure enables efficient encoding of support for over 47 modes across 13 bytes of flag data (bytes 4-16), referencing timings like 720x400@85 Hz (DMT ID 3 variant) and higher-resolution widescreen formats.[5] For instance, the following table illustrates representative bit assignments from the specification's Table 3.36:| Byte | Bit | Resolution and Refresh Rate | DMT Notes |
|---|---|---|---|
| 5 | 7 | 1920×1200 @ 60 Hz (RB) | Reduced blanking |
| 5 | 6 | 1920×1080 @ 60 Hz | Widescreen |
| 6 | 7 | 1600×1200 @ 60 Hz | Standard aspect |
| 6 | 5 | 1280×1024 @ 75 Hz | Common legacy |
| 7 | 3 | 1440×900 @ 60 Hz | Widescreen |
| 8 | 7 | 1360×768 @ 60 Hz | Widescreen |
CTA Extension Block
CTA-861 Compliance
The CTA-861 standard, originally published as CEA-861 in 2002 by the Consumer Technology Association (CTA) and most recently revised as CTA-861-J in October 2025, defines protocols, requirements, and recommendations for transporting uncompressed video, audio, and auxiliary data over high-speed digital interfaces such as HDMI, DVI, and DisplayPort in consumer electronics devices.[20][21] This standard builds upon the base EDID structure by mandating a dedicated CTA extension block to enable sinks (e.g., displays and TVs) to report their capabilities, ensuring interoperability between sources and sinks in HDMI ecosystems.[22] The primary purpose of CTA-861 is to extend the core EDID for consumer electronics applications, incorporating HDMI-specific features such as Audio Return Channel (ARC) for bidirectional audio transmission, High-bandwidth Digital Content Protection (HDCP) for secure content playback, and support for 3D video formats.[23] This extension facilitates the negotiation of advanced multimedia capabilities, allowing devices to optimize signal transmission for high-definition content without custom signaling beyond standard video blanking intervals.[24] In the EDID structure, the CTA extension block is designated by extension tag 0x02, with the revision version encoded in byte 1 as 0x03, used in CTA-861-G and subsequent revisions such as H, I, and J.[22] Following the two-byte header (tag and revision) and the offset byte, the block contains data blocks starting from the specified offset (typically byte 4), detailing supported timings, audio formats, and vendor-specific information, ending with a checksum byte.[25] Compliance with CTA-861 is required for all HDMI sinks, which must incorporate the CTA extension block in their EDID to declare support for formats like 4K UHD resolutions, HDR10 metadata, and Dolby Vision dynamic HDR.[26] HDMI sources rely on parsing this block to select compatible modes, ensuring reliable playback of protected content. As of 2025, the standard accommodates video up to 8K at 60 Hz and Variable Refresh Rate (VRR) for smoother motion handling, though EDID's static nature limits it to advertising fixed capabilities rather than dynamic adjustments.[27][28]Extension Block Format
The CTA Extension Block forms a 128-byte structure within the Enhanced EDID (E-EDID) framework, designed to convey detailed audio and video capabilities of a display sink for uncompressed high-speed digital interfaces as specified in CTA-861.[29] This block's header occupies the first three bytes: byte 0 is fixed at 02h to identify it as the CTA extension tag, byte 1 is set to 03h to indicate revision 3 of the CTA format (used since CTA-861-D and in all later versions), and byte 2 specifies the offset to the start of the first data block (typically 04h, making bytes 3 unused and set to 00h).[29] Bytes from the offset to 126 contain the data blocks, with byte 127 as the checksum ensuring the sum of all 128 bytes is 00h modulo 256.[29] From the offset, the block contains a sequence of variable-length data blocks structured in a tag-length-value (TLV) format, where each block begins with a tag byte (indicating type, 0-7 for short or 7 with extended tag for 0x00-0x1F) followed by a length byte (0-31) and the payload.[29] These data blocks collectively describe supported formats and must fit within the available space up to byte 126.[29] Data blocks vary in length: short descriptors are compact, typically 1 to 15 bytes (e.g., for listing video identification codes or audio formats), while some extended descriptors can be longer (e.g., for detailed parameters).[29] For instance, a short video data block might enumerate standard timings via 1-byte codes, whereas vendor-specific blocks provide details for custom modes.[29] Parsing involves the source device sequentially reading blocks from the offset until the end of the available space (byte 126), identifying types via tags and validating against the standard, with the extension accommodating multiple blocks to balance extensibility and efficiency.[29] This layout aligns with CTA-861 requirements for robust capability exchange in digital video systems.[29]Video and Audio Data Blocks
The Video Data Blocks within the CTA extension block of EDID describe the display's supported video formats, primarily through Short Video Descriptors (SVDs) that reference standardized Video Identification Codes (VICs).[5] These blocks use tag code 0x02 and consist of a header byte specifying the tag and length, followed by one or more 1-byte SVDs, where bit 7 indicates the native format (1 for native, 0 otherwise) and bits 0–6 encode the VIC value ranging from 1 to 127.[30] VICs map to predefined timings in the CTA-861 standard, such as VIC 1 for 640×480 at 60 Hz (4:3 aspect ratio) or VIC 16 for 1920×1080p at 60 Hz (16:9). A representative example is VIC 95, which specifies 3840×2160p at 60 Hz, commonly used for 4K UHD content. Additional video features beyond basic SVDs, such as 3D support (e.g., frame packing or side-by-side formats), are advertised in the HDMI Vendor-Specific Data Block (VSDB). Static HDR metadata, including the Electro-Optical Transfer Function (EOTF), desired maximum luminance, and colorimetry support like BT.2020, is conveyed in the HDR Static Metadata Data Block (tag code 7, extended tag 0x06) for static metadata types 1 (traditional HDR) or 2 (SMPTE ST 2084).[31] The CTA extension can accommodate multiple Video Data Blocks (up to the space limit), allowing for comprehensive coverage of supported resolutions and features.[5] Audio Data Blocks, tagged with code 0x01, detail the sink's audio capabilities using Short Audio Descriptors (SADs), each spanning 3 bytes to specify format, sampling frequencies, and channel or bit-depth information.[30] The first byte encodes the audio format code (e.g., 1 for LPCM, 2 for AC-3/Dolby Digital), the second byte uses bit flags for supported sampling rates (32–192 kHz, such as 48 kHz via bit 0), and the third byte indicates maximum channels (up to 8, e.g., 2 for stereo or 7 for 7.1 surround) or bit depths for LPCM (16–24 bits). For instance, an LPCM SAD might specify format code 1, frequencies including 32/44.1/48 kHz (bitmask 0x07), and 2 channels with 16/20/24-bit support (byte 3 = 0x07).[30] Up to 15 audio data blocks are permitted in the CTA extension, facilitating declaration of multiple formats like DTS (code 8) or MPEG-H 3D Audio in extended versions. The presence of Audio Data Blocks in the CTA extension signals basic audio support over the interface, while HDMI Audio Return Channel (ARC) capability is indicated through flags in the extension's vendor-specific blocks, enabling audio transmission from the display back to the source without additional cabling. These blocks follow a sequential order in the data block collection, prioritizing native or preferred formats for optimal source-display negotiation.[5]| Representative Video Identification Codes (VICs) | Resolution and Refresh Rate | Aspect Ratio | Notes |
|---|---|---|---|
| 1 | 640×480 @ 60 Hz | 4:3 | Standard VGA timing |
| 16 | 1920×1080p @ 60 Hz | 16:9 | Full HD progressive |
| 95 | 3840×2160p @ 60 Hz | 16:9 | 4K UHD, pixel aspect 1:1 |
| Representative Audio Format Codes | Format | Max Channels | Sampling Frequencies (kHz) | Bit Depths (LPCM) |
|---|---|---|---|---|
| 1 | LPCM | 8 | 32–192 | 16–24 |
| 2 | AC-3 | 6 | 32–48 | N/A |