I²C - I²C

я2Автобус C
I²C bus logo.svg
ТипПоследовательная связь автобус
ДизайнерПолупроводник Philips, известный сегодня как Полупроводники NXP
Разработан1982; 38 лет назад (1982)
Сигнал данныхОткрытый коллектор или открытый сток
Ширина1 бит (SDA) с отдельными часами (SCL)
Битрейт0,1, 0,4, 1,0, 3,4 или 5,0Мбит / с в зависимости от режима
ПротоколСерийный, полудуплекс

я2C (Межинтегральная схема), произносится I-квадрат-C, это синхронный, мульти-мастер, мульти-подчиненный, с коммутацией пакетов, односторонний, последовательная связь автобус изобретен в 1982 году Полупроводник Philips (сейчас же Полупроводники NXP ). Он широко используется для подключения низкоскоростных периферийных устройств. ИС переработчикам и микроконтроллеры в междугородной, внутрибортовой связи. В качестве альтернативы я2C пишется I2C (произносится I-two-C) или IIC (произносится I-I-C).

С 10 октября 2006 г. лицензионные сборы не требуются для внедрения I2Протокол C. Однако для получения I2Адреса ведомых устройств C, выделенные NXP.[1]

Несколько конкурентов, таких как Сименс (позже Infineon Technologies, сейчас же Intel Mobile Communications ), NEC, Инструменты Техаса, STMicroelectronics (ранее SGS-Thomson), Motorola (позже Freescale, теперь объединен с NXP),[2] Nordic Semiconductor и Интерсил, представили совместимый I2Продукция C на рынке с середины 1990-х годов.

Системная шина управления (SMBus), определенный Intel в 1995 году, является подмножеством I2C, определяющий более строгое использование. Одна из целей SMBus - повысить надежность и функциональную совместимость. Соответственно, современный I2Системы C включают некоторые политики и правила из SMBus, иногда поддерживая как I2C и SMBus, требующие лишь минимальной переконфигурации посредством команды или использования вывода.

Приложения

STMicroelectronics 24C08: серийный EEPROM с я2Автобус C[3]
16-битный АЦП доска с я2C интерфейс

я2C подходит для периферийных устройств, где простота и низкая стоимость производства важнее скорости. Общие приложения I2Автобусы C являются:

Особая сила I2C - способность микроконтроллер управлять сетью микросхем устройства всего двумя универсальный ввод / вывод контакты и программное обеспечение. Многие другие шинные технологии, используемые в аналогичных приложениях, например Шина последовательного периферийного интерфейса (SPI), требуется больше контактов и сигналов для подключения нескольких устройств.

Редакции

История I2Выпуски спецификации C
ГодВерсияМаксимальная скоростьЗаметкиPDF
1982Оригинал100 кбит / сЯ2Система C была создана как простая внутренняя шина для построения управляющей электроники с различными микросхемами Philips.н / д
19921400 кбит / сДобавлено Быстрый режим (FM) и 10-битный режим адресации для увеличения емкости до 1008 узлов. Это была первая стандартизированная версия.н / д
199823,4 Мбит / сДобавлено Скоростной режим (Hs) с энергосберегающими требованиями по электрическому напряжению и току.н / д
20002.13,4 Мбит / сУточненная версия 2, без существенных функциональных изменений.[5]
200731 Мбит / сДобавлено Быстрый режим плюс (Fm +) (с использованием драйверов 20 мА) и механизма идентификации устройства.[6]
201245 Мбит / сДобавлено Ультрабыстрый режим (UFm) для новых линий USDA (данные) и USCL (часы) с использованием тяни-Толкай логика без подтягивающие резисторы, и добавил назначенную таблицу идентификаторов производителя. Это всего лишь однонаправленный автобус.[7]
201255 Мбит / сИсправленные ошибки.[8]
201465 Мбит / сПодправил два графика. Это действующий стандарт.[9]

дизайн

Пример схемы с одним мастером ( микроконтроллер ), три подчиненных узла ( АЦП, а ЦАП, и микроконтроллер), и подтягивающие резисторы рп

я2C использует только два двунаправленных открытый коллектор или открытый сток линии, последовательная линия данных (SDA) и последовательная линия синхронизации (SCL), подъехал с участием резисторы.[9] Обычно используются напряжения +5 В или +3,3 В, хотя разрешены системы с другими напряжениями.

Я2C эталонный дизайн имеет 7-битный адресное пространство, с редко используемым 10-битным расширением.[10] Общие I2Скорость автобуса C составляет 100кбит / с стандартный режим и 400 кбит / с Быстрый режим. Также есть 10 кбит / с тихоходный режим, но также допускаются произвольно низкие тактовые частоты. Последние редакции I2C может размещать больше узлов и работать на более высоких скоростях (400 кбит / с Быстрый режим, 1 Мбит / с Быстрый режим плюс, 3.4 Мбит / с Высокоскоростной режим, и 5Мбит / с Ультра быстрый режим). Эти скорости более широко используются во встроенных системах, чем на ПК.

Обратите внимание, что скорости передачи данных указаны для передач между ведущим и ведомым без увеличения тактовой частоты или других аппаратных накладных расходов. Служебные данные протокола включают адрес подчиненного устройства и, возможно, адрес регистра в подчиненном устройстве, а также побайтовые биты ACK / NACK. Таким образом, фактическая скорость передачи пользовательских данных ниже, чем можно было бы предположить только с помощью этих пиковых битовых скоростей. Например, если каждое взаимодействие с ведомым устройством неэффективно позволяет передавать только 1 байт данных, скорость передачи данных будет меньше половины максимальной скорости передачи битов.

Количество узлов, которые могут существовать на заданном I2Шина C ограничена адресным пространством, а также общей шиной емкость из 400пФ, что ограничивает практическое расстояние связи до нескольких метров. Относительно высокий импеданс и низкая помехоустойчивость требуют наличия общего потенциала земли, что опять же ограничивает практическое использование связи внутри одной и той же печатной платы или небольшой системы плат.

Эталонный дизайн

Вышеупомянутый эталонный дизайн представляет собой автобус с Часы (SCL) и данные (SDA) с 7-битной адресацией. Шина имеет две роли для узлов: ведущую и ведомую:

  • Главный узел - узел, который генерирует часы и инициирует связь с ведомыми устройствами.
  • Подчиненный узел - узел, который принимает часы и отвечает, когда к нему обращается ведущий.

Автобус - это шина с несколькими ведущими, что означает, что может присутствовать любое количество мастер-узлов. Кроме того, между сообщениями могут меняться роли ведущего и ведомого (после отправки STOP).

Для данного устройства шины может быть четыре возможных режима работы, хотя большинство устройств используют только одну роль и два ее режима:

  • ведущая передача - ведущий узел отправляет данные ведомому,
  • master receive - мастер-узел получает данные от ведомого,
  • подчиненная передача - подчиненный узел отправляет данные мастеру,
  • slave receive - подчиненный узел получает данные от мастера.

Помимо битов данных 0 и 1, I2Шина C позволяет использовать специальные сигналы START и STOP, которые действуют как разделители сообщений и отличаются от битов данных. (Это в отличие от стартовые биты и стоповые биты используется в асинхронная последовательная связь, которые отличаются от битов данных только по времени.)

Изначально мастер находится в режиме передачи ведущего, отправляя START, за которым следует 7-битный адрес ведомого, с которым он хочет связаться, за которым, наконец, следует один бит, представляющий, хочет ли он записать (0) в или прочитать (1 ) от раба.

Если ведомое устройство существует на шине, оно ответит ACK бит (активный низкий для подтвержденного) для этого адреса. Затем ведущее устройство продолжает работу в режиме передачи или приема (в зависимости от отправленного им бита чтения / записи), а ведомое устройство продолжает работу в дополнительном режиме (прием или передача, соответственно).

