Протокол I²C
I²C (Inter-Integrated Circuit, произносится «ай-квадрат-си») — это последовательная синхронная шина передачи данных, разработанная компанией Philips Semiconductors (ныне NXP Semiconductors) в 1982 году. Предназначена для соединения интегральных микросхем (микроконтроллеров, датчиков, АЦП, ЦАП, памяти, дисплеев) в электронных устройствах. I²C использует всего две двунаправленные линии: последовательную линию данных (SDA) и последовательную линию синхронизации (SCL). Отличается простотой реализации, низким числом выводов для подключения и возможностью адресации до 128 устройств на одной шине (в стандартном 7-битном режиме).
История
Протокол I²C был создан инженерами компании Philips (ныне NXP) в 1982 году для упрощения внутренних соединений в телевизионных приёмниках и другой бытовой электронике. Первоначальная цель заключалась в замене множества параллельных линий связи между микросхемами одной последовательной шиной, что снижало количество контактов на корпусах микросхем и упрощало проектирование печатных плат. Первая спецификация была опубликована в 1992 году и описывала стандартный режим работы (100 кбит/с). В 1995 году появилось расширение для быстрого режима (400 кбит/с). В 1998 году был введён режим высокой скорости (3,4 Мбит/с). В 2007 году NXP (преемник Philips Semiconductors) выпустила спецификацию версии 3.0, добавившую режим сверхбыстрой скорости (5 Мбит/с). В 2012 году вышла версия 4.0 с режимом ультрабыстрой скорости (до 5 Мбит/с) и поддержкой 10-битной адресации. В 2014 году спецификация была обновлена до версии 5.0, а в 2016 году — до версии 6.0, которая стандартизировала режим работы до 1 МГц и ввела дополнительные возможности для управления шиной.
Физическая реализация
Линии шины
Шина I²C состоит из двух линий:
- SDA (Serial Data Line) — двунаправленная линия для передачи данных.
- SCL (Serial Clock Line) — двунаправленная линия для синхронизации.
Обе линии имеют открытый коллектор (или открытый сток) и подтягиваются к напряжению питания (обычно +3,3 В или +5 В) через резисторы номиналом от 1 до 10 кОм. Логический ноль на линии соответствует низкому уровню (GND), логическая единица — высокому уровню (через подтягивающий резистор, когда ни одно устройство не «прижимает» линию к земле). Любое устройство на шине может «прижать» линию к земле, создавая логический ноль, или отпустить её, позволяя резистору поднять напряжение до высокого уровня.
Топология
Шина I²C представляет собой многоточечное соединение (multipoint). Все устройства (ведущие и ведомые) подключаются параллельно к одним и тем же линиям SDA и SCL. Максимальная длина шины ограничена ёмкостью линий (обычно до 400 пФ) и зависит от скорости передачи. Для стандартного режима длина может достигать нескольких метров при условии использования качественных кабелей и экранирования. Для высокоскоростных режимов длина обычно не превышает нескольких десятков сантиметров.
Протокол передачи данных
Адресация
Каждое ведомое устройство на шине имеет уникальный адрес. В стандартной 7-битной адресации доступно 128 адресов (0x00–0x7F), из которых 16 зарезервированы для специальных целей (например, 0x00 — общий вызов, 0x01 — адрес для CBUS). В 10-битной адресации доступно 1024 адреса. Адрес передаётся первым байтом после стартового условия.
Стартовое и стоповое условия
Передача начинается со стартового условия (START): когда SCL находится в высоком уровне, SDA переходит из высокого уровня в низкий. Передача заканчивается стоповым условием (STOP): когда SCL находится в высоком уровне, SDA переходит из низкого уровня в высокий. Стартовое и стоповое условия всегда генерируются ведущим устройством.
Формат кадра
Каждый байт данных (8 бит) передаётся старшим битом вперёд (MSB first). После каждого байта следует бит подтверждения (ACK). Ведущий генерирует тактовые импульсы на линии SCL. Данные на SDA изменяются только при низком уровне SCL и считываются при высоком уровне SCL. Типичная последовательность:
- Ведущий генерирует стартовое условие.
- Ведущий передаёт 7-битный адрес ведомого и бит направления (0 — запись, 1 — чтение).
- Ведомый подтверждает приём (ACK) — прижимает SDA к низкому уровню на девятом такте.
- Если бит направления — запись, ведущий передаёт байты данных; если чтение — ведомый передаёт байты данных. После каждого байта принимающая сторона подтверждает приём (ACK) или не подтверждает (NACK) — не прижимает SDA.
- Ведущий генерирует стоповое условие.
Множественные ведущие
Протокол I²C поддерживает работу нескольких ведущих устройств на одной шине. Арбитраж осуществляется на уровне линий: если два ведущих одновременно пытаются передать данные, тот, который первым «отпустит» линию SDA (то есть попытается передать единицу, а другой — ноль), проигрывает арбитраж и отключается. Ведущий, выигравший арбитраж, продолжает передачу.
Режимы работы
Стандарт I²C определяет несколько режимов скорости:
| Режим | Максимальная скорость | Напряжение | Примечание |
|---|---|---|---|
| Стандартный (Standard-mode) | 100 кбит/с | 2,7–5,5 В | Базовый режим |
| Быстрый (Fast-mode) | 400 кбит/с | 2,7–5,5 В | Наиболее распространённый |
| Быстрый плюс (Fast-mode Plus) | 1 Мбит/с | 2,7–5,5 В | Требует более мощных подтягивающих резисторов |
| Высокоскоростной (High-speed mode) | 3,4 Мбит/с | 1,8–5,5 В | Специфический режим |
| Сверхбыстрый (Ultra Fast-mode) | 5 Мбит/с | 1,8–5,5 В | Односторонняя передача (только запись) |
Применение
I²C широко используется в электронике для связи между микроконтроллерами и периферийными устройствами. Типичные примеры:
- Датчики: температуры (например, LM75, DS18B20), давления (BMP280), влажности (DHT22), освещённости (BH1750), акселерометры (MPU6050).
- АЦП и ЦАП: микросхемы аналого-цифрового и цифро-аналогового преобразования (например, MCP4725, ADS1115).
- Память: EEPROM (например, AT24C02, 24LC256), FRAM, SRAM.
- Дисплеи: OLED-дисплеи на контроллерах SSD1306, LCD-дисплеи на PCF8574.
- Часы реального времени: DS1307, DS3231.
- Расширители портов ввода-вывода: PCF8574, MCP23017.
- Управление питанием: батарейные мониторы (INA219), зарядные контроллеры.
I²C также используется в промышленной автоматике, автомобильной электронике, медицинских приборах и потребительской электронике (телевизоры, смартфоны, ноутбуки).
Преимущества и недостатки
Преимущества
- Малое количество выводов: всего две линии, что экономит контакты микроконтроллера и упрощает разводку печатной платы.
- Простота протокола: легко реализуется как аппаратно, так и программно.
- Многоточечность: можно подключать до 128 устройств на одну шину.
- Гибкость: поддержка множества ведущих, возможность горячей замены (не всегда).
- Широкая распространённость: огромное количество микросхем и датчиков с интерфейсом I²C.
Недостатки
- Ограниченная скорость: даже в быстрых режимах скорость ниже, чем у SPI (до десятков МГц) или параллельных шин.
- Зависимость от ёмкости шины: длинные линии или большое количество устройств ухудшают качество сигнала.
- Нет гальванической развязки: для изоляции требуются дополнительные компоненты (например, оптроны).
- Сложность арбитража: при большом количестве ведущих возможны коллизии.
- Фиксированная адресация: некоторые устройства имеют только один адрес, что может вызывать конфликты при подключении нескольких одинаковых микросхем.
Варианты и производные
На основе I²C разработаны несколько производных протоколов:
- SMBus (System Management Bus) — модификация I²C, используемая в компьютерах для управления питанием и вентиляторами. Отличается более строгими временными параметрами и поддержкой уведомлений.
- PMBus (Power Management Bus) — расширение SMBus для управления источниками питания.
- TWI (Two-Wire Interface) — реализация I²C в микроконтроллерах Atmel (ныне Microchip), полностью совместимая с оригиналом.
- I²C over HDMI — используется в интерфейсе HDMI для передачи данных EDID и управления CEC.
Критика
Основные критические замечания в адрес I²C связаны с его ограниченной скоростью и чувствительностью к ёмкости шины. В высокопроизводительных системах, где требуется передача больших объёмов данных (например, видео или аудиопотоки), I²C уступает SPI или параллельным интерфейсам. Также отмечается, что при большом количестве устройств на шине арбитраж может приводить к снижению производительности. Кроме того, отсутствие стандартной поддержки гальванической развязки усложняет использование в промышленных условиях с высокими помехами.
Источники
- NXP Semiconductors. I²C-bus specification and user manual (UM10204), revision 6.0, 2014.
- Philips Semiconductors. The I²C-bus and how to use it (1995).
- Гук М. Аппаратные интерфейсы ПК. — СПб.: Питер, 2010.
- Уильямс Т. Протоколы передачи данных в микроконтроллерных системах. — М.: ДМК Пресс, 2015.
- Datasheets микросхем: AT24C02, PCF8574, DS1307, MPU6050.
BFOmetr — база данных и аналитика по компаниям России.
На главную BFOmetr →