I²C
I²C (Inter-Integrated Circuit) — это последовательная асимметричная шина для связи между интегральными схемами, разработанная компанией Philips Semiconductors (ныне NXP Semiconductors) в начале 1980-х годов. Шина предназначена для соединения периферийных устройств (микросхем памяти, датчиков, АЦП, ЦАП, дисплеев) с управляющим микроконтроллером или микропроцессором при минимальном количестве проводников. I²C использует две двунаправленные линии: последовательную линию данных (SDA) и последовательную линию тактового сигнала (SCL). Стандарт поддерживает многоадресную адресацию, что позволяет подключать к одной шине до 128 (в 7-битном режиме) или до 1024 (в 10-битном режиме) устройств. Протокол является синхронным, полудуплексным и работает в режиме «ведущий-ведомый» (master-slave), где ведущий генерирует тактовый сигнал и инициирует передачу.
История
I²C была разработана в 1982 году инженером компании Philips Стивеном Бейкером (Stephen Baker) для упрощения внутренней связи между микросхемами в телевизионных приёмниках. Первоначально шина использовалась для управления настройками телевизоров (громкость, яркость, контрастность) и для связи с памятью конфигурации. В 1992 году была опубликована первая спецификация стандарта, которая определила базовые скорости передачи данных (100 кбит/с — стандартный режим) и формат адресации. В 1995 году появилась версия с поддержкой скорости 400 кбит/с (Fast-mode). В 1998 году был добавлен High-speed mode (Hs-mode) с частотой до 3,4 Мбит/с, а в 2007 году — Ultra Fast-mode (UFm) с односторонней передачей данных до 5 Мбит/с. В 2012 году спецификация была обновлена до версии 6.0, которая включила Fast-mode Plus (Fm+) с частотой до 1 Мбит/с и улучшенную помехоустойчивость. В 2021 году NXP выпустила версию 7.0, добавившую режим I3C (Improved Inter-Integrated Circuit), который является обратно совместимым с I²C, но обеспечивает скорость до 12,5 Мбит/с и более низкое энергопотребление.
Физический уровень и электрические характеристики
Линии и соединение
Шина I²C состоит из двух линий: SDA (Serial Data Line) и SCL (Serial Clock Line). Обе линии являются двунаправленными и работают по принципу «монтажное И» (wired-AND): любое устройство может притянуть линию к логическому нулю (низкий уровень), а высокий уровень обеспечивается подтягивающими резисторами, подключёнными к напряжению питания (обычно от 1,8 до 5,5 В). Каждое устройство на шине имеет открытый коллектор или открытый сток на выходах SDA и SCL, что позволяет нескольким устройствам одновременно управлять линией без короткого замыкания.
Подтягивающие резисторы
Значение подтягивающих резисторов выбирается в зависимости от ёмкости шины и требуемой скорости. Для стандартного режима (100 кГц) при ёмкости до 400 пФ типичное сопротивление составляет 4,7 кОм. Для Fast-mode (400 кГц) резисторы уменьшают до 1–2 кОм. При высоких скоростях (Fm+, Hs-mode) сопротивление может быть ниже 1 кОм, но при этом возрастает потребляемая мощность.
Уровни напряжения
I²C поддерживает несколько уровней логических сигналов: 5 В (стандартный), 3,3 В, 2,5 В, 1,8 В и даже 1,2 В (для низковольтных устройств). Устройства с разными напряжениями могут быть объединены на одной шине при условии, что подтягивающее напряжение выбрано по самому низкому из используемых, а входы всех устройств толерантны к этому напряжению.
Максимальная длина шины
Длина шины ограничена паразитной ёмкостью линий (обычно не более 400 пФ). Для стандартного режима при ёмкости 400 пФ максимальная длина составляет около 1–2 метров (зависит от качества кабеля и экранирования). Для Fast-mode и выше длина сокращается до 0,5 метра. При использовании повторителей (repeaters) или буферов длина может быть увеличена до нескольких десятков метров.
Протокол передачи данных
Формат кадра
Передача данных по I²C начинается с условия «Старт» (START): когда SCL находится в высоком уровне, SDA переходит из высокого в низкий. После этого ведущий передаёт 7-битный (или 10-битный) адрес ведомого устройства, за которым следует бит чтения/записи (R/W): 0 — запись, 1 — чтение. Ведомый, распознавший свой адрес, отвечает битом подтверждения (ACK) — притягивает SDA к низкому уровню на девятом такте SCL. Если ведомый не отвечает (NACK), передача прекращается.
После адресации следует один или несколько байтов данных (8 бит), каждый из которых подтверждается битом ACK или NACK. Передача завершается условием «Стоп» (STOP): когда SCL находится в высоком уровне, SDA переходит из низкого в высокий. В режиме чтения ведущий после получения последнего байта отправляет NACK, чтобы сообщить ведомому о завершении приёма.
Режимы адресации
- 7-битная адресация: адресное пространство — 128 адресов (0x00–0x7F). Из них 16 адресов зарезервированы для специальных целей (например, 0x00 — общий вызов, 0x01–0x07 — адреса для CBUS, 0x78–0x7B — для 10-битной адресации). Фактически доступно около 112 адресов.
- 10-битная адресация: позволяет адресовать до 1024 устройств. Первый байт после START содержит код 11110XX, где XX — два старших бита 10-битного адреса, а второй байт — младшие 8 бит. Этот режим используется редко из-за усложнения протокола.
Скоростные режимы
| Режим | Максимальная частота SCL | Примечание |
|---|---|---|
| Стандартный (Sm) | 100 кГц | Базовый режим, совместим со всеми устройствами |
| Fast-mode (Fm) | 400 кГц | Наиболее распространённый режим |
| Fast-mode Plus (Fm+) | 1 МГц | Требует более мощных подтягивающих резисторов |
| High-speed (Hs) | 3,4 МГц | Использует специальный протокол с дополнительным тактовым сигналом |
| Ultra Fast-mode (UFm) | 5 МГц | Только односторонняя передача (от ведущего к ведомым) |
| I3C | до 12,5 МГц | Обратно совместим с I²C, но не является частью стандарта I²C |
Арбитраж
I²C поддерживает арбитраж на шине: несколько ведущих могут одновременно пытаться начать передачу. Если один ведущий притягивает SDA к низкому уровню, а другой пытается установить высокий, первый «выигрывает» арбитраж, а второй обнаруживает конфликт и отключается. Арбитраж возможен только на уровне битов адреса и данных, но не на уровне START/STOP.
Применение
Встраиваемые системы
I²C широко используется в микроконтроллерах (например, Arduino, STM32, ESP32, Raspberry Pi) для подключения периферии: датчиков температуры (DS18B20, TMP102), давления (BMP280), влажности (DHT22), акселерометров (MPU6050), гироскопов, магнитометров, а также дисплеев (OLED на SSD1306, LCD на PCF8574) и EEPROM-памяти (AT24Cxx).
Промышленная автоматика
В промышленности I²C применяется для связи с АЦП и ЦАП (например, MCP4725, ADS1115), цифровыми потенциометрами, таймерами (DS3231), а также для управления конфигурацией FPGA и CPLD. Из-за ограниченной длины и помехоустойчивости в промышленных условиях часто используют гальваническую развязку (оптопары, изоляторы) или повторители.
Потребительская электроника
I²C используется в телевизорах, мониторах, DVD-плеерах, смартфонах и планшетах для управления ЖК-панелями, сенсорными экранами, аудиокодеками, блоками питания (PMIC) и аккумуляторами. В компьютерах шина применяется для чтения SPD-данных из модулей оперативной памяти (DIMM) и для управления вентиляторами и датчиками температуры (SMBus — вариант I²C).
Автомобильная электроника
В автомобилях I²C используется для связи с датчиками (давление в шинах, уровень топлива, температура охлаждающей жидкости), для управления светодиодными лампами, климат-контролем и мультимедийными системами. Однако из-за жёстких требований к надёжности и помехоустойчивости в автомобилях часто применяют CAN-шину или LIN, а I²C — только внутри отдельных блоков.
Преимущества и недостатки
Преимущества
- Минимальное количество проводников: всего две линии (SDA и SCL) позволяют подключать множество устройств.
- Простота реализации: протокол легко реализуется как аппаратно (в микроконтроллерах), так и программно (bit-banging).
- Многоадресность: возможность подключения до 128 устройств на одну шину без дополнительных выборок.
- Гибкость: поддержка нескольких скоростей, 7- и 10-битной адресации, арбитража.
- Низкая стоимость: подтягивающие резисторы и открытые коллекторы дёшевы и широко доступны.
Недостатки
- Ограниченная длина шины: из-за паразитной ёмкости и отсутствия дифференциальной передачи длина редко превышает несколько метров.
- Низкая помехоустойчивость: открытый коллектор и несимметричные линии делают шину чувствительной к электромагнитным помехам.
- Полудуплексный режим: одновременная передача в обе стороны невозможна, что снижает пропускную способность.
- Ограниченная скорость: даже в режиме Hs (3,4 Мбит/с) I²C уступает SPI (до 50 Мбит/с) и USB.
- Зависимость от подтягивающих резисторов: неправильный выбор резисторов может привести к сбоям или повышенному энергопотреблению.
Сравнение с другими шинами
| Параметр | I²C | SPI | UART (RS-232) | CAN |
|---|---|---|---|---|
| Количество проводников | 2 | 3–4 (MOSI, MISO, SCLK, CS) | 2 (TX, RX) | 2 (CAN_H, CAN_L) |
| Режим передачи | Полудуплекс | Полный дуплекс | Полный дуплекс | Полудуплекс |
| Скорость | до 5 Мбит/с (UFm) | до 50 Мбит/с | до 1 Мбит/с | до 1 Мбит/с |
| Количество устройств | до 128 (7-бит) | неограниченно (с CS) | 2 (точка-точка) | до 128 |
| Длина шины | до 2 м | до 1 м | до 15 м | до 40 м (при 1 Мбит/с) |
| Помехоустойчивость | Низкая | Средняя | Низкая | Высокая (дифференциальная) |
| Сложность реализации | Низкая | Средняя | Низкая | Высокая |
Интересные факты
- Название I²C расшифровывается как Inter-Integrated Circuit, что отражает её первоначальное назначение — соединение интегральных схем внутри одного устройства.
- Спецификация I²C является открытой и бесплатной, но для получения официального документа требуется регистрация на сайте NXP.
- Существует множество клонов и вариаций I²C: SMBus (System Management Bus, разработан Intel), TWI (Two-Wire Interface, используемый в Atmel AVR), I3C (Improved I²C, стандарт MIPI Alliance).
- В 2006 году Philips передала права на I²C компании NXP Semiconductors, которая до сих пор поддерживает стандарт.
- I²C используется в космической технике (например, в спутниках CubeSat) благодаря своей простоте и низкому энергопотреблению, но с дополнительной радиационной защитой.
Источники
- NXP Semiconductors. I²C-bus specification and user manual (UM10204), revision 7.0, 2021.
- Philips Semiconductors. The I²C-bus and how to use it (including specifications), 1995.
- Stephen Baker. The I²C Bus: A Brief History, 2012.
- MIPI Alliance. I3C Specification, version 1.1, 2020.
- Texas Instruments. Understanding the I²C Bus (Application Report SLVA704), 2015.
- Atmel Corporation. AVR311: Using the TWI Module as I²C Slave, 2008.
- Wikipedia contributors. I²C. Wikipedia, The Free Encyclopedia.
BFOmetr — база данных и аналитика по компаниям России.
На главную BFOmetr →