Адрес и байты данных отправляются старший бит первый. На начальное состояние указывает переход SDA с высокого уровня на низкий с высоким уровнем SCL; состояние остановки обозначается переходом SDA с низкого уровня на высокий с высоким уровнем SCL. Все остальные переходы SDA происходят с низким SCL.

Если ведущее устройство желает записать на ведомое устройство, оно повторно отправляет байт, а ведомое устройство отправляет бит ACK. (В этой ситуации ведущее устройство находится в режиме передачи ведущего, а ведомое устройство находится в режиме приема ведомого.)

Если ведущий желает читать с ведомого, то он многократно получает байт от ведомого, причем ведущий отправляет бит ACK после каждого байта, кроме последнего. (В этой ситуации ведущее устройство находится в режиме приема ведущего, а ведомое устройство находится в режиме передачи ведомого.)

Я2Транзакция C может состоять из нескольких сообщений. Мастер завершает сообщение условием STOP, если это конец транзакции, или может отправить другое условие START, чтобы сохранить контроль над шиной для другого сообщения (транзакция «комбинированного формата»).

Протоколы сообщений

я2C определяет основные типы транзакций, каждая из которых начинается с START и заканчивается STOP:

  • Одиночное сообщение, в котором мастер записывает данные подчиненному.
  • Одиночное сообщение, в котором мастер считывает данные с ведомого.
  • Комбинированный формат, при котором ведущее устройство выполняет не менее двух операций чтения или записи в одно или несколько ведомых устройств.

В комбинированной транзакции каждое чтение или запись начинается с START и адреса ведомого устройства. Условия СТАРТА после первого также называются повторный СТАРТ биты. Повторным запускам не предшествуют условия STOP, благодаря которым ведомые устройства узнают, что следующее сообщение является частью той же транзакции.

Любое ведомое устройство будет отвечать только на определенные сообщения, как указано в документации по его продукту.

Чистый я2Системы C поддерживают произвольные структуры сообщений. SMBus ограничен девятью из этих структур, например прочитать слово N и напишите слово Nс участием одного раба. PMBus расширяет SMBus с помощью Группа протокол, позволяющий отправлять несколько таких транзакций SMBus в одном комбинированном сообщении. Завершающий STOP указывает, когда эти сгруппированные действия должны вступить в силу. Например, одна операция PMBus может изменить конфигурацию трех источников питания (с использованием трех разных I2C подчиненных адресов), и их новые конфигурации вступят в силу одновременно: когда они получат этот STOP.

За редким исключением, я тоже2C и SMBus определяют семантику сообщений, например значение байтов данных в сообщениях. В остальном семантика сообщений зависит от продукта. Эти исключения включают сообщения, адресованные I2C общий вызов адрес (0x00) или к SMBus Адрес ответа на оповещение; и сообщения, задействованные в SMBus Протокол разрешения адресов (ARP) для динамического распределения адресов и управления ими.

На практике большинство ведомых устройств используют модели управления запрос-ответ, в которых один или несколько байтов, следующих за командой записи, рассматриваются как команда или адрес. Эти байты определяют, как обрабатываются последующие записанные байты или как ведомое устройство реагирует на последующие чтения. Большинство операций SMBus включают однобайтовые команды.

Пример обмена сообщениями: 24C32 EEPROM

Одним из конкретных примеров является тип 24C32. EEPROM, который использует два байта запроса, которые называются старшим и младшим адресами. (Соответственно, эти EEPROM не могут использоваться хостами с чистой шиной SMBus, которые поддерживают только однобайтовые команды или адреса.) Эти байты используются для адресации байтов в пределах 32кбит (или 4кБ ) Адресное пространство EEPROM. Такая же двухбайтовая адресация также используется более крупными EEPROM, такими как 24C512, которые хранят 512 кбит (или 64 кБ). Для записи и чтения данных в эти EEPROM используется простой протокол: записывается адрес, а затем данные передаются до конца сообщения. Часть протокола передачи данных может вызвать проблемы в SMBus, поскольку байтам данных не предшествует счетчик, и за один раз можно передать более 32 байтов. я2C EEPROM меньше 32 кбит, например 2 кбит 24C02, часто используются на SMBus с неэффективной передачей однобайтовых данных для решения этой проблемы.

В EEPROM записывается одно сообщение. После СТАРТА мастер отправляет адрес шины микросхемы с сбросом бита направления (записывать), затем отправляет двухбайтовый адрес данных в EEPROM, а затем отправляет байты данных для записи, начиная с этого адреса, после чего следует STOP. При записи нескольких байтов все байты должны находиться на одной 32-байтовой странице. Пока он занят сохранением этих байтов в памяти, EEPROM не будет отвечать на дальнейшие запросы.2C. запросы. (Это еще одна несовместимость с SMBus: устройства SMBus всегда должны отвечать на свои адреса шины.)

Для чтения, начиная с определенного адреса в EEPROM, используется комбинированное сообщение. После START мастер сначала записывает адрес шины этого чипа с сбросом бита направления (записывать), а затем два байта адреса данных EEPROM. Затем он отправляет (повторный) START и адрес шины EEPROM с установленным битом направления (читать). Затем EEPROM ответит байтами данных, начинающимися с указанного адреса данных EEPROM - комбинированное сообщение: сначала запись, затем чтение. Мастер выдает ACK после каждого байта чтения, кроме последнего байта, а затем выдает STOP. EEPROM увеличивает адрес после каждого переданного байта данных; При многобайтовом чтении можно получить все содержимое EEPROM с помощью одного комбинированного сообщения.

Физический слой

На физический слой, обе линии SCL и SDA имеют открытый сток дизайн, таким образом подтягивающие резисторы необходимы. Логический «0» выводится путем заземления линии, а логическая «1» выводится, позволяя линии плавать (вывод высокий импеданс ), так что подтягивающий резистор подтягивает его высоко. Линия никогда не поднимается активно. Такая разводка позволяет нескольким узлам подключаться к шине без коротких замыканий из-за конфликта сигналов. Высокоскоростные системы (и некоторые другие) могут использовать Источник тока вместо резистора для подтягивания только SCL или обоих SCL и SDA, чтобы обеспечить более высокую емкость шины и обеспечить более быстрое время нарастания.

Важным следствием этого является то, что несколько узлов могут управлять линиями одновременно. Если Любые узел понижает линию, она будет низкой. Узлы, которые пытаются передать логическую единицу (т. Е. Позволяют линии оставаться на высоком уровне), могут обнаружить это и сделать вывод, что другой узел активен в то же время.

При использовании на SCL это называется часы растяжения и представляет собой механизм управления потоком для ведомых устройств. При использовании в SDA это называется арбитраж и гарантирует, что одновременно будет только один передатчик.

В режиме ожидания на обеих линиях высокий уровень. Чтобы начать транзакцию, SDA опускается на низкий уровень, а SCL остается высоким. Это незаконно[9]:14 чтобы передать маркер остановки, отпустив SDA, чтобы снова установить высокий уровень (хотя такое «сообщение о недействительности» обычно безвредно), поэтому следующим шагом является снижение SCL.

За исключением сигналов пуска и останова, линия SDA изменяется только тогда, когда часы на низком уровне; Передача бита данных состоит в подаче импульса на линию тактового сигнала на высоком уровне при удержании линии данных на желаемом уровне.

Пока SCL низкий, передатчик (изначально ведущий) устанавливает SDA на желаемое значение и (после небольшой задержки, позволяющей этому значению распространяться) позволяет SCL оставаться на высоком уровне. Затем мастер ожидает, пока SCL действительно станет высоким; это будет задержано конечным временем нарастания сигнала SCL ( Постоянная времени RC из подтягивающий резистор и паразитная емкость автобуса) и может быть дополнительно задержан растяжением часов ведомого.

Как только SCL становится высоким, мастер ожидает минимальное время (4 мкс для стандартной скорости I2C), чтобы убедиться, что получатель увидел бит, затем снова понижает его. На этом передача одного бита завершена.

