DDC/CI в мониторах¶
DDC/CI (Display Data Channel / Command Interface) — протокол двусторонней связи между компьютером и монитором, реализованный поверх стандарта DDC2B и работающий по интерфейсу I²C. Он позволяет программному обеспечению читать из монитора его идентификационные данные (EDID), а также управлять параметрами дисплея — яркостью, контрастом, громкостью встроенных динамиков, переключением входов — без использования физических кнопок на корпусе.
¶История и стандарты
Стандарт DDC (Display Data Channel) был разработан ассоциацией VESA и опубликован в 1990-х годах. Первая версия DDC1 позволяла монитору передавать данные о себе в одном направлении. DDC2A и DDC2B (1994–1995 годы) добавили двусторонний обмен на базе шины I²C с частотой 100 кГц. DDC2B стал базой для системы «Plug and Play»: операционная система при подключении дисплея запрашивала его EDID-блок и автоматически подбирала разрешение и частоту обновления.
В 2005 году VESA выпустила спецификацию MCCS (Monitor Control Command Set) — набор команд для управления монитором, и именно его реализация называется DDC/CI. MCCS определяет коды VCP (Virtual Control Panel) для десятков параметров: 0x10 — яркость, 0x12 — контраст, 0x16 — температура цвета, 0x60 — вход, 0x62 — громкость и так далее. Последняя версия спецификации — MCCS 2.2a.
¶Устройство и принцип работы
DDC/CI использует ту же физическую линию, что и EDID, — пару SDA/SCL шины I²C внутри кабеля DVI, HDMI или DisplayPort. Адрес монитора на шине обычно составляет 0x37 (7-битный адрес 0x6E). Компьютер выступает мастером, монитор — ведомым устройством.
Протокол обмена прост: мастер отправляет запись в регистр монитора, затем читает ответ. Для управления параметром используется команда вида «Set VCP Feature Code» с указанием кода параметра и нового значения, для чтения — «Get VCP Feature» с возвратом текущего и максимального значения. Ответ монитора содержит также флаг «supported», указывающий, поддерживается ли параметр.
Важно, что DDC/CI работает только при включённом мониторе и не зависит от того, какой интерфейс видеосигнала используется. При этом EDID читается даже при выключенном мониторе (через питание +5 В от видеокарты), а DDC/CI — нет.
¶Применение
Основные сценарии использования DDC/CI:
- Автоматическая настройка яркости и цвета. Программы типа f.lux, Monitorian, ddcutil или Brightness Controller изменяют яркость монитора программно, что удобно на десктопных дисплеях без сенсорного управления.
- Переключение входов. Утилиты могут переключать монитор между HDMI, DisplayPort и DVI без нажатия кнопки на корпусе.
- Управление несколькими мониторами. В многомониторных конфигурациях DDC/CI позволяет задавать параметры каждого дисплея независимо.
- Интеграция в системы автоматизации. Скрипты и умные дома могут управлять яркостью дисплея по расписанию или в зависимости от освещённости помещения.
В Linux для работы с DDC/CI существует утилита ddcutil (и библиотека ddcutil-lib), в Windows — библиотека ddc-winapi и утилита ControlMyMonitor от NirSoft, в macOS — утилita MonitorControl. В драйверах видеокарт DDC/CI реализуется на уровне VESA/DDC-библиотек.
¶Ограничения
Не все мониторы корректно реализуют DDC/CI. Некоторые бюджетные модели поддерживают только чтение EDID, а команды управления игнорируют или отвечают с ошибками. Также возможны конфликты: если одновременно работают несколько программ, управляющих DDC/CI, шина может быть перегружена, и монитор начнёт отвечать с задержкой. В отдельных случаях (особенно через док-станции и переходники) DDC/CI-сигнал теряется, и управление становится невозможным.
Часть мониторов имеет в меню опцию «DDC/CI» или «HDMI-CEC», которую можно отключить — это полезно для устранения конфликтов, но лишает возможности программного управления.
¶Интересные факты
- DDC/CI и HDMI-CEC решают похожие задачи, но работают по разным протоколам: CEC — по отдельной линии HDMI, DDC/CI — по шине I²C.
- EDID-блок, читаемый по DDC, может содержать не только разрешение, но и серийный номер монитора, дату производства и список поддерживаемых режимов.
- Некоторые профессиональные мониторы (например, линейки EIZO ColorEdge) реализуют расширенные версии DDC/CI с собственными командами для калибровки.
¶Источники
- VESA. Display Data Channel (DDC) Standard, Version 1.0/2.0.
- VESA. Monitor Control Command Set (MCCS) Standard, Version 2.2a.
- Документация проекта ddcutil (ddcutil.readthedocs.io).
- NirSoft. ControlMyMonitor — описание утилиты.
