DDC/CI Function

HDMI35 Display supports DDC/CI communication, and users can adjust various parameters of the display via HDMI I2C (DDC Channel) port.

1) Specification

– DDC/CI Standard

Monitor Command and Control Set (MCCS) Version 2.2

– Supported Functions

Commands

0x03 : Set VCP Feature

0x01 : Get VCP Feature

0xF3 : Capabilities Request

0x0C : Save current settings

VCP Features

0x04 : Restore factory defaults, WriteOnly

0x10 : Adjust Brightness, ReadWrite

0x12 : Adjust Contrast, ReadWrite

0x16 : Adjust Red Gain, ReadWrite

0x18 : Adjust Green Gain, ReadWrite

0x1A : Adjust Blue Gain, ReadWrite

0xB6 : Get Display type, ReadOnly

0xD6 : Set Power mode (Power On/Off), ReadWrite

0xDF : Get VCP Version, ReadOnly

0xE1, 0xE2, 0xE3 : Custom features

2) System Requirements

– Any kind of OS (Win7/10/11, Debian, Ubuntu, RaspberryOS…) which is capable drive HDMI port’s I2C bus.

– DDC/CI control can be implemented using specific tool (like as ddcutil), or manual programming.

– DDC/CI control is able when the display is in sleep/suspend mode, so can be used for power status control.

3) Usage

There are many of DDC/CI control apps, for example, ddcutil is very covenient and popular tool for Linux users.

For install, config, usage of ddcutil, please reference the documents.

https://www.ddcutil.com/

https://www.ddcutil.com/raspberry/

– Detect display

ddcutil detect

– Get capabilities

ddcutil capabilities

– Adjust brightness

ddcutil setvcp 10 70 (set brightness to 70, the value range is 1~100)

ddcutil getvcp 10 (get current brightness)

– Adjust contrast

ddcutil setvcp 12 80 (set contrast to 80, the value range is 1~100)

ddcutil getvcp 12 (get current contrast)

– Adjust colors

Red

ddcutil setvcp 16 128 (set Red gain to 128, the value range is 1~255)

ddcutil getvcp 16 (get Red gain)

Green

ddcutil setvcp 18 128 (set Green gain to 128, the value range is 1~255)

ddcutil getvcp 18 (get Green gain)

Blue

ddcutil setvcp 1A 128 (set Blue gain to 128, the value range is 1~255)

ddcutil getvcp 1A (get Blue gain)

– Save current settings

ddcutil scs (save settings to eeprom)

Modified contrast, color… values (except brightness) are not saved directly, and this command stores the values to the display’s non-volatile storage.

– Restore factory defaults

ddcutil setvcp 04 01 (discard all of changes, back to factory default status)

This command is ignored if the value is 00

– Power status control

ddcutil setvcp D6 01 (power on display)

ddcutil setvcp D6 03 (power off/suspend display)

ddcutil getvcp D6 (get current power status)

01: normal status

02: standby status (when no input signal, readonly value)

03: suspend status (minimum power consumption)

– Custom commands

ddcutil setvcp E1 1 (enable logo, default 1)

ddcutil setvcp E1 0 (disable logo)

ddcutil setvcp E2 1 (enable hdmi note, default 1)

ddcutil setvcp E2 0 (disable hdmi note)

ddcutil setvcp E3 1 (enable sleep when no signal, default 0)

ddcutil setvcp E3 0 (disable sleep, always shows )

For more detailed data transaction protocols, packet structures, please reference

https://www.ddcutil.com/bibliography/

 

DDC/CI – RaspberryPi Issue

HDMI port’s I2C bus is enabled by default in latest RaspberryPi OS KMS driver mode.  For using the I2C in FKMS driver mode, it needs extra configuration, like as adding [dtparam=i2c2_iknowwhatimdoing] to config.txt,

But it does not work in Raspberry4, Bullseye, 64bit… and KMS mode is almost essential for running DDC/CI applications.

The specific, non-standard resolutions(like as 480×240) require FKMS mode, so DDC-CI control is unavailable when using 480×320 resolution in many cases.

Windows Tools

https://github.com/blackholeearth/Win10_BrightnessSlider

https://github.com/emoacht/Monitorian

There are also many of C, Python… DDC/CI libraries, resources, and users can develop customized ddc/ci display control app using appropriate libraries.