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 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 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) 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. Also available here.
DisplayPort Standard Version 1, Revision 1a 11 January 2008 This early version of the DisplayPort standard is available on the Internet Archive's Wayback Machine.
DisplayPort Standard Version 1, Revision 2 January 5, 2010 This early version of the DisplayPort standard is available on the Internet Archive's Wayback Machine. More recent versions of the standard appear to require VESA membership.
DisplayPort Interoperability Guideline Version 1.1, January 28, 2008 Technical specification for DisplayPort Dual-Mode (DP++)
Many standards can be found here
USB Implementers Forum Standards
Many standards can be found here
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
- 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:
- USB-C. See in particular section Hardware Support for a discussion of USB-C Alternate Mode
- Display Data Channel Has a useful summary of the relationships, evolution, and deprecation among releated standards,
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
- Benq: USB C Introduction
- TotalPhase: How DisplayPort Alt Mode is enabled over a USB Type-C Cable
- AnandTech: DisplayPort Alt Mode 2.0 Spec Releaaed Has a diagram of pin usage
- Guide to USB-C Pinout and Features All About Circuits web site, December 10 2018
- Wikipedia USB-C page
- VESA DisplayPort Alternate Mode on USB Type-C Technical Overview Jim Choate, VESA Compliance Program Manager, September 27-28, 2016
- VESA DisplayPort Alt Mode for USB Type-C Standard Feature Summary, Sept 22, 2014 PowerPoint presentation
- VESA - DisplayPort Alternate Mode on USB-C Conference presentation, Jim Choate, VESA Compliance Program Manager, USB Developer Days 2019, November 10, 2019
- HDMI Alt Mode USB Type-C A technical description of the spec that had essentially no adoption. Includes pin usage.
- RIP HDMI Alt Mode, we hardly new ye Ars Technica, 1/12/2023 Type-C HDMI alt mode never saw adoption. What exist are Type-C DisplayPort alt mode cables, etc. that have circuitry to convert the DisplayPort signal to HDMI.
- HDMI licensing administrator says the obscure HDMI Alt Mode specs are dead Another article pointing out that USB-C HDMI Alt Mode devices don't exist. What exist are Alt-Mode DisplayPort cables/connectors, which convert DisplayPort to HDMI. That is, the device with the Type-C connector emits DisplayPort signaling, not HDMI signaling. The DisplayPort to HDMI conversion is performed by circuitry in the cable/connector.
- Enable Desktop Mode (HDMI Alt Mode) in kernel/bootloader or with custom ROM xda.developers.com forum discussion. A discussion of why you (usually) can't get video output from a cell phone Type-C connector. Note that the mention of "HDMI Alt Mode" in the title is misleading.
- DisplayPort over USB-C Dell Knowledge Base Article
- What's up with DisplayPort over USB C superuser.com, asked 3/2017, last modified 10/2020
- Are all USB Type-C-to-HDMI cables active? superuser.com asked 12/2020, last modified 12/2020
- Add USB-C with DisplayPort-alt-mode to your PC A nice overview of devices for adding a Type-C connector supporting DisplayPort Alt Mode to a PC whose motherboard or video card does not have such a connector.
- Bi-directional DisplayPort->UDB-C, HDMI->USB-C, and HDMI->DP Cables Another nice overview of available hardware from Dan S. Charlton
A proprietary method of sending video over a USB connection. Not to be confused with DisplayPort. Does not support DDC/CI.
Linux Kernel Documentation
Linux Kernel Documentation This is the top level of the kernel's documentation tree. Some pages of particular interest:
- Linux GPU Driver Developer's Guide
- GPU Driver Documentation
- amdgpu Module Parameters
- Understanding system calls on Linux with strace Article on opensource.com