После каждых 8 битов данных в одном направлении бит «подтверждения» передается в другом направлении. Передатчик и приемник меняются ролями для одного бита, а исходный приемник передает один бит «0» (ACK) обратно. Если вместо этого передатчик видит бит «1» (NACK), он узнает, что:

  • (Если ведущий передает ведомому) ведомое устройство не может принять данные. Нет такого ведомого устройства, команда не распознана или не может принимать больше данных.
  • (Если ведомый передает ведущему) Ведущий желает, чтобы передача остановилась после этого байта данных.

Только линия SDA меняет направление во время битов подтверждения; SCL всегда контролируется мастером.

После бита подтверждения линия синхронизации становится низкой, и мастер может сделать одно из трех:

  • Начните передачу другого байта данных: передатчик устанавливает SDA, а главный импульс устанавливает высокий уровень SCL.
  • Отправить «Стоп»: установите SDA на низкий уровень, позвольте SCL стать высоким, затем отпустите SDA на высокий уровень. Это освобождает I2Автобус C.
  • Отправить «Повторный запуск»: установите высокий уровень SDA, позвольте SCL повысить уровень, затем снова установите низкий уровень SDA. Это начинает новый я2Сообщение шины C без освобождения шины.

Растяжка часов с использованием SCL

Одна из наиболее значимых особенностей I2Протокол C - это растяжение часов. Адресованное ведомое устройство может удерживать линию синхронизации (SCL) на низком уровне после приема (или отправки) байта, указывая на то, что оно еще не готово к обработке дополнительных данных. Ведущее устройство, которое обменивается данными с ведомым устройством, может не завершить передачу текущего бита, но должно дождаться, пока линия синхронизации фактически не перейдет в высокий уровень. Если ведомое устройство растягивает часы, линия часов все еще будет на низком уровне (потому что соединения открытый сток ). То же самое верно, если второй, более медленный, мастер пытается одновременно управлять часами. (Если есть более одного мастера, все, кроме одного, обычно проигрывают арбитраж.)

Мастер должен подождать, пока он не заметит, что линия тактовой частоты становится высокой, и дополнительное минимальное время (4 мкс для стандартных 100 кбит / с I2C) перед тем, как снова установить часы на низкий уровень.

Хотя мастер может также удерживать линию SCL на низком уровне столько, сколько пожелает (это не разрешено в последней версии 6 протокола - подраздел 3.1.1), термин «растяжение часов» обычно используется только тогда, когда это делают подчиненные. . Хотя теоретически любой тактовый импульс может быть растянут, обычно используются интервалы до или после бита подтверждения. Например, если раб микроконтроллер, это я2Интерфейс C может растягивать часы после каждого байта, пока программное обеспечение не решит, отправлять ли положительное подтверждение или NACK.

Растяжение часов - единственное время в I2C где ведомый диск SCL. Многие ведомые устройства не нуждаются в тактовой растяжке и поэтому рассматривают SCL строго как вход без каких-либо схем для его управления. Некоторые мастера, например, найденные внутри custom ASIC может не поддерживать растяжение часов; часто эти устройства обозначаются как "двухпроводные интерфейсы", а не я2С.

Чтобы обеспечить минимальный автобус пропускная способность, SMBus устанавливает ограничения на то, насколько далеко могут быть растянуты часы. Хосты и подчиненные устройства, соблюдающие эти ограничения, не могут блокировать доступ к шине более чем на короткое время, что не является гарантией, предоставляемой чистым I2Системы C.

Арбитраж с использованием SDA

Каждый мастер контролирует шину на предмет стартовых и стоповых битов и не запускает сообщение, пока другой мастер держит шину занятой. Однако два ведущего могут начать передачу примерно в одно и то же время; в этом случае происходит арбитраж. Режим передачи ведомого также может быть арбитражным, когда ведущее устройство обращается к нескольким ведомым, но это менее распространено. В отличие от протоколов (таких как Ethernet ), которые используют случайные задержки отсрочки перед повторной попыткой, I2C имеет детерминированную арбитражную политику. Каждый передатчик проверяет уровень линии данных (SDA) и сравнивает его с ожидаемыми уровнями; если они не совпадают, этот передатчик потерял арбитраж и выпадает из этого взаимодействия протокола.

Если один передатчик устанавливает SDA в 1 (не передает сигнал), а второй передатчик устанавливает его в 0 (замыкание на землю), результатом будет низкий уровень линии. Затем первый передатчик замечает, что уровень линии отличается от ожидаемого, и приходит к выводу, что другой узел передает. Первый узел, который заметит такую ​​разницу, - это тот, который проигрывает арбитраж: он перестает управлять SDA. Если это мастер, он также прекращает управление SCL и ожидает STOP; затем он может попытаться переиздать сообщение полностью. Тем временем другой узел не заметил никакой разницы между ожидаемым и фактическим уровнями SDA и поэтому продолжает передачу. Это может сделать это без проблем, потому что пока сигнал был именно таким, как ожидалось; ни один другой передатчик не нарушил его сообщение.

Если два мастера отправляют сообщение двум различным ведомым устройствам, тот, который отправляет младший адрес ведомого, всегда «выигрывает» арбитраж на этапе адресации. Поскольку два ведущего устройства могут отправлять сообщения на один и тот же адрес ведомого устройства, а адреса иногда относятся к нескольким ведомым устройствам, арбитраж иногда должен продолжаться на этапах передачи данных.

Арбитраж происходит очень редко, но он необходим для правильной поддержки нескольких мастеров. Как и в случае с растяжением часов, не все устройства поддерживают арбитраж. Те, кто это делает, обычно называют себя поддерживающими связь с несколькими мастерами.

Один случай, с которым нужно обращаться осторожно в мульти-мастер I2Реализация C - это мастер, говорящий друг с другом. Один мастер может проиграть арбитраж входящего сообщения и должен вовремя сменить свою роль с ведущего на ведомое, чтобы подтвердить свой собственный адрес.

В очень редком случае, когда два мастера одновременно отправляют идентичные сообщения, оба будут считать обмен данными успешным, но подчиненный увидит только одно сообщение. По этой причине, когда к ведомому устройству могут обращаться несколько мастеров, каждая команда, распознаваемая ведомым устройством, должна быть идемпотент или должны быть гарантированы, что они никогда не будут выданы двумя мастерами одновременно. (Например, команда, которая выдается только одним мастером, не обязательно должна быть идемпотентной, а также не обязательно, чтобы конкретная команда была идемпотентной, когда некоторый механизм взаимного исключения гарантирует, что только один мастер может быть вызван для выполнения этой команды в любой момент времени. .)

Арбитраж в SMBus

В то время как я2С арбитром только между мастерами, SMBus использует арбитраж в трех дополнительных контекстах, где несколько ведомых устройств отвечают главному устройству, а один получает свое сообщение.

  • Хотя концептуально это шина с одним ведущим устройством, ведомое устройство, поддерживающее «протокол уведомления хоста», действует как ведущее устройство для выполнения уведомления. Он захватывает шину и записывает 3-байтовое сообщение по зарезервированному адресу «SMBus Host» (0x08), передавая свой адрес и два байта данных. Когда два ведомых устройства пытаются уведомить хост одновременно, одно из них теряет арбитраж и ему необходимо повторить попытку.
  • Альтернативная система уведомления ведомого устройства использует отдельный сигнал SMBALERT # для запроса внимания. В этом случае хост выполняет 1-байтовое чтение из зарезервированного «SMBus Alert Response Address» (0x0C), который является разновидностью широковещательного адреса. Все предупреждающие ведомые устройства отвечают байтами данных, содержащими их собственный адрес. Когда ведомое устройство успешно передает свой адрес (выиграв арбитраж против других), оно перестает генерировать прерывание. И в этом, и в предыдущем случае арбитраж гарантирует, что сообщение одного ведомого будет получено, а остальные будут знать, что они должны повторить попытку.
  • SMBus также поддерживает «протокол разрешения адресов», в котором устройства возвращают 16-байтовый «универсальный идентификатор устройства» (ТЫ ДЕЛАЛ ). Несколько устройств могут ответить; тот, у кого самый низкий UDID, выиграет арбитраж и будет признан.

