Открыть сервис

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 →