Из Википедии, бесплатной энциклопедии
  (Перенаправлено с I2C )
Перейти к навигации Перейти к поиску

I 2 C ( Inter-Integrated Circuit ), произносится как I-squared-C , - это синхронная , с несколькими ведущими, несколькими ведомыми устройствами , с коммутацией пакетов , несимметричная , последовательная шина связи, изобретенная в 1982 году компанией Philips Semiconductor (теперь NXP Semiconductors ). . Он широко используется для подключения низкоскоростных периферийных микросхем к процессорам и микроконтроллерам при передаче данных на короткие расстояния внутри платы. В качестве альтернативы I 2 C пишется I2C (произносится I-two-C) или IIC. (произносится IIC).

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

Несколько конкурентов, такие как Siemens (позже Infineon Technologies , теперь Intel Mobile Communications ), NEC , Texas Instruments , STMicroelectronics (ранее SGS-Thomson), Motorola (позже Freescale , теперь объединенная с NXP), [2] Nordic Semiconductor и Intersil , имеют представила на рынке совместимые продукты I 2 C с середины 1990-х годов.

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

Приложения [ править ]

STMicroelectronics 24C08: Последовательная EEPROM с шиной I 2 C [3]
Плата 16-битного АЦП с интерфейсом I 2 C

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

  • Описание подключаемых устройств с помощью небольших таблиц конфигурации ПЗУ для обеспечения работы plug and play , например, в EEPROM с последовательным обнаружением присутствия (SPD) на двухрядных модулях памяти (DIMM) и расширенных данных идентификации дисплея (EDID) для мониторов через VGA , DVI и разъемы HDMI .
  • Системное управление для компьютерных систем через SMBus ; Контакты SMBus распределяются как в обычных разъемах PCI, так и в разъемах PCI Express .
  • Доступ к часам реального времени и микросхемам NVRAM , сохраняющим пользовательские настройки.
  • Доступ к низкоскоростным ЦАП и АЦП .
  • Изменение настроек контрастности, оттенка и цветового баланса на мониторах (через канал данных дисплея ).
  • Изменение громкости звука в умных динамиках.
  • Управление небольшими (например, обычными телефонами ) OLED- или ЖК- дисплеями.
  • Считывание аппаратных мониторов и диагностических датчиков, например, скорости вентилятора.
  • Включение и выключение питания компонентов системы. [4]

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

Редакции [ править ]

Дизайн [ править ]

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

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

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

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

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

Эталонный дизайн [ править ]