Арбитраж в PMBus

PMBus Версия 1.3 расширяет протокол ответа на предупреждения SMBus в его протоколе "чтения зоны".[11] Подчиненные устройства могут быть сгруппированы в «зоны», и все подчиненные устройства в зоне могут быть адресованы для ответа с их ответами замаскированными (исключая нежелательную информацию), инвертированными (таким образом, требуемая информация отправляется как 0 бит, что выигрывает арбитраж) или переупорядочены ( поэтому самая важная информация отправляется первой). Арбитраж гарантирует, что ответ с наивысшим приоритетом будет возвращен мастеру первым.

PMBus резервирует I2Адреса C 0x28 и 0x37 для чтения и записи зоны соответственно.

Различия между режимами

Возможны несколько режимов работы I2C. общение. Все они совместимы со скоростью 100 кбит / с. стандартный режим всегда можно использовать, но объединение устройств с разными возможностями на одной шине может вызвать следующие проблемы:

  • Быстрый режим обладает высокой степенью совместимости и просто сокращает некоторые временные параметры для достижения скорости 400 кбит / с. Быстрый режим широко поддерживается I2C подчиненными устройствами, поэтому ведущее устройство может использовать его, если знает, что емкость шины и сила подтягивания позволяют это.
  • Быстрый режим плюс обеспечивает скорость до 1 Мбит / с с использованием более мощных (20 мА) драйверов и подтягивающих устройств, что позволяет сократить время нарастания и спада. Совместимость с стандарт и быстрый режим устройств (с возможностью подтягивания 3 мА) можно получить, если есть способ уменьшить силу подтягиваний при разговоре с ними.
  • Высокоскоростной режим (3,4 Мбит / с) совместим с нормальным I2Устройства C подключены к той же шине, но для этого требуется, чтобы у ведущего устройства было активное подтягивание на линии синхронизации, которое активируется во время высокоскоростной передачи. Первый бит данных передается с нормальным нарастающим фронтом тактового сигнала с открытым стоком, который может растягиваться. Для оставшихся семи битов данных и ACK ведущее устройство устанавливает высокий уровень синхронизации в соответствующее время, и ведомое устройство может не растягивать его. Всем высокоскоростным передачам предшествует однобайтовый «мастер-код» на быстрой или стандартной скорости. Этот код служит трем целям:
    1. он сообщает высокоскоростным ведомым устройствам переходить на высокоскоростные временные правила,
    2. он гарантирует, что устройства с высокой или нормальной скоростью не будут пытаться участвовать в передаче (потому что это не соответствует их адресу), и
    3. поскольку он идентифицирует мастер (есть восемь мастер-кодов, и каждый мастер должен использовать другой), он гарантирует, что арбитраж завершится до высокоскоростной части передачи, и поэтому высокоскоростная часть не должна учитывать эта способность.
  • Ультра-быстрый режим по сути, я только для записи2Подмножество C, которое несовместимо с другими режимами, за исключением того, что его легко добавить в существующий I2Аппаратный дизайн интерфейса C. Разрешен только один мастер, и он постоянно активно управляет линиями синхронизации и данных для достижения скорости передачи 5 Мбит / с. Растяжение часов, арбитраж, передача чтения и подтверждения опускаются. В основном он предназначен для анимационных Светодиодные дисплеи где ошибка передачи вызовет только несущественный краткий визуальный Сбой. Сходство с другими я2Режимы шины C ограничены:
    • условия запуска и остановки используются для разграничения передач,
    • я2Адресация C позволяет нескольким ведомым устройствам совместно использовать шину без Автобус SPI стиль сигналов выбора ведомого устройства, и
    • девятый тактовый импульс отправляется на каждый переданный байт, обозначающий положение неиспользуемых битов подтверждения.

Некоторые производители предоставляют так называемые нестандартные Турбо режим со скоростью до 1,4 Мбит / с.

Во всех режимах тактовая частота контролируется мастером (ами), и шина, длина которой превышает нормальную, может работать на скорости ниже номинальной посредством разгон.

Цепные соединения

я2C популярен для взаимодействия периферийных схем с системами прототипирования, такими как Ардуино и Raspberry Pi. я2C не использует стандартизированный разъем, однако разработчики плат создали различные схемы подключения для I2C. соединения. Чтобы свести к минимуму возможные повреждения из-за подключения 0,1-дюймовых разъемов назад, некоторые разработчики предложили использовать чередующиеся подключения сигналов и питания следующих схем подключения: (GND, SCL, VCC, SDA) или (VCC, SDA, GND, SCL) .[12]

Подавляющее большинство приложений используют I2C в том виде, в каком он был первоначально разработан - периферийные ИС, подключенные напрямую к процессору на той же печатной плате, и, следовательно, на относительно коротких расстояниях менее 1 фута (30 см) без разъема. Однако при использовании дифференциального драйвера альтернативная версия I2C может общаться на расстоянии до 20 метров (возможно, более 100 метров) на CAT5 или другой кабель.[13][14]

Несколько стандартных разъемов имеют I2Сигналы C. Например, UEXT разъем несет я2C; 10-контактный разъем iPack несет I2C;[15] то 6P6C Коннектор Lego Mindstorms NXT несет я2C;[16][17][18][19] некоторые люди используют разъемы 8P8C и кабель CAT5, обычно используемые для Физический уровень Ethernet вместо этого нести дифференциально-кодированный I2C сигналы[20] или усиленный несимметричный I2Сигналы C;[21] и каждый HDMI и большинство DVI и Разъемы VGA нести DDC2 данные над I2С.

Буферизация и мультиплексирование

Когда много я2C устройств в системе, может возникнуть необходимость включить шину буферы или мультиплексоры для разделения больших сегментов автобуса на более мелкие. Это может быть необходимо для поддержания емкости сегмента шины ниже допустимого значения или для того, чтобы несколько устройств с одним и тем же адресом могли быть разделены мультиплексором. Существует много типов мультиплексоров и буферов, и все они должны учитывать тот факт, что я2Строки C указываются как двунаправленные. Мультиплексоры могут быть реализованы с аналоговыми переключателями, которые могут связывать один сегмент с другим. Аналоговые переключатели поддерживают двунаправленность линий, но не изолируют емкость одного сегмента от другого и не обеспечивают возможность буферизации.

Буферы могут использоваться, чтобы изолировать емкость одного сегмента от другого и / или позволить I2C для отправки по более длинным кабелям или трассам. Буферы для двунаправленных линий, таких как I2C должен использовать одну из нескольких схем предотвращения защелкивания. я2C является открытым стоком, поэтому буферы должны опускаться до минимума с одной стороны, когда они видят низкий уровень с другой. Один из методов предотвращения защелкивания заключается в том, чтобы буфер тщательно выбирал входные и выходные уровни таким образом, чтобы выходной уровень его драйвера был выше, чем его входной порог, что предотвращало его запуск. Например, буфер может иметь входной порог 0,4 В для обнаружения низкого уровня, но низкий выходной уровень 0,5 В. Этот метод требует, чтобы все другие устройства на шине имели пороговые значения, которые совместимы, и часто означает, что несколько буферов, реализующих это схемы нельзя ставить последовательно друг с другом.

В качестве альтернативы существуют другие типы буферов, которые реализуют усилители тока или отслеживают состояние (то есть, какая сторона вызвала низкий уровень шины), чтобы предотвратить фиксацию. Метод состояния обычно означает, что во время передачи обслуживания создается непреднамеренный импульс, когда одна сторона переводит шину на низкий уровень, затем другая - на низкий уровень, а затем первая сторона освобождается (это обычное явление во время I2C подтверждение).

Совместное использование SCL между несколькими шинами

