DDC/CI specifications

Reverse-engineered by Nicolas Boichat, using this method, go back to main DDC/CI page.

By Nicolas Boichat, back to main DDC/CI page.

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.

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