I2C — последовательная шина передачи данных¶
I2C (Inter-Integrated Circuit, произносится «ай-ту-си» или «ай-квадрат-си») — последовательная синхронная шина передачи данных, разработанная компанией Philips Semiconductor (ныне NXP Semiconductors) в начале 1980-х годов для соединения интегральных схем внутри электронных устройств. Шина обеспечивает связь между микроконтроллерами, датчиками, памятью и периферийными микросхемами при минимальном количестве проводников — всего двух линиях: последовательной линии данных (SDA) и линии тактирования (SCL). I2C стала де-факто промышленным стандартом для внутриплатной коммуникации благодаря простоте реализации, низкой стоимости и широкой распространённости в потребительской электронике.
¶История
Протокол I2C был представлен компанией Philips в 1982 году как решение для упрощения соединений между чипами в телевизорах и аудиоаппаратуре. Первоначальная спецификация поддерживала скорость до 100 кбит/с и 7-битную адресацию, что позволяло подключать до 112 устройств к одной шине. В 1992 году вышла версия 1.0, добавившая режим Fast Mode (400 кбит/с) и 10-битную адресацию. Дальнейшее развитие включало High-Speed Mode (3,4 Мбит/с, 2001 год), Ultra-Fast Mode (5 Мбит/с, 2007 год) и режим Fast Mode Plus (1 Мбит/с). В 2006 году спецификация была стандартизирована как NXP I2C-bus specification, версия 2.1, а в 2021 году — версия 7.0. Товарный знак I2C принадлежит NXP, однако протокол настолько распространён, что многие производители используют его без лицензионных отчислений, называя реализацию по-своему (например, TWI — Two-Wire Interface у Atmel).
¶Архитектура и принцип работы
Шина I2C построена по принципу «ведущий-ведомый» (master-slave). Ведущее устройство (обычно микроконтроллер) инициирует передачу, генерирует тактовые импульсы на линии SCL и адресует одно или несколько ведомых устройств. Ведомые устройства не могут начать передачу самостоятельно, но могут приостанавливать тактирование через механизм clock stretching (удержание линии SCL в низком уровне для замедления мастера). Каждое устройство на шине имеет уникальный 7-битный или 10-битный адрес, что позволяет подключать до 128 (или 1024 при 10-битной адресации) узлов, хотя реальное ограничение определяется ёмкостью линий (обычно не более 400 пФ).
Передача данных осуществляется пакетами: стартовый сигнал (переход SDA из высокого в низкий уровень при высоком SCL), затем байт адреса с битом направления (чтение/запись), затем один или несколько байтов данных и стоп-сигнал. Каждый байт подтверждается ведомым устройством битом ACK (низкий уровень SDA). Логические уровни: высокий — подтяжка к питанию через резисторы (обычно 2,2–10 кОм), низкий — открытый коллектор или открытый сток. Это позволяет нескольким устройствам управлять линией без конфликтов.
¶Режимы скорости и варианты
Спецификация NXP определяет несколько режимов работы:
- Standard Mode — до 100 кбит/с, базовый режим.
- Fast Mode — до 400 кбит/с, наиболее распространённый в современных устройствах.
- Fast Mode Plus — до 1 Мбит/с, требует более сильных подтягивающих резисторов.
- High-Speed Mode — до 3,4 Мбит/с, используется в специализированных приложениях.
- Ultra-Fast Mode — до 5 Мбит/с, односторонний режим без подтверждения.
Существуют также аппаратные расширения: SMBus (System Management Bus) — вариант I2C для управления питанием в компьютерах, с более строгими таймингами и ограничениями; PMBus — расширение SMBus для управления блоками питания; DDC (Display Data Channel) — используется для передачи EDID-данных мониторов.
¶Физическая реализация
Физически I2C представляет собой две линии: SDA (данные) и SCL (такты), обе с открытым стоком и подтяжкой к напряжению питания (обычно 3,3 В или 5 В). Уровни напряжения могут быть несимметричны: допустимы смешанные напряжения (например, 5 В мастер и 3,3 В ведомый) при использовании соответствующих преобразователей уровней. Максимальная длина шины ограничена ёмкостью линий и скоростью: при 100 кбит/с возможна длина до нескольких метров, при 400 кбит/с — обычно не более 1–2 метров на печатной плате. Для увеличения длины применяются буферы и повторители (например, P82B715). Топология — шинная, с последовательным подключением устройств; ответвления (звёзды) не рекомендуются из-за отражений сигнала.
¶Программная реализация
I2C может быть реализован как аппаратно (встроенный контроллер в микроконтроллерах) или программно (bit-banging — эмуляция протокола через обычные порты ввода-вывода). Аппаратные реализации обеспечивают автоматическую генерацию старт/стоп-условий, проверку ACK и обработку ошибок. Программная эмуляция требует точного соблюдения таймингов и используется редко, в основном для отладки или на простых микроконтроллерах. В операционных системах Linux протокол поддерживается через подсистему I2C (devicetree, i2c-dev), в Windows — через драйверы производителей.
¶Применение
I2C широко применяется в электронике для подключения:
- Датчиков — температуры (LM75, TMP102), влажности, давления, акселерометров (MPU-6050), магнитометров.
- Памяти — EEPROM (AT24C02, 24LC256) и FRAM.
- Цифро-аналоговых и аналого-цифровых преобразователей (PCF8591, ADS1115).
- Часов реального времени (DS3231, PCF8563).
- Дисплеев — символьных (LCD 1602 через адаптер PCF8574) и графических (OLED SSD1306).
- Микросхем управления питанием — зарядные контроллеры, мониторы батарей.
- Коммутаторов и мультиплексоров (TCA9548A) для расширения числа устройств.
В компьютерах I2C используется для связи с модулями SPD на планках памяти, в системах мониторинга (hardware monitor), для управления вентиляторами и подсветкой. В смартфонах и планшетах шина соединяет датчики, тачскрин-контроллеры, камеры. В промышленности I2C применяется для калибровки и конфигурирования устройств, в автомобильной электронике — для управления освещением и климат-контролем.
¶Преимущества и недостатки
К преимуществам I2C относят: минимальное количество выводов (два), поддержку множества устройств на одной шине, простоту протокола, наличие многоадресной передачи (broadcast) и возможность горячего подключения при использовании специальных буферов. Недостатки: сравнительно низкая скорость по сравнению с SPI или параллельными шинами, отсутствие гарантированной доставки при длинных линиях, сложность отладки при большом числе устройств из-за конфликтов адресов, чувствительность к помехам на высоких скоростях. В отличие от SPI, I2C не имеет выделенной линии выбора устройства (chip select), что упрощает разводку, но требует уникальных адресов.
¶Сравнение с альтернативными шинами
Основными конкурентами I2C являются SPI (Serial Peripheral Interface) и UART. SPI обеспечивает более высокие скорости (до десятков Мбит/с) и полнодуплексную передачу, но требует минимум четыре линии (MOSI, MISO, SCK, SS) и отдельный вывод на каждое устройство. UART — асинхронный протокол, не требующий тактовой линии, но поддерживающий только связь точка-точка. I2C занимает промежуточное положение: медленнее SPI, но экономичнее по выводам; сложнее UART, но позволяет строить многоузловые сети без дополнительных аппаратных затрат. Выбор шины зависит от требований к скорости, числу устройств и сложности разводки.
¶Интересные факты
- Название «I2C» происходит от английского «Inter-Integrated Circuit», что буквально означает «межинтегральная схема».
- Протокол изначально создавался для управления настройками телевизоров Philips и до сих пор используется в ЖК-панелях для передачи данных EDID.
- Некоторые производители используют обозначение «I²C» с надстрочной двойкой, что отражает произношение «ай-квадрат-си».
- В 2014 году NXP выпустила спецификацию I3C — преемника I2C с поддержкой скоростей до 12,5 Мбит/с и динамической адресацией, однако I2C остаётся доминирующим стандартом в массовой электронике.
¶Источники
- NXP Semiconductors. I2C-bus specification and user manual, Rev. 7.0, 2021.
- Philips Semiconductors. The I2C-bus specification, Version 2.1, 2000.
- AN10216-01. I2C Manual. NXP Semiconductors, 2003.
- UM10204. I2C-bus specification and user manual. NXP, 2014.
BFOmetr — база данных и аналитика по компаниям России.
На главную BFOmetr →