При наличии одного мастера возможно наличие нескольких I2Автобусы C используют одну линию SCL.[22][23] Пакеты на каждой шине отправляются один за другим или в одно и то же время. Это возможно, потому что обмен данными на каждой шине может быть разделен на чередующиеся короткие периоды с высокой вероятностью нежелательной почты, за которыми следуют короткие периоды с низкой вероятностью нежелательной почты. А часы можно растянуть, если одной шине нужно больше времени в одном состоянии.

Преимущества заключаются в использовании ведомых устройств с одним и тем же адресом в одно и то же время и сохранении соединений или в более высокой пропускной способности за счет одновременного использования нескольких линий данных.

Таблица состояний линии

Эти таблицы показывают различные атомные состояния и битовые операции, которые могут происходить во время I2Сообщение C.

Состояние линии
ТипНеактивный автобус

(N)

Начните

(S)

Холостой ход

(я)

Стоп

(П)

Растяжка часов

(CS)

ЗаметкаБесплатно требовать арбитражаТребование автобуса (мастер)Автобус востребован (хозяин)Освобождение автобуса (хозяин)Приостановлено рабом
ПДДПассивное подтягиваниеПадающий край (мастер)На низком уровне (главный)Восходящий край (мастер)Все равно
SCLПассивное подтягиваниеПассивное подтягиваниеПассивное подтягиваниеПассивное подтягиваниеНизкий уровень (раб)
Состояние линии
ТипОтправка одного бита данных (1) (0)

(SDA устанавливается / выбирается после SCL, чтобы избежать обнаружения ложного состояния)

Ответ получателя с битом ACK

(Байт получен от отправителя)

Ответ получателя с битом NACK

(Байт не получен от отправителя)

