I²C

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

Я 2 С ( Inter-Integrated Circuit, глаза squared- С ), альтернативно известный как I2C или IIC, является синхронным, мульти-мастер, мульти-ведомый, с коммутацией пакетов, несимметричный, последовательная связь автобуса изобретен в 1982 году Philips Полупроводники. Он широко используется для подключения низкоскоростных периферийных микросхем к процессорам и микроконтроллерам при передаче данных на короткие расстояния внутри платы.

Несколько конкурентов, такие как Siemens, NEC, Texas Instruments, STMicroelectronics, Motorola, Nordic Semiconductor и Intersil, представили на рынке совместимые продукты I 2 C с середины 1990-х годов.

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

СОДЕРЖАНИЕ

  • 1 Приложения
  • 2 редакции
  • 3 Дизайн
    • 3.1 Эталонный дизайн
    • 3.2 Протоколы сообщений
    • 3.3 Пример обмена сообщениями: 24C32 EEPROM
    • 3.4 Физический уровень
      • 3.4.1 Растяжение часов с использованием SCL
      • 3.4.2 Арбитраж с использованием SDA
      • 3.4.3 Арбитраж в SMBus
      • 3.4.4 Арбитраж в PMBus
    • 3.5 Различия между режимами
    • 3.6 Схема соединений
    • 3.7 Буферизация и мультиплексирование
    • 3.8 Совместное использование SCL между несколькими шинами
    • 3.9 Таблица состояний линии
    • 3.10 Структура адресации
      • 3.10.1 7-битная адресация
      • 3.10.2 10-битная адресация
    • 3.11 Зарезервированные адреса в 7-битном адресном пространстве
    • 3.12 Незарезервированные адреса в 7-битном адресном пространстве
    • 3.13 Формат транзакции
    • 3.14 Временная диаграмма
    • 3.15 Пример передачи битов в главном протоколе I 2 C
  • 4 Поддержка операционной системы
  • 5 Инструменты разработки
    • 5.1 Хост-адаптеры
    • 5.2 Анализаторы протокола
    • 5.3 Логические анализаторы
  • 6 Ограничения
  • 7 Производные технологии
  • 8 См. Также
  • 9 ссылки
  • 10 Дальнейшее чтение
  • 11 Внешние ссылки

Приложения

8-битный I 2 C I / O расширитель Microchip MCP23008 в корпусе DIP-18

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

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

Редакции

История выпусков спецификаций I 2 C
Год Версия Примечания Ссылки
1981 г. Патент Патент США 4689740, поданный 2 ноября 1981 г. US Philips Corporation.
1982 г. Оригинал Система I 2 C со скоростью 100 кбит / с была создана как простая внутренняя шина для построения управляющей электроники с различными микросхемами Philips. N / A
1992 г. 1 Добавлен быстрый режим (Fm) со скоростью 400 кбит / с и 10-битный режим адресации для увеличения пропускной способности до 1008 узлов. Это была первая стандартизированная версия. N / A
1998 г. 2 Добавлен высокоскоростной режим (Hs) 3,4 Мбит / с с требованиями энергосбережения для электрического напряжения и тока. N / A
2000 г. 2.1 Уточненная версия 2, без существенных функциональных изменений.
2007 г. 3 Добавлен 1 Мбит / с Fast-mode plus (Fm +) (с использованием драйверов 20 мА) и механизм идентификатора устройства.
2012 г. 4 Добавлен сверхбыстрый режим со скоростью 5 Мбит / с (UFm) для новых линий USDA (данные) и USCL (часы) с использованием двухтактной логики без подтягивающих резисторов, а также добавлена ​​таблица назначенных идентификаторов производителей. Это только однонаправленная шина.
2012 г. 5 Исправленные ошибки.
2014 г. 6 Исправил два графика. Это действующий стандарт.

Дизайн

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

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

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

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

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