Вышеупомянутый эталонный дизайн представляет собой шину с линиями синхронизации (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 [ править ]

Одним из конкретных примеров является 24C32 типа EEPROM , которая использует два запроса байта, которые называются Адрес High и Low Address. (Соответственно, эти EEPROM не могут использоваться хостами с чистой SMBus, которые поддерживают только однобайтовые команды или адреса.) Эти байты используются для адресации байтов в адресном пространстве EEPROM 32  кбит (или 4  кБ ). Такая же двухбайтовая адресация также используется более крупными EEPROM, такими как 24C512, которые хранят 512 кбит (или 64 кБ). Для записи и чтения данных в эти EEPROM используется простой протокол: записывается адрес, а затем данные передаются до конца сообщения. Часть протокола передачи данных может вызвать проблемы в SMBus, поскольку байтам данных не предшествует счетчик, и за один раз можно передать более 32 байтов. я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 имеют конструкцию с открытым стоком , поэтому требуются подтягивающие резисторы . Логический «0» выводится путем подтягивания линии к земле, а логическая «1» выводится, позволяя линии плавать (выходное высокое сопротивление ), так что подтягивающий резистор подтягивает ее к высокому уровню. Линия никогда не поднимается активно. Такая разводка позволяет нескольким узлам подключаться к шине без коротких замыканий из-за конфликта сигналов. Высокоскоростные системы (и некоторые другие) могут использовать источник тока вместо резистора для подтягивания только SCL или обоих SCL и SDA, чтобы обеспечить более высокую емкость шины и обеспечить более быстрое время нарастания.

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

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

В режиме ожидания на обеих линиях высокий уровень. Чтобы начать транзакцию, SDA опускается на низкий уровень, в то время как SCL остается высоким. Недопустимо [9] : 14 передавать маркер остановки, отпуская 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 своим протоколом «чтения зоны». [11] Подчиненные устройства могут быть сгруппированы в «зоны», и все ведомые устройства в зоне могут быть адресованы для ответа, с их ответами, замаскированными (без нежелательной информации), инвертированными (таким образом, требуемая информация отправляется как 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 Мбит / с.

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

Схема соединений [ править ]

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

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

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

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

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

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

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

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

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

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

Таблица состояний линий [ править ]

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

Структура адресации [ править ]

7-битная адресация [ править ]

10-битная адресация [ править ]

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

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

  • 0000 XXX
  • 1111 ХХХ

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

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

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

Формат транзакции [ править ]

Транзакция 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. Пример написан на псевдо- Си . Он иллюстрирует все функции I 2 C, описанные ранее (растяжение тактовой частоты, арбитраж, бит запуска / остановки, подтверждение / отсутствие). [29]

// Функции поддержки оборудования, которые ДОЛЖНЫ быть настроены:#define I2CSPEED 100недействительным  I2C_delay ( недействительным );BOOL  read_SCL ( недействительными );  // Возвращаем текущий уровень линии SCL, 0 или 1BOOL  read_SDA ( недействительными );  // Возвращаем текущий уровень линии SDA, 0 или 1недействительный  set_SCL ( недействительный );  // Не управлять SCL (установить высокий импеданс вывода)void  clear_SCL ( недействительно );  // Активно управлять низким уровнем сигнала SCLнедействительный  set_SDA ( недействительный );  // Не использовать SDA (установить контакт с высоким импедансом)void  clear_SDA ( недействительно );  // Активный низкий уровень сигнала SDAнедействительным  арбитраж проигрыш ( недействителен );bool  start  =  false ;  // глобальные данныеvoid  i2c_start_cond ( void )  { если  ( началось )  {  // если запущено, выполнить условие перезапуска // устанавливаем SDA равным 1 set_SDA (); I2C_delay (); set_SCL (); while  ( read_SCL ()  ==  0 )  {  // Растяжение часов // Вы должны добавить таймаут в этот цикл } // Время повторной настройки старта, минимум 4.7us I2C_delay (); } if  ( read_SDA ()  ==  0 )  { Arbitration_lost (); } // SCL высокий, установите SDA от 1 до 0. clear_SDA (); I2C_delay (); clear_SCL (); началось  =  истина ;}void  i2c_stop_cond ( void )  { // устанавливаем SDA на 0 clear_SDA (); I2C_delay (); set_SCL (); // Растяжка часов while  ( read_SCL ()  ==  0 )  { // добавляем тайм-аут в этот цикл. } // Время установки стопового бита, минимум 4 мкс I2C_delay (); // SCL высокий, установите SDA от 0 до 1 set_SDA (); I2C_delay (); if  ( read_SDA ()  ==  0 )  { Arbitration_lost (); } началось  =  ложь ;}// Записываем бит в шину I2Cvoid  i2c_write_bit ( логический  бит )  { if  ( bit )  { set_SDA (); }  else  { clear_SDA (); } // задержка распространения изменения SDA I2C_delay (); // Установите высокий уровень вероятности нежелательной почты, чтобы указать, что доступно новое допустимое значение SDA set_SCL (); // Ждем пока значение SDA будет прочитано ведомым, минимум 4 мкс для стандартного режима I2C_delay (); while  ( read_SCL ()  ==  0 )  {  // Растяжение часов // Вы должны добавить таймаут в этот цикл } // SCL высокая, теперь данные верны // Если SDA высокое, проверяем, что никто другой не управляет SDA если  ( бит  &&  ( read_SDA ()  ==  0 ))  { Arbitration_lost (); } // Сбросить SCL на низкий для подготовки к следующему изменению clear_SCL ();}// Читаем бит с шины I2Cbool  i2c_read_bit ( void )  { bool  bit ; // Разрешить ведомому диску данные set_SDA (); // Ждем пока значение SDA будет записано ведомым устройством, минимум 4 мкс для стандартного режима I2C_delay (); // Установите высокий уровень вероятности нежелательной почты, чтобы указать, что доступно новое допустимое значение SDA set_SCL (); while  ( read_SCL ()  ==  0 )  {  // Растяжение часов // Вы должны добавить таймаут в этот цикл } // Ждем пока значение SDA будет записано ведомым устройством, минимум 4 мкс для стандартного режима I2C_delay (); // SCL высокий, считывается бит бит  =  read_SDA (); // Устанавливаем низкий уровень вероятности нежелательной почты при подготовке к следующей операции clear_SCL ();  бит возврата ;}// Записываем байт в шину I2C. Вернуть 0, если ведомый подтвердил.bool  i2c_write_byte ( bool  send_start , bool  send_stop , unsigned  char  byte )  { беззнаковый  бит ; bool  nack ; if  ( send_start )  { i2c_start_cond (); } for  ( бит  =  0 ;  бит  <  8 ;  ++ бит )  { i2c_write_bit (( байт  &  0x80 )  ! =  0 ); байт  << =  1 ; } nack  =  i2c_read_bit (); if  ( send_stop )  { i2c_stop_cond (); } возвратный  нагрудник ;}// Считываем байт из шины I2Cбеззнаковый  символ  i2c_read_byte ( bool  nack ,  bool  send_stop )  { беззнаковый  байт символа  = 0 ;    бит беззнакового символа  ; for  ( бит  =  0 ;  бит  <  8 ;  ++ бит )  { byte  =  ( byte  <<  1 )  |  i2c_read_bit (); } i2c_write_bit ( нэк ); if  ( send_stop )  { i2c_stop_cond (); } вернуть  байт ;}void  I2C_delay ( void )  {  volatile  int  v ; int  i ; for  ( i  =  0 ;  i  <  I2CSPEED  /  2 ;  ++ i )  { v ; }}

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

  • В AmigaOS можно использовать компонент i2c.resource [30] для 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 г . ; 14 лет назад ) центральная подсистема i2c_scan проверяет все возможные сенсорные микросхемы сразу во время загрузки, используя специальную схему взвешивания и функцию локального кэширования для чтения значений регистров из ведомых устройств I 2 C; [31] это дает возможность исследовать датчики на общем назначении вне-полки i386 / amd64 аппаратных средства во время загрузки без какой - либо конфигурации пользователя , ни заметного зондирующего задержки; тогда процедуры сопоставления отдельных драйверов должны полагаться только на строковое "дружественное имя" для сопоставления; [32] в результате большая часть I 2 ( 2006-05-01 ) Драйверы сенсоров C автоматически включаются по умолчанию в применимых архитектурах без вреда для стабильности; отдельные датчики, как I 2 C, так и другие, экспортируются в пользовательскую среду через структуру sysctl hw.sensors . По состоянию на март 2019 года OpenBSD имеет более двух десятков драйверов устройств на I 2 C, которые экспортируют какой-то датчик через структуру hw.sensors , и большинство этих драйверов полностью включены по умолчанию в GENERICядрах i386 / amd64 OpenBSD.
    • В NetBSD существует более двух десятков подчиненных устройств I 2 C, которые имеют датчики аппаратного мониторинга, которые доступны через инфраструктуру sysmon envsys в виде списков свойств . На аппаратном обеспечении общего назначения каждый драйвер должен выполнить свое собственное исследование, поэтому все драйверы для ведомых устройств I 2 C по умолчанию отключены в NetBSD в GENERICсборках i386 / amd64.
  • В Linux I 2 C обрабатывается с помощью драйвера устройства для конкретного устройства, а другой - для адаптера I 2 C (или SMBus ), к которому он подключен. Несколько сотен таких драйверов входят в состав текущих выпусков.
  • В Mac OS X существует около двух десятков расширений ядра I 2 C, которые обмениваются данными с датчиками для считывания напряжения, тока, температуры, движения и другого физического состояния.
  • В Microsoft Windows I 2 C реализован соответствующими драйверами устройств большей части доступного в отрасли оборудования. Для встроенных устройств HID / SoC Windows 8 и более поздние версии имеют встроенный драйвер шины I²C. [33]
  • В 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. Семь битов слишком мало, чтобы предотвратить конфликты адресов между многими тысячами доступных устройств. Что облегчает проблему конфликтов адресов между различными поставщиками, а также позволяет подключаться к нескольким идентичным устройствам, так это то, что производители выделяют контакты, которые можно использовать для установки адреса ведомого устройства на один из нескольких вариантов адреса для каждого устройства. Обычно два или три контакта, и для многих устройств существует три или более вариантов подключения на один адресный контакт. [34] [35] [36]

10-битные адреса I 2 C пока широко не используются, и многие операционные системы хоста не поддерживают их. [37] Также нет сложной схемы SMBus «ARP» для динамического назначения адресов (кроме карт 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 и других поставщиков. [38] Продавцы используют название TWI, хотя I 2 C не является зарегистрированным товарным знаком по состоянию на 07.11.2014. [39] Защита товарных знаков существует только для соответствующего логотипа (см. Верхний правый угол), а патенты на I 2 C уже истекли.

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

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

См. Также [ править ]

  • Список сетевых автобусов
  • Разъем UEXT
  • Системная шина управления
  • ACCESS.bus
  • Канал данных дисплея VESA
  • Шина управления питанием
  • I3C

Ссылки [ править ]

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

Дальнейшее чтение [ править ]

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

Внешние ссылки [ править ]

  • Официальная спецификация I 2 C Rev 6 (бесплатно) , NXP
  • Подробное введение, праймер
  • Технический обзор шины I 2 C и часто задаваемые вопросы
  • Введение в протоколы SPI и I2C
  • Использование шины I 2 C в Linux
  • Страница справочника OpenBSD iic (4)
  • Страница информации о последовательных шинах