Тип | Шина последовательной связи | ||
---|---|---|---|
История производства | |||
Дизайнер | 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, требуя лишь минимальной реконфигурации посредством команд или использования выходных контактов.
I 2 C подходит для периферийных устройств, где простота и низкая стоимость производства важнее скорости. Общие применения шины I 2 C:
Особая сила I 2 C - это способность микроконтроллера управлять сетью микросхем устройств с помощью всего двух универсальных выводов ввода- вывода и программного обеспечения. Многие другие шинные технологии, используемые в аналогичных приложениях, такие как шина последовательного периферийного интерфейса (SPI), требуют большего количества контактов и сигналов для подключения нескольких устройств.
Год | Версия | Примечания | Ссылки |
---|---|---|---|
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 | Исправил два графика. Это действующий стандарт. |
Я 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 пФ, что ограничивает практические расстояния связи до нескольких метров. Относительно высокий импеданс и низкая помехоустойчивость требуют общего потенциала земли, что опять же ограничивает практическое использование связи внутри одной и той же печатной платы или небольшой системы плат.
Режим | Максимальная скорость | Максимальная емкость | Водить машину | Направление |
---|---|---|---|---|
Стандартный режим (Sm) | 100 кбит / с | 400 пФ | Открытый сток * | Двунаправленный |
Быстрый режим (FM) | 400 кбит / с | 400 пФ | Открытый сток* | Двунаправленный |
Быстрый режим плюс (Fm +) | 1 Мбит / с | 550 пФ | Открытый сток* | Двунаправленный |
Скоростной режим (Hs) | 1,7 Мбит / с | 400 пФ | Открытый сток* | Двунаправленный |
Скоростной режим (Hs) | 3,4 Мбит / с | 100 пФ | Открытый сток* | Двунаправленный |
Сверхбыстрый режим (UFm) | 5 Мбит / с | ? | Тяни-Толкай | Однонаправленный |
Вышеупомянутый эталонный дизайн представляет собой шину с линиями синхронизации (SCL) и данных (SDA) с 7-битной адресацией. Шина имеет две роли для узлов: ведущую и ведомую:
Шина является шиной с несколькими мастерами, что означает, что может присутствовать любое количество мастер-узлов. Кроме того, роли ведущего и ведомого могут меняться между сообщениями (после отправки STOP).
Для данного устройства шины может быть четыре возможных режима работы, хотя большинство устройств используют только одну роль и два ее режима:
В дополнение к битам данных 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, которая использует два запроса байта, которые называются Адрес 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 с помощью одного комбинированного сообщения.
На физическом уровне линии 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 всегда контролируется мастером.
После бита подтверждения линия синхронизации становится низкой, и мастер может выполнить одно из трех действий:
Одной из наиболее важных особенностей протокола 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.
Каждый мастер контролирует шину на предмет стартовых и стоповых битов и не запускает сообщение, пока другой мастер держит шину занятой. Однако два мастера могут начать передачу примерно в одно и то же время; в этом случае происходит арбитраж. Режим передачи ведомого устройства также может быть арбитражным, когда ведущее устройство обращается к нескольким ведомым устройствам, но это менее распространено. В отличие от протоколов (таких как Ethernet ), которые используют случайные задержки отката перед повторной попыткой, I 2 C имеет детерминированную политику арбитража. Каждый передатчик проверяет уровень линии данных (SDA) и сравнивает его с ожидаемыми уровнями; если они не совпадают, этот передатчик теряет арбитраж и выходит из этого взаимодействия по протоколу.
Если один передатчик устанавливает SDA в 1 (не передает сигнал), а второй передатчик устанавливает его в 0 (замыкание на землю), результатом будет низкий уровень линии. Затем первый передатчик замечает, что уровень линии отличается от ожидаемого, и приходит к выводу, что другой узел передает. Первый узел, который заметит такую разницу, - это тот, который проигрывает арбитраж: он перестает управлять SDA. Если это мастер, он также прекращает управление SCL и ждет STOP; затем он может попытаться переиздать сообщение целиком. Тем временем другой узел не заметил никакой разницы между ожидаемым и фактическим уровнями SDA и поэтому продолжает передачу. Это может быть сделано без проблем, потому что до сих пор сигнал был именно таким, как ожидалось; ни один другой передатчик не нарушил его сообщение.
Если два мастера отправляют сообщение двум различным ведомым устройствам, тот, который отправляет младший адрес ведомого, всегда «выигрывает» арбитраж на этапе адресации. Поскольку два ведущего устройства могут отправлять сообщения на один и тот же адрес ведомого устройства, а адреса иногда относятся к нескольким ведомым устройствам, арбитраж иногда должен продолжаться на этапах передачи данных.
Арбитраж происходит очень редко, но он необходим для правильной поддержки нескольких мастеров. Как и в случае с растяжением часов, не все устройства поддерживают арбитраж. Те, которые это делают, обычно называют себя поддерживающими связь с несколькими мастерами.
Один случай, с которым следует осторожно обращаться в реализациях I 2 C с несколькими мастерами, - это когда мастера разговаривают друг с другом. Один мастер может проиграть арбитраж входящего сообщения и должен вовремя сменить свою роль с ведущего на ведомое, чтобы подтвердить свой собственный адрес.
В очень редком случае, когда два мастера одновременно отправляют идентичные сообщения, оба будут считать обмен данными успешным, но подчиненное устройство увидит только одно сообщение. По этой причине, когда к ведомому устройству могут получить доступ несколько мастеров, каждая команда, распознаваемая ведомым устройством, либо должна быть идемпотентной, либо должна гарантироваться, что она никогда не будет отправлена двумя мастерами одновременно. (Например, команда, которая выдается только одним мастером, не обязательно должна быть идемпотентной, и не обязательно, чтобы конкретная команда была идемпотентной, когда некоторый механизм взаимного исключения гарантирует, что только один мастер может быть вызван для выполнения этой команды в любой момент времени..)
В то время как I 2 C осуществляет арбитраж только между мастерами, SMBus использует арбитраж в трех дополнительных контекстах, где несколько ведомых устройств отвечают ведущему, и один получает свое сообщение.
PMBus версии 1.3 расширяет протокол ответа на предупреждения SMBus своим протоколом «чтения зоны». Подчиненные устройства могут быть сгруппированы в «зоны», и все подчиненные устройства в зоне могут быть адресованы для ответа, с их ответами, замаскированными (исключая нежелательную информацию), инвертированными (таким образом, требуемая информация отправляется как 0 бит, что выигрывает арбитраж) или переупорядочены ( поэтому наиболее важная информация отправляется первой). Арбитраж гарантирует, что ответ с наивысшим приоритетом будет первым, возвращенным мастеру.
PMBus резервирует адреса I 2 C 0x28 и 0x37 для чтения и записи зоны соответственно.
Есть несколько возможных режимов работы для связи I 2 C. Все они совместимы в том смысле, что всегда можно использовать стандартный режим 100 кбит / с, но объединение устройств с разными возможностями на одной шине может вызвать следующие проблемы:
Некоторые производители предоставляют так называемый нестандартный режим Turbo со скоростью до 1,4 Мбит / с.
Во всех режимах тактовая частота контролируется мастером (ами), и шина, которая длиннее, чем обычно, может работать на более медленной, чем номинальная, скорости из-за пониженной тактовой частоты.
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).
При наличии одного ведущего устройства можно использовать несколько шин 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 | Падающий край (мастер) | Удерживается на низком уровне | Восходящий край (мастер) | Пассивный высокий | Пассивное подтягивание |
Поле: | 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 = запись |
Поле: | 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 = запись |
Две группы адресов зарезервированы для специальных функций:
Индекс зарезервированного адреса | 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
является адресом по умолчанию, который является изначально используется устройствами, способными к динамическому назначению адресов.
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 не различают комбинированную транзакцию и одни и те же сообщения, отправленные как отдельные транзакции, но не все. Протокол идентификатора устройства требует единственной транзакции; ведомым запрещается отвечать, если они наблюдают за символом остановки. Режимы настройки, калибровки или самотестирования, которые вызывают необычную реакцию ведомого устройства, также часто автоматически завершаются в конце транзакции.
Чтобы избежать обнаружения ложного маркера, существует минимальная задержка между задним фронтом SCL и изменением SDA, а также между изменением SDA и нарастающим фронтом SCL. Обратите внимание, что сообщение I 2 C, содержащее n битов данных (включая подтверждения), содержит n + 1 тактовых импульсов.
Ниже приведен пример битового ударяя по 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; } }
GENERIC
GENERIC
сборках i386 / amd64.При разработке или устранении неисправностей систем, использующих 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 году.