Битовая установка (Bs)Готов к пробе (Bx)Битовая установка (Bs)ACK (А)Битовая установка (Bs)NACK (A ')
ЗаметкаБит установки отправителя (ведущий / ведомый)Бит выборки приемника (ведущий / ведомый)Отправитель-передатчик привет-ZОтправитель видит, что SDA низкийОтправитель-передатчик привет-ZОтправитель видит, что SDA высокий
ПДДУстановить бит (после падения SCL)Бит захвата (после повышения SCL)Удерживается получателем на низком уровне (после падения SCL)Управляемый высоким (или пассивно высоким) приемником (после падения SCL)
SCLПадающий край (мастер)Восходящий край (мастер)Падающий край (мастер)Восходящий край (мастер)Падающий край (мастер)Восходящий край (мастер)
Состояние линии (повторный запуск)
ТипНастройка для сигнала (Sr) после ACK / NACKПовторный пуск (Sr)
ЗаметкаНачать здесь с ACKИзбегание состояния остановки (P)Начать здесь с NACKТо же, что и сигнал запуска (S)
ПДДНизкий уровень ACKПоднимающийся крайПассивный высокийПассивный высокийПадающий край (мастер)
SCLПадающий край (мастер)На низком уровнеВосходящий край (мастер)Пассивный высокийПассивное подтягивание

Структура адресации

7-битная адресация

Поле:Sя2Поле адреса CR / W 'Ая2Последовательности сообщений C ...п
ТипНачнитеБайт 1ACKБайт X и т. Д.

Остальная часть чтения или записи

сообщение идет сюда

Стоп
Позиция бита в байте X76543210
7-битный адрес pos7654321
ЗаметкаMSBLSB1 = читать
0 = запись

10-битная адресация

Поле:S10-битный индикатор режимаВерхний адресR / W 'АНижнее адресное полея2Последовательности сообщений Cп
ТипНачнитеБайт 1ACKБайт 2Байт X и т. Д.

Остальная часть чтения или записи

сообщение идет сюда

Стоп
Позиция бита в байте X7654321076543210
Битовое значение11110ИксИксИксИксИксИксИксИксИксИксИкс
10-битный адрес pos10987654321
ЗаметкаУказывает 10-битный режимMSB1 = читатьLSB
0 = запись

Зарезервированные адреса в 7-битном адресном пространстве

Две группы адресов зарезервированы для специальных функций:

  • 0000 XXX
  • 1111 ХХХ
Зарезервированный
адрес
показатель
8-битный байтОписание
7-битный адресЗначение R / W
MSB
(4-битный)
LSB
(3-битный)
1 бит
100000000Общий вызов
200000001Начальный байт
30000001ИксАдрес CBUS
40000010ИксЗарезервировано для другого формата шины
50000011ИксЗарезервировано для использования в будущем
600001XXИксМастер-код режима HS
711111XX1Идентификатор устройства
811110XXИкс10-битная адресация ведомого устройства

SMBus резервирует несколько дополнительных адресов. Особенно, 0001 000 зарезервирован для хоста SMBus, который может использоваться ведущими устройствами, 0001 100 это «адрес ответа на оповещение SMBus», который опрашивается хостом после внеполосного прерывания, и 1100 001 - это адрес по умолчанию, который изначально используется устройствами, способными к динамическому назначению адресов.

Незарезервированные адреса в 7-битном адресном пространстве

MSB (4-битный)Типичное использование[24][25][26][27][28]
0001Цифровые ресиверы, SMBus
0010Декодеры ТВ-видео линии, IPMB
0011средний кодеки
0100Видеокодеры, GPIO расширители
0101ДОСТУП к автобусу, PMBus
0110VESA DDC, PMBus
0111Контроллер дисплея
1000Обработка ТВ-сигнала, обработка звука, SMBus
1001AV-переключение, АЦП и ЦАП, IPMB, SMBus
1010Память для хранения, часы реального времени
1011AV процессоры
1100ФАПЧ и тюнеры, модуляторы и демодуляторы, SMBus
1101AV-процессоры и декодеры, усилители мощности звука, SMBus
1110средний цветовое пространство конвертеры

Хотя MSB 1111 зарезервирован для идентификатора устройства и 10-битной адресации ведомого устройства, он также используется VESA. DDC отображать зависимые устройства, такие как указывающих устройств.[27]

Формат транзакции

Я2C сделка состоит из одного или нескольких Сообщения. Каждое сообщение начинается с символа начала, а транзакция заканчивается символом остановки. Начальные символы после первого, которые начинают сообщение, но не транзакцию, называются повторный старт символы.

Каждое сообщение - это чтение или запись. Транзакция, состоящая из одного сообщения, называется транзакцией чтения или записи. Транзакция, состоящая из нескольких сообщений, называется комбинированной транзакцией. Наиболее распространенной формой последнего является сообщение записи, содержащее информацию об адресе устройства, за которым следует сообщение чтения.

Многие я2Устройства C не различают комбинированную транзакцию и одни и те же сообщения, отправленные как отдельные транзакции, но не все. Протокол идентификатора устройства требует единственной транзакции; ведомым запрещается отвечать, если они наблюдают символ остановки. Режимы конфигурации, калибровки или самотестирования, которые вызывают необычную реакцию ведомого устройства, также часто автоматически завершаются в конце транзакции.

Временная диаграмма

Последовательность передачи данных
  1. Передача данных инициируется с помощью Начните состояние (S), о котором сигнализирует пониженный уровень SDA, в то время как SCL остается высоким.
  2. SCL устанавливается на низкий уровень, а SDA устанавливает первый уровень битов данных, сохраняя низкий уровень SCL (во время синей полосы).
  3. Данные выбираются (принимаются), когда SCL повышается для первого бита (B1). Чтобы бит был действительным, SDA не должен изменяться между нарастающим фронтом SCL и последующим спадающим фронтом (все время зеленой полосы).
  4. Этот процесс повторяется, переход SDA выполняется при низком уровне вероятности нежелательной почты, а данные считываются при высоком уровне вероятности нежелательной почты (B2, ... Bn).
  5. За последним битом следует тактовый импульс, во время которого SDA переводится в низкий уровень для подготовки к Стоп немного.
  6. А Стоп Состояние (P) сигнализируется, когда SCL возрастает, а затем SDA.

Чтобы избежать обнаружения ложного маркера, существует минимальная задержка между задним фронтом SCL и изменением SDA, а также между изменением SDA и нарастающим фронтом SCL. Обратите внимание, что I2Сообщение C, содержащее N биты данных (включая подтверждения) содержат N+1 тактовые импульсы.

Пример бит-стука I2Главный протокол C

Ниже приведен пример бит-стук я2Протокол C как I2C мастер. Пример написан на псевдо C. Он иллюстрирует все2Функции C, описанные ранее (растяжение часов, арбитраж, бит запуска / остановки, подтверждение / отсутствие).[29]

  1 // Функции поддержки оборудования, которые ДОЛЖНЫ быть настроены:  2 #define I2CSPEED 100  3 пустота I2C_delay(пустота);  4 bool read_SCL(пустота);  // Возвращаем текущий уровень линии SCL, 0 или 1  5 bool read_SDA(пустота);  // Возвращаем текущий уровень линии SDA, 0 или 1  6 пустота set_SCL(пустота);   // Не управлять SCL (установить контакт с высоким импедансом)  7 пустота clear_SCL(пустота); // Активно управлять низким уровнем сигнала SCL  8 пустота set_SDA(пустота);   // Не использовать SDA (установить контакт с высоким импедансом)  9 пустота clear_SDA(пустота); // Активный низкий уровень сигнала SDA 10 пустота Arbitration_lost(пустота); 11  12 bool начал = ложный; // глобальные данные 13  14 пустота i2c_start_cond(пустота) { 15   если (начал) {  16     // если запущено, выполните условие перезапуска 17     // устанавливаем SDA на 1 18     set_SDA(); 19     I2C_delay(); 20     set_SCL(); 21     в то время как (read_SCL() == 0) { // Растяжение часов 22       // Вы должны добавить таймаут в этот цикл 23     } 24  25     // Время повторной настройки старта, минимум 4.7us 26     I2C_delay(); 27   } 28  29   если (read_SDA() == 0) { 30     Arbitration_lost(); 31   } 32  33   // SCL высокий, установите SDA от 1 до 0. 34   clear_SDA(); 35   I2C_delay(); 36   clear_SCL(); 37   начал = правда; 38 } 39  40 пустота i2c_stop_cond(пустота) { 41   // устанавливаем SDA на 0 42   clear_SDA(); 43   I2C_delay(); 44  45   set_SCL(); 46   // Растяжение часов 47   в то время как (read_SCL() == 0) { 48     // добавляем тайм-аут в этот цикл. 49   } 50  51   // Время установки стопового бита, минимум 4us 52   I2C_delay(); 53  54   // SCL высокий, установите SDA от 0 до 1 55   set_SDA(); 56   I2C_delay(); 57  58   если (read_SDA() == 0) { 59     Arbitration_lost(); 60   } 61  62   начал = ложный; 63 } 64  65 // Записываем бит в шину I2C 66 пустота i2c_write_bit(bool немного) { 67   если (немного) { 68     set_SDA(); 69   } еще { 70     clear_SDA(); 71   } 72  73   // задержка распространения изменения SDA 74   I2C_delay(); 75  76   // Установите высокий уровень вероятности нежелательной почты, чтобы указать, что доступно новое допустимое значение SDA 77   set_SCL(); 78  79   // Ждем пока значение SDA будет прочитано ведомым, минимум 4 мкс для стандартного режима 80   I2C_delay(); 81  82   в то время как (read_SCL() == 0) { // Растяжение часов 83     // Вы должны добавить таймаут в этот цикл 84   } 85  86   // SCL высокий, теперь данные верны 87   // Если SDA высокий, проверяем, что никто другой не управляет SDA 88   если (немного && (read_SDA() == 0)) { 89     Arbitration_lost(); 90   } 91  92   // Очистить SCL до низкого для подготовки к следующему изменению 93   clear_SCL(); 94 } 95  96 // Читаем бит с шины I2C 97 bool i2c_read_bit(пустота) { 98   bool немного; 99 100   // Разрешить ведомому диску данные101   set_SDA();102 103   // Ждем пока значение SDA будет записано ведомым устройством, минимум 4 мкс для стандартного режима104   I2C_delay();105 106   // Установите высокий уровень вероятности нежелательной почты, чтобы указать, что доступно новое допустимое значение SDA107   set_SCL();108 109   в то время как (read_SCL() == 0) { // Растяжение часов110     // Вы должны добавить таймаут в этот цикл111   }112 113   // Ждем пока значение SDA будет записано ведомым устройством, минимум 4 мкс для стандартного режима114   I2C_delay();115 116   // SCL высокий, считывается бит117   немного = read_SDA();118 119   // Устанавливаем низкий уровень вероятности нежелательной почты при подготовке к следующей операции120   clear_SCL();121 122   вернуть немного;123 }124 125 // Записываем байт в шину I2C. Вернуть 0, если ведомый подтвердил.126 bool i2c_write_byte(bool send_start,127                     bool send_stop,128                     беззнаковый char байт) {129   беззнаковый немного;130   bool     Nack;131 132   если (send_start) {133     i2c_start_cond();134   }135 136   для (немного = 0; немного < 8; ++немного) {137     i2c_write_bit((байт & 0x80) != 0);138     байт <<= 1;139   }140 141   Nack = i2c_read_bit();142 143   если (send_stop) {144     i2c_stop_cond();145   }146 147   вернуть Nack;148 }149 150 // Считываем байт из шины I2C151 беззнаковый char i2c_read_byte(bool Nack, bool send_stop) {152   беззнаковый char байт = 0;153   беззнаковый char немного;154 155   для (немного = 0; немного < 8; ++немного) {156     байт = (байт << 1) | i2c_read_bit();157   }158 159   i2c_write_bit(Nack);160 161   если (send_stop) {162     i2c_stop_cond();163   }164 165   вернуть байт;166 }167 168 пустота I2C_delay(пустота) { 169   летучий int v;170   int я;171 172   для (я = 0; я < I2CSPEED / 2; ++я) {173     v;174   }175 }

Поддержка операционной системы

  • В AmigaOS можно использовать компонент i2c.resource[30] для AmigaOS 4.x и MorphOS 3.x или общая библиотека i2c.library Вильгельма Ноекера для старых систем.
  • Ардуино разработчики могут использовать библиотеку Wire.
  • Максимит поддерживает я2Связь с C изначально является частью MMBasic.
  • PICAXE использует команды i2c и hi2c.
  • eCos поддерживает я2C для нескольких аппаратных архитектур.
  • ChibiOS / RT поддерживает я2C для нескольких аппаратных архитектур.
  • FreeBSD, NetBSD и OpenBSD также предоставьте I2Фреймворк C с поддержкой ряда общих главных контроллеров и датчиков.
    • поскольку OpenBSD 3.9 (выпущена 1 мая 2006 г.; 14 лет назад (2006-05-01)), центральный i2c_scan подсистема проверяет все возможные сенсорные чипы одновременно во время загрузки, используя для этого случая схема взвешивания и функция локального кэширования для чтения значений регистров из I2C рабы;[31] это позволяет зондировать датчики на общее назначение с полки оборудование i386 / amd64 во время загрузки без какой-либо настройки пользователем или заметной задержки зондирования; тогда процедуры сопоставления отдельных драйверов должны полагаться только на строковое «дружественное имя» для сопоставления;[32] в результате большинство я2Драйверы сенсоров C автоматически включаются по умолчанию в применимых архитектурах без вреда для стабильности; отдельные датчики, оба я2C и другие экспортируются в пользовательское пространство через sysctl hw.sensors фреймворк.
      По состоянию на март 2019 г., OpenBSD имеет более двух десятков драйверов устройств на I2C которые экспортируют какой-то датчик через hw.sensors framework, и большинство этих драйверов полностью включены по умолчанию в i386 / amd64 ОБЩИЙ ядра OpenBSD.
    • В NetBSD, более двух десятков я2Существуют подчиненные устройства C, оснащенные датчиками аппаратного мониторинга, доступными через sysmon. envsys рамки как списки недвижимости. На оборудовании общего назначения каждый драйвер должен проводить собственное исследование, следовательно, все драйверы для I2Слэйвы C по умолчанию отключены в NetBSD в GENERIC i386 / amd64 сборки.
  • В Linux, Я2C обрабатывается с помощью драйвера устройства для конкретного устройства, а другой - для I2C (или SMBus ) адаптер, к которому он подключен. Несколько сотен таких драйверов входят в состав текущих выпусков.
  • В Mac OS X, их около двух десятков я2Расширения ядра C, которые связываются с датчиками для считывания напряжения, тока, температуры, движения и другого физического состояния.
  • В Майкрософт Виндоус, Я2C реализуется соответствующими драйверами устройств большей части доступного в отрасли оборудования. Для Скрытый встроенный /SoC устройства, Windows 8 и более поздние версии имеют встроенный драйвер шины I²C.[33]
  • В Windows CE, Я2C реализуется соответствующими драйверами устройств большей части доступного в отрасли оборудования.
  • ОС Unison, ОСРВ POSIX для Интернета вещей, поддерживает I2C для нескольких аппаратных архитектур MCU и MPU.
  • В ОС RISC, Я2C имеет общий I2Интерфейс C от контроллера ввода-вывода и поддерживается модульной системой ОС
  • В Синклер QDOS и Минерва QL операционные системы я2C поддерживается набором расширений, предоставляемых Услуги TF.

Инструменты разработки

При разработке или устранении неполадок систем с использованием I2C, видимость на уровне сигналов оборудования может быть важна.

я2Хост-адаптеры C

Существует ряд аппаратных решений для хост-компьютеров, работающих под управлением Linux, Mac или Windows, Я2Возможности C ведущего и / или ведомого. Большинство из них основаны на USB -к-я2Адаптеры C. Не все из них требуют проприетарных драйверов или API.

я2Анализаторы протокола C

я2Анализаторы протокола C - это инструменты, которые отбирают I2C-шина и декодирует электрические сигналы, чтобы обеспечить более высокий уровень представления данных, передаваемых по шине.

Логические анализаторы

При разработке и / или устранении неисправностей I2Шина C, проверка сигналов оборудования может быть очень важной. Логические анализаторы - это инструменты, которые собирают, анализируют, декодируют и хранят сигналы, чтобы люди могли просматривать высокоскоростные сигналы в свое удовольствие. Логические анализаторы отображают временные метки каждого изменения уровня сигнала, что может помочь найти проблемы протокола. Наиболее логические анализаторы имеют возможность декодировать сигналы шины в данные протокола высокого уровня и отображать данные ASCII.

Ограничения

Назначение подчиненных адресов - одна из слабых сторон I2C. Семи битов слишком мало, чтобы предотвратить конфликты адресов между многими тысячами доступных устройств. Что облегчает проблему конфликтов адресов между различными поставщиками, а также позволяет подключаться к нескольким идентичным устройствам, так это то, что производители выделяют контакты, которые можно использовать для установки адреса ведомого устройства на один из нескольких вариантов адреса для каждого устройства. Обычно два или три контакта, и для многих устройств существует три или более вариантов подключения на каждый контактный контакт.[34][35][36]

10-битный I2Адреса C пока широко не используются, и многие операционные системы хоста не поддерживают их.[37] Также нет сложной схемы SMBus "ARP" для динамического назначения адресов (кроме карт PCI с наличием SMBus, для которых это необходимо).

Связанная с этим проблема - автоматическая конфигурация шины. Данный адрес может использоваться рядом различных несовместимых с протоколом устройств в различных системах, и вряд ли какие-либо типы устройств могут быть обнаружены во время выполнения. Например, 0x51 может использоваться 24LC02 или 24C32 EEPROM, с несовместимой адресацией; или с помощью PCF8563 RTC, которые нельзя надежно отличить ни от одного из них (без изменения состояния устройства, что может быть недопустимо). Единственные надежные механизмы конфигурации, доступные для хостов, включают внеполосные механизмы, такие как таблицы, предоставляемые системной микропрограммой, в которых перечислены доступные устройства. Опять же, эту проблему можно частично решить с помощью ARP в системах SMBus, особенно когда используются идентификаторы поставщика и продукта; но это на самом деле не прижилось. Rev. 03 версия I2Спецификация C добавляет механизм идентификатора устройства.

я2C поддерживает ограниченный диапазон скоростей. Хосты, поддерживающие скорости в несколько мегабит, встречаются редко. Поддержка скорости Fm + 1 Мбит / с более распространена, поскольку ее электроника представляет собой простые варианты того, что используется на более низких скоростях. Многие устройства не поддерживают скорость 400 кбит / с (отчасти потому, что SMBus еще не поддерживает ее). я2Узлы C, реализованные программно (вместо выделенного оборудования), могут даже не поддерживать скорость 100 кбит / с; поэтому весь диапазон, определенный в спецификации, можно использовать редко. Все устройства должны хотя бы частично поддерживать самую высокую используемую скорость, иначе они могут ложно определить свой адрес устройства.

Устройствам разрешено увеличивать тактовые циклы в соответствии с их конкретными потребностями, что может ограничивать пропускную способность, необходимую для более быстрых устройств, и увеличивать задержки при разговоре с адресами других устройств. Емкость шины также накладывает ограничение на скорость передачи, особенно когда источники тока не используются для уменьшения времени нарастания сигнала.

Потому что я2C - это общая шина, есть вероятность, что любое устройство откажется и повесит всю шину. Например, если какое-либо устройство удерживает низкий уровень на линии SDA или SCL, это не позволяет мастеру отправлять команды START или STOP для сброса шины. Таким образом, в конструкции обычно включается сигнал сброса, который обеспечивает внешний метод сброса шинных устройств. Однако многие устройства не имеют специального вывода для сброса, что вынуждает разработчика вводить схему, позволяющую включать и выключать питание устройств, если их необходимо перезагрузить.

Из-за этих ограничений (управление адресами, конфигурация шины, возможные сбои, скорость) мало I2Сегменты шины C имеют даже десяток устройств. Обычно системы имеют несколько таких сегментов. Один может быть предназначен для использования с высокоскоростными устройствами для управления питанием с малой задержкой. Другой может использоваться для управления несколькими устройствами, где задержка и пропускная способность не являются важными проблемами; еще один сегмент может использоваться только для чтения микросхем EEPROM, описывающих дополнительные карты (например, СПД стандарт, используемый с дисками DRAM).

Производные технологии

я2C - основа для ACCESS.bus, то VESA Отображение канала данных (DDC) интерфейс Системная шина управления (SMBus), Шина управления питанием (PMBus) и Интеллектуальная шина управления платформой (IPMB, один из протоколов IPMI ). Эти варианты имеют различия в диапазонах напряжения и тактовой частоты и могут иметь линии прерывания.

В системах высокой доступности (AdvancedTCA, MicroTCA) используется двухстороннее резервирование I2C для управления полками. Мультимастер I2Возможности C являются обязательным требованием в этих системах.

TWI (двухпроводной интерфейс) или TWSI (двухпроводной последовательный интерфейс) - это, по сути, одна и та же шина, реализованная на различных процессорах системы на кристалле от Атмель и другие поставщики.[38] Продавцы используют имя TWI, хотя я2C не является зарегистрированным товарным знаком по состоянию на 07.11.2014.[39] Защита товарного знака существует только для соответствующего логотипа (см. Верхний правый угол), а патенты на I2C теперь истекли.

В некоторых случаях использование термина «двухпроводной интерфейс» указывает на неполную реализацию I2Спецификация C. Отсутствие поддержки арбитража или увеличения тактовой частоты - одно из общих ограничений, которое по-прежнему полезно для одного ведущего устройства, взаимодействующего с простыми ведомыми устройствами, которые никогда не растягивают тактовую частоту.

Стандарт интерфейса датчика MIPI I3C (I3C) - это разработка I2C, в разработке в 2017 году.[40]

Смотрите также

использованная литература

  1. ^ 2C Информация о лицензировании " (PDF). nxp.com. В архиве (PDF) с оригинала на 2017-01-10. Получено 2018-04-29.
  2. ^ "Финансовые пресс-релизы-NXP". инвесторы.nxp.com. Получено 2018-04-29.
  3. ^ "8-кбит серийный I2EEPROM шины C (PDF) " (PDF). STMicroelectronics. Октябрь 2017 г. В архиве (PDF) из оригинала на 18.10.2019. Получено 19 ноября 2019.
  4. ^ «Преимущества источников питания, оснащенных коммуникациями I2C Ethernet». Aegis Power Systems, Inc. Aegis Power Systems, Inc. В архиве из оригинала 21.12.2015. Получено 2015-12-21.
  5. ^ я2Спецификация C-bus версии 2.1; Полупроводники Philips; Январь 2000 г .; Архивировано.
  6. ^ я2Спецификация C-bus Rev 3; NXP Semiconductors; 19 июня 2007 г .; Архивировано.
  7. ^ я2Спецификация C-bus Rev 4; NXP Semiconductors; 13 февраля 2012 г .; Архивировано.
  8. ^ я2Спецификация C-bus Rev 5; NXP Semiconductors; 9 октября 2012 г .; Архивировано.
  9. ^ а б c 2Спецификация C-bus " (PDF). Ред. 6. Полупроводники NXP. 4 апреля 2014 г. В архиве (PDF) с оригинала 25 июля 2014 г.
  10. ^ «7-битная, 8-битная и 10-битная адресация ведомого устройства I2C». Общая фаза. В архиве из оригинала на 2013-06-01. Получено 2018-04-29.
  11. ^ Использование протоколов ZONE_READ и ZONE_WRITE (PDF) (Примечание по применению). Версия 1.0.1. Форум по интерфейсу системного управления. 2016-01-07. AN001. В архиве (PDF) из оригинала от 22.09.2017.
  12. ^ «Есть ли какие-нибудь подробные инструкции по распиновке I2C? Не ищу« СТАНДАРТНЫЙ »"". StackExchange.
  13. ^ Примечание по применению NXP AN11075: Передача сигналов шины I2C по кабелям витой пары с помощью PCA9605 (PDF), 2017-08-16, архивировано из оригинал (PDF) на 2017-08-16
  14. ^ Васкес, Джошуа (2017-08-16), Совершая прыжок с доски: введение в I2C по длинным проводам, заархивировано из оригинал на 2017-08-16
  15. ^ Формат стекируемой платы iPack, 2017-08-19, архивировано из оригинал на 2017-08-19
  16. ^ Феррари, Марио; Феррари, Джулио (2018-04-29). Создание роботов с помощью LEGO Mindstorms NXT. С. 63–64. ISBN  9780080554334. Архивировано из оригинал на 2018-04-29.
  17. ^ Гаспери, Майкл; Hurbain, Филипп (2010), "Глава 13: I2C Автобусная связь ", Extreme NXT: расширение LEGO MINDSTORMS NXT на новый уровень, ISBN  9781430224549
  18. ^ Филон. "Штекер NXT" В архиве 2017-08-20 в Wayback Machine
  19. ^ Сиван Толедо. «Интерфейс I2C, часть 1: добавление цифровых портов ввода / вывода» В архиве 2017-08-12 в Wayback Machine.2006
  20. ^ «Надежная отправка I2C по кабелям Cat5» В архиве 2017-08-18 в Wayback Machine
  21. ^ "Разъемы и кабели шины I2C" В архиве 2017-08-18 в Wayback Machine
  22. ^ https://github.com/Testato/SoftwareWire/wiki/Multiple-I2C-buses
  23. ^ https://www.microchip.com/forums/m474935.aspx
  24. ^ 2Таблица распределения адресов C " (PDF) (Руководство по выбору). Полупроводники Philips. 1999-08-24. Архивировано из оригинал (PDF) на 2017-10-16. Получено 2017-10-01.
  25. ^ Справочник данных IC12: Периферийные устройства I2C, код заказа Philips 9397750 00306
  26. ^ «Спецификация шины управления системой (SMBus)» (PDF). Версия 3.0. Форум по интерфейсу системного управления. 2014-12-20. С. 81–82. В архиве (PDF) из оригинала от 29.01.2016. Получено 2017-12-01.
  27. ^ а б «Стандарт VESA Display Data Channel Command Interface (DDC / CI) Standard» (PDF). Версия 1.1. VESA. 2004-10-29. С. 15–16. В архиве (PDF) из оригинала на 09.09.2016. Получено 2017-12-01.
  28. ^ "Спецификация интерфейса интеллектуального управления платформой второго поколения V2.0" (PDF). Версия документа 1.1. Intel, NEC, Hewlett-Packard и Dell. 2013-10-01. п. 563. В архиве (PDF) из оригинала от 27.03.2016. Получено 2017-12-01. 7-битная часть адреса ведомого для BMC - 0010_000b.
  29. ^ Драйвер TWI Master Bit Band; Атмель; Июль 2012 г. В архиве 2017-03-29 в Wayback Machine.
  30. ^ компонент i2c.resource В архиве 2011-07-24 на Wayback Machine для AmigaOS 4.x.
  31. ^ Тео де Раадт (2015-05-29). "/sys/dev/i2c/i2c_scan.c#probe_val". Перекрестная ссылка BSD суперпользователя. OpenBSD. Получено 2019-03-04. статический u_int8_t probe_val [256];
  32. ^ Константин Александрович Муренин (21.05.2010). «5.2. I2Сканирование шины C через i2c_scan.c ". Аппаратные датчики OpenBSD - мониторинг окружающей среды и управление вентиляторами (MMath Тезис). Университет Ватерлоо: UWSpace. HDL:10012/5234. Идентификатор документа: ab71498b6b1a60 ff817 b29d56997a418.
  33. ^ Введение в HID через I2C
  34. ^ LTC4151 от Linear Technology В архиве 2017-08-09 в Wayback Machine имеет два контакта для выбора адреса, каждый из которых может быть привязан к высокому или низкому уровню либо оставлен неподключенным, предлагая 9 различных адресов.
  35. ^ MAX7314 Максима В архиве 2017-07-13 в Wayback Machine имеет один контакт для выбора адреса, который должен быть привязан к высокому или низкому уровню или подключен к SDA или SCL, предлагая 4 разных адреса.
  36. ^ TI's UCD9224 В архиве 2017-11-07 в Wayback Machine использует два канала АЦП с двенадцатью уровнями каждый для выбора любого допустимого 7-битного адреса.
  37. ^ Дельвар, Жан (16 августа 2005 г.). "Re: [PATCH 4/5] добавить i2c_probe_device и i2c_remove_device". Linux-ядро (Список рассылки). <[email protected]>. В архиве из оригинала от 17.08.2016.CS1 maint: лишняя пунктуация (ссылка на сайт)
  38. ^ avr-libc: Пример использования двухпроводного интерфейса (TWI) В архиве 2007-05-27 на Wayback Machine.
  39. ^ «ТЕСС - Ошибка». tmsearch.uspto.gov. Получено 2018-04-29.[постоянная мертвая ссылка ]
  40. ^ Торнтон, Скотт (29 ноября 2017 г.). «Улучшенная межинтегральная схема (I3C)». Советы по микроконтроллеру. В архиве из оригинала от 03.02.2018.

дальнейшее чтение

  • Химпе, Винсент (2011). Освоение я2Автобус C. ISBN  978-0-905705-98-9. (248 стр.)
  • Парет, Доминик (1997). Автобус I2C: от теории к практике. ISBN  978-0-471-96268-7. (314 стр.)

внешние ссылки