Режимы I 2 C
Режим Максимальная скорость Максимальная емкость Водить машину Направление
Стандартный режим (Sm) 100 кбит / с 400 пФ Открытый сток * Двунаправленный
Быстрый режим (FM) 400 кбит / с 400 пФ Открытый сток* Двунаправленный
Быстрый режим плюс (Fm +) 1 Мбит / с 550 пФ Открытый сток* Двунаправленный
Скоростной режим (Hs) 1,7 Мбит / с 400 пФ Открытый сток* Двунаправленный
Скоростной режим (Hs) 3,4 Мбит / с 100 пФ Открытый сток* Двунаправленный
Сверхбыстрый режим (UFm) 5 Мбит / с ? Тяни-Толкай Однонаправленный
  • Примечание: открытый сток означает и открытый коллектор.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

STMicroelectronics 24C08: последовательная EEPROM с шиной I 2 C

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

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

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

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

Шина I 2 C: R p - подтягивающие резисторы, R s - дополнительные последовательные резисторы.

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

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

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

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

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

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

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

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

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

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

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

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

Растяжка часов с помощью SCL

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

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

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

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

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

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

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

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

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

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

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

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

Арбитраж в SMBus

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

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

Арбитраж в PMBus

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

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

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

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

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

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

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

Схема соединений

Плата 16-битного АЦП с интерфейсом I 2 C

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

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

Несколько стандартных разъемов передают сигналы I 2 C. Например, разъем UEXT передает I 2 C; 10-контактный разъем iPack имеет I 2 C; 6P6C разъем Лего Mindstorms NXT выполняет I 2 C; некоторые люди используют разъемы 8P8C и кабель CAT5, обычно используемые для физического уровня Ethernet, чтобы вместо этого передавать сигналы I 2 C с дифференциальным кодированием или усиленные несимметричные сигналы I 2 C; и каждый HDMI и большинство DVI и VGA разъемы несут DDC2 данные по I 2 C.

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

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

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

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

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

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

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

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

В этих таблицах показаны различные атомарные состояния и битовые операции, которые могут происходить во время сообщения I 2 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 I 2 C адресное поле R / W ' А I 2 C последовательности сообщений... п
Тип Начинать Байт 1 ACK Байт X и т. Д.

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

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

Стоп
Позиция бита в байте X 7 6 5 4 3 2 1 0
7-битный адрес pos 7 6 5 4 3 2 1
Примечание MSB LSB 1 = читать
0 = запись

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

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

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

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

Стоп
Позиция бита в байте X 7 6 5 4 3 2 1 0 7 6 5 4 3 2 1 0
Битовое значение 1 1 1 1 0 Икс Икс Икс Икс Икс Икс Икс Икс Икс Икс Икс
10-битный адрес pos 10 9 8 7 6 5 4 3 2 1
Примечание Указывает 10-битный режим MSB 1 = читать LSB
0 = запись

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

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

  • 0000 XXX
  • 1111 ХХХ
Индекс зарезервированного адреса 8-битный байт Описание
7-битный адрес Значение R / W
MSB (4-битный) LSB (3-битный) 1 бит
1 0000 000 0 Общий вызов
2 0000 000 1 Начальный байт
3 0000 001 Икс Адрес CBUS
4 0000 010 Икс Зарезервировано для другого формата автобуса
5 0000 011 Икс Зарезервировано для использования в будущем
6 0000 1XX Икс Мастер-код режима HS
7 1111 1XX 1 Идентификатор устройства
8 1111 0XX Икс 10-битная адресация ведомого устройства

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

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

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

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

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

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

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

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

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

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

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

Пример битового обмена в главном протоколе I 2 C

Ниже приведен пример битового ударяя по I 2 протокола C как я 2 мастер C. Пример написан на псевдо- C. Он иллюстрирует все функции I 2 C, описанные ранее (растяжение тактовой частоты, арбитраж, бит запуска / остановки, подтверждение / отсутствие).

