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.
VESA Standards
-
VESA Display Data Channel Command Interface Standard, Version 1. August 14, 1998. This is a predecessor to the current standard, DDC/CI 1.1. The contents of this document sometimes clarify the current specification, but should not be regarded as definitive.
-
VESA Access.bus Specificaions Version 3.0, September 1995. Another predecessor specification.
-
VESA Display Data Channel Command Interface (DDC/CI) Standard Version 1.1, October 29, 2004 Also available here
-
VESA Monitor Control Command Set (MCCS) Standard Version 1, September 11, 1998.
-
VESA Monitor Control Command Set (MCCS) Standard Version 2, October 17, 2003
-
VESA Monitor Control Command Set (MCCS) Standard Version 2.1, May 28, 2005
-
VESA Monitor Control Command Set (MCCS) Standard Version 3, July 27, 2006. MCCS 3.0 proved too great a departure from Version 2.1 and did not gain acceptance.
-
VESA Monitor Control Command Set (MCCS) Update Document for MCCS Standard Version 3, March 20, 2007
-
VESA Monitor Control Command Set (MCCS) Standard Version 2.2, January 19, 2009. MCCS 2.2 incorporated features from Version 3.0, but is upwardly compatible with 2.1
-
VESA Monitor Control Command Set (MCCS) Standard Version 2.2a, July 13, 2011. The most recent standard.
-
VESA Enhanced Display Data Channel (EDDC) Standard, Version 1.2, December 26, 2007
-
VESA Enhanced Display Data Channel (E-DDC) Standard, Version 1.3, 11 September 2017
USB Implementers Forum Standards
-
USB Device Class Definition for Human Interface Devices Version 1.11, June 27, 2001
-
USB Monitor Control Class Specification Revision 1.0, January 5, 1998]
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.
- Understanding the I2C Bus, Texas Instruments Application Report, SLVA702, June 2015
- HDCP and EDID Demystified
- I2C-bus specification and user manual, Rev 6 - 4 April 2014
- I2C Info -I2C Bus, Interface and Protocol
- I2C Bus Specification
- I2C Communication Protocol Tutorial
- I2C - What's That?
- I2C Primer
- Wikipedia
- 7-bit, 8-bit, and 10-bit I2C Slave Addressing
- StackExchange thread on the confusion in I2C slave address representation
- I2C Protocol Lecture Notes, Sudhanshu Janwadkar
- Linux kernel documentation
- Using the I2C Bus, Robot Electronics
- Definitions and Differences between I2C, Access.bus, and SMBUSNazir Azzam, SMSC, Hauppage, NY
- I2C-bus specification and user manual, Rev 6 - 4 April 2014 Paywalled
- I2C, SPI, I3C Interface Devices
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:
- DisplayPort
- HDMI
- Thunderbolt
- USB-C. See in particular section Hardware Support for a discussion of USB-C Alternate Mode
Documentation on DP <-> HDMI/DVI conversion:
- Dell HDMI to DisplayPort Conversion Information
- Barco DisplayPort to HDMI Conversion: should I use an active or passive adapter
- DisplayPort->HDMI dongles/adapters - active vs passive revisited
- Tripp-Lite What's the Difference Between Passive and Active DisplayPort Adapters
- VESA DisplayPort Interoperatility Guideline Version 1.1, January 28, 2008
Linux I2C Documentation:
- Linux I2C Subsystem Not kept up
Linux Video Driver Documentation:
These links may have to be updated to the current kernel version.