DDC/CI specifications
(Note: imported verbatim from old website)
Reverse-engineered using this method.
General data transfer
The DDC bus is nothing else than an I2C bus.
DDC2 informations, like monitor supported refresh rates (EDID), are transmitted using the I2C address 0x50.
DDC/CI packets are transmitted using the I2C address 0x37.
For more informations on I2C bus, see I2C specifications at Phillips.
Timing
Any application using the DDC/CI bus should make a pause of at least 30ms between every packet.
Write packet
| Data | Description |
|---|---|
| 0x6E | I2C address : 0x37, writing |
| 0x51 | Sub-address. |
| 0x80 OR n | Last 4 bits indicates the number of following bytes (excluding checksum) |
| … | n bytes |
| Checksum | Simple XOR of all preceding bytes (including the first) |
Read packet
First, send a write packet, then, when reading, the monitor returns this:
| Data | Description |
|---|---|
| 0x6F | I2C address : 0x37, reading |
| 0x6E | ACK of the packet previously written. |
| 0x80 OR n (sometimes, simply n) | Last 7 bits indicates the number of following bytes (excluding checksum) |
| … | n bytes |
| Checksum | XOR of all preceding bytes (including the first), expect the second, which is replaced by the subaddress (0x51). |
Commands
Read a value
First, send a 2 bytes write packet:
| Data | Description |
|---|---|
| 0x01 | Read a value |
| 0xXX | Index of the value to read (see below for monitor-specific indexes) |
Then, read the answer (8 bytes read packet):
| Data | Description |
|---|---|
| 0x02 | Value follows |
| 0x00 | NULL-byte |
| 0xXX | Index of the value which is read |
| 0x00 | NULL-byte |
| 0x00 | NULL-byte |
| 0xZZ | Maximum value (usually 0xFE) |
| 0x00 | NULL-byte |
| 0xYY | Current value |
Modify a value
Send a 4 bytes write packet:
| Data | Description |
|---|---|
| 0x03 | Change a value |
| 0xXX | Index of the value to change (see below for monitor specific indexes) |
| 0x00 | NULL-byte |
| 0xYY | New value, in the range 0x00-0xFE |
Monitor specific indexes
Mitsubishi Diamond Pro 2060u
Monitor informations
Manufacturer: MEL Model: 4513
| Index | Description | Index | Description |
|---|---|---|---|
| 0x00 | Degauss (value must be 0x01) | 0x26 | Pincushion balance |
| 0x?? | Auto-size | 0x46 | Top pincushion amplitude |
| 0x?? | Reset factory settings | 0x48 | Top pincushion balance |
| 0x10 | Brightness | 0xE6 | Center pincushion amplitude (value 0x00-0x01 ???, not working) |
| 0x12 | Contrast | 0x4A | Bottom pincushion amplitude |
| 0x16 | Red | 0x4C | Bottom pincushion balance |
| 0x18 | Green | 0x3A | Vertical linearity |
| 0x1A | Blue | 0x3C | Vertical linearity balance |
| 0x22 | Width | 0x28 | Horizontal static convergence |
| 0x32 | Height | 0x38 | Vertical static convergence |
| 0x30 | Vertical position | 0x56 | Moire cancel |
| 0x20 | Horizontal position | 0xE8 | Top left screen purity |
| 0x24 | Pincushion amplitude | 0xE9 | Top right screen purity |
| 0x42 | Pincushion phase | 0xEA | Bottom left screen purity |
| 0x40 | Keystone balance | 0xEB | Bottom right screen purity |
Others?
If you have other monitors, you can find these values using this method.
DDC is a trademark owned by VESA (Video Electronics Standard Association).
I2C is a trademark owned by Philips.