Reverse-engineered by Nicolas Boichat, using this method, go back to main DDC/CI page.
By Nicolas Boichat, back to main DDC/CI page.
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.
Any application using the DDC/CI bus should make a pause of at least 30ms between every 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) |
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 |
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). |
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 |
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 |
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 |
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.
Please do not hesitate to contact me if you see typos, English errors or any other mistake.
© Nicolas Boichat <nicolas@boichat.ch>. Last modified: July 8, 2004