Reference Documents

Searching for DDC documentation can be confusing. The DDC protocol evolved, being part of Access Bus at one point, and shed various pieces, e.g. EDID, into separate specifications along the way. See the Wikipedia DDC page for an overview of how it morphed.

Most people will want to start with the following standards:

VESA Standards

Many standards can be found here

USB Implementers Forum Standards

Many standards can be found here

I2C

As background, I2C is a low level, slow speed specification of a 2 wire protocol for sending and receiving bytes. DDC/CI is layered on top of that protocol, describing particular sequences of bytes that are communicated between a master device (the host computer) and a slave device (a monitor) at address x37 on an I2C bus. By analogy, DDC is as a subclass of superclass I2C, that is DDC obeys the rules of I2C, but is more specific. For example, only certain byte sequences are legal. SMBUS is another protocol based on I2C.

ddcutil reads from and writes to the userspace /dev/i2c* devices which present a file system like abstraction of an I2C bus. It leaves the bit-banging to the video device drivers, e.g. amdgpu, nouveau.

One source of confusion in DDC documentation is the specification of slave adddresses on the I2C bus. Sometimes you'll see the DDC address documented as x37, other times as the pair x6e/x6f. Leaving aside the implementation of 10 bit I2C bus addresses (uncommon), I2C slave addresses are encoded in a single byte. The high order 7 bits are used for the address per se. The low order bit is 0 for a write operation, 1 for a read operation. Much of the VESA documenation regards the entire 8 bit value as an address, which means address x37 becomes the pair x6e/x6f. Similarly, the 7 bit address for the EDID is x50; regarded as an 8 bit address, the EDID address becomes xA0/xA1. ddcutil specifies I2C slave addresses in 7 bit form, as do utilities such as i2cdetect, i2cget, and i2cset.

The following specifications and articles provide backgroud information about the I2C bus.

SMBus is a related standard. The following report can help in understanding I2C.

Wikipedia has several high quality pages on related specifications: They may be helpful when trying to figure out why DDC communication is not working:

Documentation on DP <-> HDMI/DVI conversion:

Type C Connectors

DisplayLink

A proprietary method of sending video over a USB connection. Not to be confused with DisplayPort. Does not support DDC/CI.

DisplayLink vs Alt Mode Video Output

Monitor Firmware

DisplayPort Multi-Stream Transport (MST) Issues

More generally, search www.mail-archive.com, particularly dri-devel

Miscellaneous

  • EDID and Monitor Connection A good explanation the EDID readability for connected monitors that are powered off. In this case, the EDID is always readable if a monitor is connected using DVI and HDMI, but may or may not be readable when connected using DisplayPort.