// Hardware-specific support functions that MUST be customized: #define I2CSPEED 100 void I2C_delay(void); bool read_SCL(void); // Return current level of SCL line, 0 or 1 bool read_SDA(void); // Return current level of SDA line, 0 or 1 void set_SCL(void); // Do not drive SCL (set pin high-impedance) void clear_SCL(void); // Actively drive SCL signal low void set_SDA(void); // Do not drive SDA (set pin high-impedance) void clear_SDA(void); // Actively drive SDA signal low void arbitration_lost(void); bool started = false; // global data void i2c_start_cond(void) { if (started) {  // if started, do a restart condition  // set SDA to 1  set_SDA();  I2C_delay();  set_SCL();  while (read_SCL() == 0) { // Clock stretching  // You should add timeout to this loop  }  // Repeated start setup time, minimum 4.7us  I2C_delay(); }  if (read_SDA() == 0) {  arbitration_lost(); }  // SCL is high, set SDA from 1 to 0. clear_SDA(); I2C_delay(); clear_SCL(); started = true; } void i2c_stop_cond(void) { // set SDA to 0 clear_SDA(); I2C_delay();  set_SCL(); // Clock stretching while (read_SCL() == 0) {  // add timeout to this loop. }  // Stop bit setup time, minimum 4us I2C_delay();  // SCL is high, set SDA from 0 to 1 set_SDA(); I2C_delay();  if (read_SDA() == 0) {  arbitration_lost(); }  started = false; } // Write a bit to I2C bus void i2c_write_bit(bool bit) { if (bit) {  set_SDA(); } else {  clear_SDA(); }  // SDA change propagation delay I2C_delay();  // Set SCL high to indicate a new valid SDA value is available set_SCL();  // Wait for SDA value to be read by slave, minimum of 4us for standard mode I2C_delay();  while (read_SCL() == 0) { // Clock stretching  // You should add timeout to this loop }  // SCL is high, now data is valid // If SDA is high, check that nobody else is driving SDA if (bit amp;amp; (read_SDA() == 0)) {  arbitration_lost(); }  // Clear the SCL to low in preparation for next change clear_SCL(); } // Read a bit from I2C bus bool i2c_read_bit(void) { bool bit;  // Let the slave drive data set_SDA();  // Wait for SDA value to be written by slave, minimum of 4us for standard mode I2C_delay();  // Set SCL high to indicate a new valid SDA value is available set_SCL();  while (read_SCL() == 0) { // Clock stretching  // You should add timeout to this loop }  // Wait for SDA value to be written by slave, minimum of 4us for standard mode I2C_delay();  // SCL is high, read out bit bit = read_SDA();  // Set SCL low in preparation for next operation clear_SCL();  return bit; } // Write a byte to I2C bus. Return 0 if ack by the slave. bool i2c_write_byte(bool send_start,      bool send_stop,      unsigned char byte) { unsigned bit; bool  nack;  if (send_start) {  i2c_start_cond(); }  for (bit = 0; bit lt; 8; ++bit) {  i2c_write_bit((byte amp; 0x80) != 0);  byte lt;lt;= 1; }  nack = i2c_read_bit();  if (send_stop) {  i2c_stop_cond(); }  return nack; } // Read a byte from I2C bus unsigned char i2c_read_byte(bool nack, bool send_stop) { unsigned char byte = 0; unsigned char bit;  for (bit = 0; bit lt; 8; ++bit) {  byte = (byte lt;lt; 1) | i2c_read_bit(); }  i2c_write_bit(nack);  if (send_stop) {  i2c_stop_cond(); }  return byte; } void I2C_delay(void) {  volatile int v; int i;  for (i = 0; i lt; I2CSPEED / 2; ++i) {  v; } }

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

  • В AmigaOS можно использовать компонент i2c.resource для AmigaOS 4.x и MorphOS 3.x или разделяемую библиотеку i2c.library от Wilhelm Noeker для старых систем.
  • Разработчики Arduino могут использовать библиотеку Wire.
  • Maximite изначально поддерживает обмен данными по протоколу I 2 C как часть своего MMBasic.
  • PICAXE использует команды i2c и hi2c.
  • eCos поддерживает I 2 C для нескольких аппаратных архитектур.
  • ChibiOS / RT поддерживает I 2 C для нескольких аппаратных архитектур.
  • FreeBSD, NetBSD и OpenBSD также предоставляют инфраструктуру I 2 C с поддержкой ряда общих главных контроллеров и датчиков.
    • Начиная с OpenBSD 3.9 (выпущенного 1 мая 2006 г. ; 15 лет назад) центральная подсистема i2c_scan проверяет все возможные сенсорные чипы одновременно во время загрузки, используя специальную схему взвешивания и функцию локального кэширования для чтения значений регистров из ведомых устройств I 2 C; это делает возможным, чтобы исследовать датчики на общем назначении вне-полки i386 / amd64 аппаратных средства во время загрузки без какой - либо конфигурации пользователя, ни заметного зондирующего задержки; тогда процедуры сопоставления отдельных драйверов должны полагаться только на строковое «дружественное имя» для сопоставления; в результате большинство драйверов датчиков I 2 C автоматически включаются по умолчанию в применимых архитектурах без вредного воздействия на стабильность; отдельные датчики, как I 2 C, так и другие, экспортируются в пользовательскую среду через структуру sysctl hw.sensors. По состоянию на март 2019 года OpenBSD имеет более двух десятков драйверов устройств на I 2 C, которые экспортируют какой-то датчик через структуру hw.sensors, и большинство этих драйверов полностью включены по умолчанию в ядрах i386 / amd64 OpenBSD. ( 2006-05-01) GENERIC
    • В NetBSD существует более двух десятков подчиненных устройств I 2 C, которые имеют датчики аппаратного мониторинга, которые доступны через инфраструктуру sysmon envsys в виде списков свойств. На аппаратном обеспечении общего назначения каждый драйвер должен провести собственное зондирование, поэтому все драйверы для ведомых устройств I 2 C по умолчанию отключены в NetBSD в GENERICсборках i386 / amd64.
  • В Linux I 2 C обрабатывается с помощью драйвера устройства для конкретного устройства, а другой - для адаптера I 2 C (или SMBus ), к которому он подключен. Сотни таких драйверов являются частью текущих выпусков ядра Linux.
  • В Mac OS X существует около двух десятков расширений ядра I 2 C, которые обмениваются данными с датчиками для считывания напряжения, тока, температуры, движения и другого физического состояния.
  • В Microsoft Windows I 2 C реализован соответствующими драйверами устройств большей части доступного в отрасли оборудования. Для встроенных устройств HID / SoC Windows 8 и более поздние версии имеют встроенный драйвер шины I²C.
  • В Windows CE I 2 C реализован соответствующими драйверами устройств большей части доступного в отрасли оборудования.
  • Unison OS, ОСРВ POSIX для IoT, поддерживает I 2 C для нескольких аппаратных архитектур MCU и MPU.
  • В ОС RISC I 2 C предоставляется с общим интерфейсом I 2 C от контроллера ввода-вывода и поддерживается модульной системой ОС.
  • В операционных системах Sinclair QDOS и Minerva QL I 2 C поддерживается набором расширений, предоставляемых TF Services.

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

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

Хост-адаптеры

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

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

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

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

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

Ограничения

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

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

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

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

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

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

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

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

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

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

TWI (двухпроводной интерфейс) или TWSI (двухпроводной последовательный интерфейс) - это, по сути, одна и та же шина, реализованная на различных процессорах системы на кристалле от Atmel и других поставщиков. Продавцы используют название TWI, хотя I 2 C не является зарегистрированным товарным знаком по состоянию на 07.11.2014. Защита товарного знака существует только для соответствующего логотипа (см. Верхний правый угол), а патенты на I 2 C уже истекли. Согласно Microchip Technology, TWI и I2C имеют несколько отличий. Одна из них заключается в том, что TWI не поддерживает байт START.

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

Стандарт интерфейса датчиков MIPI I3C (I3C) является развитием I 2 C и находится в стадии разработки в 2017 году.

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

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

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

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

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

Последняя правка сделана 2023-04-13 01:23:39
Содержание доступно по лицензии CC BY-SA 3.0 (если не указано иное).
Обратная связь: support@alphapedia.ru
Соглашение
О проекте