I 2 C расшифровывается как Inter-Integrated Circuit и произносится как I-squared-C и также известен как I2C или IIC . Это синхронное , мульти-мастер, мульти-ведомый , с коммутацией пакетов , несимметричный , последовательная связь автобуса изобретен в 1982 году Philips Semiconductors . Он широко используется для подключения низкоскоростных периферийных микросхем к процессорам и микроконтроллерам при передаче данных на короткие расстояния внутри платы.
Тип | Шина последовательной связи | ||
---|---|---|---|
История производства | |||
Дизайнер | Philips Semiconductor , известный сегодня как NXP Semiconductors | ||
Разработано | 1982 | ||
Данные | |||
Сигнал данных | Открытый коллектор или открытый сток | ||
Ширина | 1 бит (SDA) с отдельными часами (SCL) | ||
Битрейт | 0,1, 0,4, 1,0, 3,4 или 5,0 Мбит / с в зависимости от режима | ||
Протокол | Последовательный , полудуплексный |
Некоторые конкуренты, такие как Siemens , NEC , Texas Instruments , STMicroelectronics , Motorola , [1] 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:
- Описание подключаемых устройств с помощью небольших таблиц конфигурации ПЗУ для обеспечения работы plug and play , например, в EEPROM с последовательным обнаружением присутствия (SPD) на двухрядных модулях памяти (DIMM) и расширенных данных идентификации дисплея (EDID) для мониторов через VGA , DVI и разъемы HDMI .
- Системное управление для компьютерных систем через SMBus ; Контакты SMBus размещены как в обычных разъемах PCI, так и в разъемах PCI Express .
- Доступ к часам реального времени и микросхемам NVRAM , сохраняющим пользовательские настройки.
- Доступ к низкоскоростным ЦАП и АЦП .
- Изменение настроек контрастности, оттенка и цветового баланса на мониторах (через канал данных дисплея ).
- Изменение громкости звука в умных динамиках.
- Управление небольшими (например, обычными телефонами ) OLED- или ЖК- дисплеями.
- Считывание аппаратных мониторов и диагностических датчиков, например, скорости вентилятора.
- Включение и выключение питания компонентов системы. [3]
Особая сила I 2 C - это способность микроконтроллера управлять сетью микросхем устройств с помощью всего двух универсальных выводов ввода- вывода и программного обеспечения. Многие другие шинные технологии, используемые в аналогичных приложениях, такие как шина последовательного периферийного интерфейса (SPI), требуют большего количества контактов и сигналов для подключения нескольких устройств.
Редакции
Год | Версия | Заметки | |
---|---|---|---|
1981 г. | Патент | Патент США 4689740, поданный 2 ноября 1981 г. US Philips Corporation. | [4] [5] |
1982 г. | Оригинал | Система I 2 C со скоростью 100 кбит / с была создана как простая внутренняя шина для построения управляющей электроники с различными микросхемами Philips. | н / д |
1992 г. | 1 | Добавлен быстрый режим (Fm) со скоростью 400 кбит / с и 10-битный режим адресации для увеличения пропускной способности до 1008 узлов. Это была первая стандартизированная версия. | н / д |
1998 г. | 2 | Добавлен высокоскоростной режим (Hs) 3,4 Мбит / с с требованиями энергосбережения для электрического напряжения и тока. | н / д |
2000 г. | 2.1 | Уточненная версия 2, без существенных функциональных изменений. | [6] |
2007 г. | 3 | Добавлен 1 Мбит / с Fast-mode plus (Fm +) (с использованием драйверов 20 мА) и механизм идентификатора устройства. | [7] |
2012 г. | 4 | Добавлен сверхбыстрый режим со скоростью 5 Мбит / с (UFm) для новых линий USDA (данные) и USCL (часы) с использованием двухтактной логики без подтягивающих резисторов , а также добавлена таблица назначенных идентификаторов производителей. Это только однонаправленная шина. | [8] |
2012 г. | 5 | Исправленные ошибки. | [9] |
2014 г. | 6 | Исправил два графика. Это действующий стандарт. | [10] |
Дизайн
Я 2 C использует только два двунаправленные с открытым коллектором или открытым стоком линии, последовательная линия данных (SDA) и последовательная линия Clock (SCL), подъехал с резисторами . [10] Типичное используемое напряжение составляет +5 В или +3,3 В, хотя разрешены системы с другими напряжениями.
Эталонный дизайн I 2 C имеет 7-битное адресное пространство с редко используемым 10-битным расширением. [11] Общая скорость шины I 2 C - это стандартный режим 100 кбит / с и быстрый режим 400 кбит / с . Также существует низкоскоростной режим со скоростью 10 кбит / с , но также допустимы произвольно низкие тактовые частоты. Более поздние ревизии I 2 C можно разместить больше узлов и работать на более высоких скоростях (400 кбит / с быстрого режима , 1 Мбит / с Быстрый режим плюс , 3,4 Мбит / с в режиме высокой скорости, и 5 Мбит / с Ultra Fast-режим ). Эти скорости более широко используются во встроенных системах, чем на ПК.
Обратите внимание, что скорости передачи данных указаны для передач между ведущим и ведомым без увеличения тактовой частоты или других аппаратных издержек. Служебные данные протокола включают адрес подчиненного устройства и, возможно, адрес регистра в подчиненном устройстве, а также побайтовые биты ACK / NACK. Таким образом, фактическая скорость передачи пользовательских данных ниже, чем предполагают только эти пиковые скорости передачи данных. Например, если каждое взаимодействие с ведомым устройством неэффективно позволяет передавать только 1 байт данных, скорость передачи данных будет меньше половины максимальной скорости передачи битов.
Количество узлов, которые могут существовать на данной шине I 2 C, ограничено адресным пространством, а также общей емкостью шины 400 пФ , что ограничивает практические расстояния связи до нескольких метров. Относительно высокий импеданс и низкая помехоустойчивость требуют общего потенциала земли, что опять же ограничивает практическое использование связи внутри одной и той же печатной платы или небольшой системы плат.
Режим [10] | Максимальная скорость | Максимальная емкость | Привод | Направление |
---|---|---|---|---|
Стандартный режим (Sm) | 100 кбит / с | 400 пФ | Открытый дренаж * | Двунаправленный |
Быстрый режим (FM) | 400 кбит / с | 400 пФ | Открытый сток* | Двунаправленный |
Быстрый режим Плюс (Fm +) | 1 Мбит / с | 550 пФ | Открытый сток* | Двунаправленный |
Скоростной режим (Hs) | 1,7 Мбит / с | 400 пФ | Открытый сток* | Двунаправленный |
Скоростной режим (Hs) | 3,4 Мбит / с | 100 пФ | Открытый сток* | Двунаправленный |
Ультрабыстрый режим (UFm) | 5 Мбит / с | ? | Тяни-Толкай | Однонаправленный |
- Примечание: Open-Drain также означает открытый коллектор.
Эталонный дизайн
Вышеупомянутый эталонный дизайн представляет собой шину с линиями синхронизации (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 байтов. 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 остается высоким. Недопустимо [10] : 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 своим протоколом «чтения зоны». [13] Подчиненные устройства могут быть сгруппированы в «зоны», и все подчиненные устройства в зоне могут быть адресованы для ответа, с их ответами, замаскированными (без нежелательной информации), инвертированными (таким образом, требуемая информация отправляется как 0 бит, что выигрывает арбитраж), или переупорядочены (так что наиболее важная информация отправляется первой). Арбитраж гарантирует, что ответ с наивысшим приоритетом будет возвращен мастеру первым.
PMBus резервирует адреса I 2 C 0x28 и 0x37 для чтения и записи зоны соответственно.
Различия между режимами
Есть несколько возможных режимов работы для связи I 2 C. Все они совместимы в том смысле, что всегда можно использовать стандартный режим 100 кбит / с , но объединение устройств с разными возможностями на одной шине может вызвать следующие проблемы:
- Быстрый режим очень совместим и просто сужает некоторые временные параметры для достижения скорости 400 кбит / с. Быстрый режим широко поддерживается ведомыми устройствами I 2 C, поэтому ведущее устройство может использовать его, если ему известно, что емкость шины и сила подтягивания позволяют это.
- Быстрый режим плюс обеспечивает скорость до 1 Мбит / с с использованием более мощных (20 мА) драйверов и подтягивающих устройств для достижения более быстрого нарастания и спада. Совместимость со стандартными и быстродействующими устройствами (с возможностью понижения тока 3 мА) может быть достигнута, если есть способ уменьшить силу подтягиваний при разговоре с ними.
- Высокоскоростной режим (3,4 Мбит / с) совместим с обычными устройствами I 2 C на той же шине, но требует, чтобы у ведущего устройства было активное подтягивание на линии синхронизации, которое активируется во время высокоскоростной передачи. Первый бит данных передается с нормальным нарастающим фронтом тактового сигнала с открытым стоком, который может растягиваться. Для оставшихся семи бит данных и ACK ведущее устройство устанавливает высокий уровень синхронизации в соответствующее время, а ведомое устройство может не растягивать его. Всем высокоскоростным передачам предшествует однобайтовый «мастер-код» на быстрой или стандартной скорости. Этот код служит трем целям:
- он сообщает высокоскоростным ведомым устройствам переходить на высокоскоростные временные правила,
- он гарантирует, что устройства с высокой или нормальной скоростью не будут пытаться участвовать в передаче (поскольку адрес не совпадает с их адресом), и
- поскольку он идентифицирует мастер (есть восемь мастер-кодов, и каждый мастер должен использовать другой), он гарантирует, что арбитраж завершится до высокоскоростной части передачи, и поэтому высокоскоростная часть не должна учитывать эта способность.
- Сверхбыстрый режим - это, по сути, подмножество 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) . [14]
Подавляющее большинство приложений используют I 2 C в том виде, в котором он был изначально разработан - периферийные ИС, подключенные напрямую к процессору на той же печатной плате, и, следовательно, на относительно коротких расстояниях менее 1 фута (30 см) без разъема. . Однако при использовании дифференциального драйвера альтернативная версия I 2 C может передавать данные на расстояние до 20 метров (возможно, более 100 метров) по CAT5 или другому кабелю. [15] [16]
Несколько стандартных разъемов передают сигналы I 2 C. Например, разъем UEXT передает I 2 C; 10-контактный разъем iPack имеет I 2 C; [17] 6P6C разъем Лего Mindstorms NXT выполняет I 2 C; [18] [19] [20] [21] некоторые люди используют разъемы 8P8C и кабель CAT5, обычно используемые для физического уровня Ethernet, чтобы вместо этого передавать дифференциально-кодированные сигналы I 2 C [22] или усиленные несимметричные сигналы I 2 C. ; [23] , и каждый HDMI и большинство DVI и VGA разъемы несут DDC2 данные по I 2 C.
Buffering and multiplexing
When there are many I2C devices in a system, there can be a need to include bus buffers or multiplexers to split large bus segments into smaller ones. This can be necessary to keep the capacitance of a bus segment below the allowable value or to allow multiple devices with the same address to be separated by a multiplexer. Many types of multiplexers and buffers exist and all must take into account the fact that I2C lines are specified to be bidirectional. Multiplexers can be implemented with analog switches, which can tie one segment to another. Analog switches maintain the bidirectional nature of the lines but do not isolate the capacitance of one segment from another or provide buffering capability.
Buffers can be used to isolate capacitance on one segment from another and/or allow I2C to be sent over longer cables or traces. Buffers for bi-directional lines such as I2C must use one of several schemes for preventing latch-up. I2C is open-drain, so buffers must drive a low on one side when they see a low on the other. One method for preventing latch-up is for a buffer to have carefully selected input and output levels such that the output level of its driver is higher than its input threshold, preventing it from triggering itself. For example, a buffer may have an input threshold of 0.4 V for detecting a low, but an output low level of 0.5 V. This method requires that all other devices on the bus have thresholds which are compatible and often means that multiple buffers implementing this scheme cannot be put in series with one another.
Alternatively, other types of buffers exist that implement current amplifiers or keep track of the state (i.e. which side drove the bus low) to prevent latch-up. The state method typically means that an unintended pulse is created during a hand-off when one side is driving the bus low, then the other drives it low, then the first side releases (this is common during an I2C acknowledgement).
Sharing SCL between multiple busses
When having a single master, it is possible to have multiple I2C busses share the same SCL line.[24][25] The packets on each bus are either sent one after the other or at the same time. This is possible, because the communication on each bus can be subdivided in alternating short periods with high SCL followed by short periods with low SCL. And the clock can be stretched, if one bus needs more time in one state.
Advantages are using slaves devices with the same address at the same time and saving connections or a faster throughput by using several data lines at the same time.
Line state table
These tables show the various atomic states and bit operations that may occur during an I2C message.
Type | Inactive bus (N) | Start (S) | Idle (i) | Stop (P) | Clock stretching (CS) |
---|---|---|---|---|---|
Note | Free to claim arbitration | Bus claiming (master) | Bus claimed (master) | Bus freeing (master) | Paused by slave |
SDA | Passive pullup | Falling edge (master) | Held low (master) | Rising edge (master) | Don't care |
SCL | Passive pullup | Passive pullup | Passive pullup | Passive pullup | Held low (slave) |
Type | Sending one data bit (1) (0) (SDA is set/sampled after SCL to avoid false state detection) | Receiver reply with ACK bit (Byte received from sender) | Receiver reply with NACK bit (Byte not received from sender) | |||
---|---|---|---|---|---|---|
Bit setup (Bs) | Ready to sample (Bx) | Bit setup (Bs) | ACK (A) | Bit setup (Bs) | NACK (A') | |
Note | Sender set bit (master/slave) | Receiver sample bit (master/slave) | Sender transmitter hi-Z | Sender sees SDA is low | Sender transmitter hi-Z | Sender sees SDA is high |
SDA | Set bit (after SCL falls) | Capture bit (after SCL rises) | Held low by receiver (after SCL falls) | Driven high (or passive high) by receiver (after SCL falls) | ||
SCL | Falling edge (master) | Rising edge (master) | Falling edge (master) | Rising edge (master) | Falling edge (master) | Rising edge (master) |
Type | Setting up for a (Sr) signal after an ACK/NACK | Repeated start (Sr) | |||
---|---|---|---|---|---|
Note | Start here from ACK | Avoiding stop (P) state | Start here from NACK | Same as start (S) signal | |
SDA | Was held low for ACK | Rising edge | Passive high | Passive high | Falling edge (master) |
SCL | Falling edge (master) | Held low | Rising edge (master) | Passive high | Passive pullup |
Addressing structure
7-bit addressing
Field: | S | I2C address field | R/W' | A | I2C message sequences... | P | ||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|
Type | Start | Byte 1 | ACK | Byte X etc... Rest of the read or write message goes here | Stop | |||||||
Bit position in byte X | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | ||||
7-bit address pos | 7 | 6 | 5 | 4 | 3 | 2 | 1 | |||||
Note | MSB | LSB | 1 = Read | |||||||||
0 = Write |
10-bit addressing
Field: | S | 10-bit mode indicator | Upper addr | R/W' | A | Lower address field | I2C message sequences | P | ||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Type | Start | Byte 1 | ACK | Byte 2 | Byte X etc. Rest of the read or write message goes here | Stop | ||||||||||||||
Bit position in byte X | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | ||||
Bit value | 1 | 1 | 1 | 1 | 0 | X | X | X | X | X | X | X | X | X | X | X | ||||
10-bit address pos | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | ||||||||||
Note | Indicates 10-bit mode | MSB | 1 = Read | LSB | ||||||||||||||||
0 = Write |
Reserved addresses in 7-bit address space
Two groups of addresses are reserved for special functions:
- 0000 XXX
- 1111 XXX
Reserved address index | 8-bit byte | Description | ||
---|---|---|---|---|
7-bit address | R/W value | |||
MSB (4-bit) | LSB (3-bit) | 1-bit | ||
1 | 0000 | 000 | 0 | General call |
2 | 0000 | 000 | 1 | Start byte |
3 | 0000 | 001 | X | CBUS address |
4 | 0000 | 010 | X | Reserved for different bus format |
5 | 0000 | 011 | X | Reserved for future purpose |
6 | 0000 | 1XX | X | HS-mode master code |
7 | 1111 | 1XX | 1 | Device ID |
8 | 1111 | 0XX | X | 10-bit slave addressing |
SMBus reserves some additional addresses. In particular, 0001 000
is reserved for the SMBus host, which may be used by master-capable devices, 0001 100
is the "SMBus alert response address" which is polled by the host after an out-of-band interrupt, and 1100 001
is the default address which is initially used by devices capable of dynamic address assignment.
Non-reserved addresses in 7-bit address space
MSB (4-bit) | Typical usage[26][27][28][29][30] |
---|---|
0001 | Digital receivers, SMBus |
0010 | TV video line decoders, IPMB |
0011 | AV codecs |
0100 | Video encoders, GPIO expanders |
0101 | ACCESS bus, PMBus |
0110 | VESA DDC, PMBus |
0111 | Display controller |
1000 | TV signal processing, audio processing, SMBus |
1001 | AV switching, ADCs and DACs, IPMB, SMBus |
1010 | Storage memory, real-time clock |
1011 | AV processors |
1100 | PLLs and tuners, modulators and demodulators, SMBus |
1101 | AV processors and decoders, audio power amplifiers, SMBus |
1110 | AV colour space converters |
Although MSB 1111 is reserved for Device ID and 10-bit slave addressing, it is also used by VESA DDC display dependent devices such as pointing devices.[29]
Transaction format
An I2C transaction consists of one or more messages. Each message begins with a start symbol, and the transaction ends with a stop symbol. Start symbols after the first, which begin a message but not a transaction, are referred to as repeated start symbols.
Each message is a read or a write. A transaction consisting of a single message is called either a read or a write transaction. A transaction consisting of multiple messages is called a combined transaction. The most common form of the latter is a write message providing intra-device address information, followed by a read message.
Many I2C devices do not distinguish between a combined transaction and the same messages sent as separate transactions, but not all. The device ID protocol requires a single transaction; slaves are forbidden from responding if they observe a stop symbol. Configuration, calibration or self-test modes which cause the slave to respond unusually are also often automatically terminated at the end of a transaction.
Timing diagram
- Data transfer is initiated with a start condition (S) signaled by SDA being pulled low while SCL stays high.
- SCL is pulled low, and SDA sets the first data bit level while keeping SCL low (during blue bar time).
- The data are sampled (received) when SCL rises for the first bit (B1). For a bit to be valid, SDA must not change between a rising edge of SCL and the subsequent falling edge (the entire green bar time).
- This process repeats, SDA transitioning while SCL is low, and the data being read while SCL is high (B2, ...Bn).
- The final bit is followed by a clock pulse, during which SDA is pulled low in preparation for the stop bit.
- A stop condition (P) is signaled when SCL rises, followed by SDA rising.
In order to avoid false marker detection, there is a minimum delay between the SCL falling edge and changing SDA, and between changing SDA and the SCL rising edge. Note that an I2C message containing N data bits (including acknowledges) contains N+1 clock pulses.
Example of bit-banging the I2C master protocol
Below is an example of bit-banging the I2C protocol as an I2C master. The example is written in pseudo C. It illustrates all of the I2C features described before (clock stretching, arbitration, start/stop bit, ack/nack).[31]
// Hardware-specific support functions that MUST be customized:#define I2CSPEED 100void I2C_delay(void);bool read_SCL(void); // Return current level of SCL line, 0 or 1bool read_SDA(void); // Return current level of SDA line, 0 or 1void set_SCL(void); // Do not drive SCL (set pin high-impedance)void clear_SCL(void); // Actively drive SCL signal lowvoid set_SDA(void); // Do not drive SDA (set pin high-impedance)void clear_SDA(void); // Actively drive SDA signal lowvoid arbitration_lost(void);bool started = false; // global datavoid 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 busvoid 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 && (read_SDA() == 0)) { arbitration_lost(); } // Clear the SCL to low in preparation for next change clear_SCL();}// Read a bit from I2C busbool 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 < 8; ++bit) { i2c_write_bit((byte & 0x80) != 0); byte <<= 1; } nack = i2c_read_bit(); if (send_stop) { i2c_stop_cond(); } return nack;}// Read a byte from I2C busunsigned char i2c_read_byte(bool nack, bool send_stop) { unsigned char byte = 0; unsigned char bit; for (bit = 0; bit < 8; ++bit) { byte = (byte << 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 < I2CSPEED / 2; ++i) { v; }}
Поддержка операционной системы
- In AmigaOS one can use the i2c.resource component[32] for AmigaOS 4.x and MorphOS 3.x or the shared library i2c.library by Wilhelm Noeker for older systems.
- Arduino developers can use the "Wire" library.
- Maximite supports I2C communications natively as part of its MMBasic.
- PICAXE uses the i2c and hi2c commands.
- eCos supports I2C for several hardware architectures.
- ChibiOS/RT supports I2C for several hardware architectures.
- FreeBSD, NetBSD and OpenBSD also provide an I2C framework, with support for a number of common master controllers and sensors.
- Since OpenBSD 3.9 (released 1 May 2006i2c_scan subsystem probes all possible sensor chips at once during boot, using an ad hoc weighting scheme and a local caching function for reading register values from the I2C slaves;[33] this makes it possible to probe sensors on general-purpose off-the-shelf i386/amd64 hardware during boot without any configuration by the user nor a noticeable probing delay; the matching procedures of the individual drivers then only has to rely on a string-based "friendly-name" for matching;[34] as a result, most I2C sensor drivers are automatically enabled by default in applicable architectures without ill effects on stability; individual sensors, both I2C and otherwise, are exported to the userland through the sysctl hw.sensors framework. As of March 2019[update], OpenBSD has over two dozen device drivers on I2C that export some kind of a sensor through the hw.sensors framework, and the majority of these drivers are fully enabled by default in i386/amd64
GENERIC
kernels of OpenBSD. ), a central - In NetBSD, over two dozen I2C slave devices exist that feature hardware monitoring sensors, which are accessible through the sysmon envsys framework as property lists. On general-purpose hardware, each driver has to do its own probing, hence all drivers for the I2C slaves are disabled by default in NetBSD in
GENERIC
i386/amd64 builds.
- Since OpenBSD 3.9 (released 1 May 2006i2c_scan subsystem probes all possible sensor chips at once during boot, using an ad hoc weighting scheme and a local caching function for reading register values from the I2C slaves;[33] this makes it possible to probe sensors on general-purpose off-the-shelf i386/amd64 hardware during boot without any configuration by the user nor a noticeable probing delay; the matching procedures of the individual drivers then only has to rely on a string-based "friendly-name" for matching;[34] as a result, most I2C sensor drivers are automatically enabled by default in applicable architectures without ill effects on stability; individual sensors, both I2C and otherwise, are exported to the userland through the sysctl hw.sensors framework. As of March 2019[update], OpenBSD has over two dozen device drivers on I2C that export some kind of a sensor through the hw.sensors framework, and the majority of these drivers are fully enabled by default in i386/amd64
- In Linux, I2C is handled with a device driver for the specific device, and another for the I2C (or SMBus) adapter to which it is connected. Several hundred such drivers are part of current releases.
- In Mac OS X, there are about two dozen I2C kernel extensions that communicate with sensors for reading voltage, current, temperature, motion, and other physical status.
- In Microsoft Windows, I2C is implemented by the respective device drivers of much of the industry's available hardware. For HID embedded/SoC devices, Windows 8 and later have an integrated I²C bus driver.[35]
- In Windows CE, I2C is implemented by the respective device drivers of much of the industry's available hardware.
- Unison OS, a POSIX RTOS for IoT, supports I2C for several MCU and MPU hardware architectures.
- In RISC OS, I2C is provided with a generic I2C interface from the IO controller and supported from the OS module system
- In Sinclair QDOS and Minerva QL operating systems I2C is supported by a set of extensions provided by TF Services.
Инструменты разработки
When developing or troubleshooting systems using I2C, visibility at the level of hardware signals can be important.
Host adapters
There are a number of I2C host adapter hardware solutions for making a I2C master or slave connection to host computers, running Linux, Mac or Windows. Most options are USB-to-I2C adapters. Not all of them require proprietary drivers or APIs.
Protocol analyzers
I2C protocol analyzers are tools that sample an I2C bus and decode the electrical signals to provide a higher-level view of the data being transmitted on the bus.
Logic analyzers
When developing and/or troubleshooting the I2C bus, examination of hardware signals can be very important. Logic analyzers are tools that collect, analyze, decode, and store signals, so people can view the high-speed waveforms at their leisure. Logic analyzers display time stamps of each signal level change, which can help find protocol problems. Most logic analyzers have the capability to decode bus signals into high-level protocol data and show ASCII data.
Ограничения
The assignment of slave addresses is one weakness of I2C. Seven bits is too few to prevent address collisions between the many thousands of available devices. What alleviates the issue of address collisions between different vendors and also allows to connect to several identical devices is that manufacturers dedicate pins that can be used to set the slave address to one of a few address options per device. Two or three pins is typical, and with many devices, there are three or more wiring options per address pin.[36][37][38]
10-bit I2C addresses are not yet widely used, and many host operating systems do not support them.[39] Neither is the complex SMBus "ARP" scheme for dynamically assigning addresses (other than for PCI cards with SMBus presence, for which it is required).
Automatic bus configuration is a related issue. A given address may be used by a number of different protocol-incompatible devices in various systems, and hardly any device types can be detected at runtime. For example, 0x51
may be used by a 24LC02 or 24C32 EEPROM, with incompatible addressing; or by a PCF8563 RTC, which cannot reliably be distinguished from either (without changing device state, which might not be allowed). The only reliable configuration mechanisms available to hosts involve out-of-band mechanisms such as tables provided by system firmware, which list the available devices. Again, this issue can partially be addressed by ARP in SMBus systems, especially when vendor and product identifiers are used; but that has not really caught on. The rev. 03 version of the I2C specification adds a device ID mechanism.
I2C supports a limited range of speeds. Hosts supporting the multi-megabit speeds are rare. Support for the Fm+ 1 Mbit/s speed is more widespread, since its electronics are simple variants of what is used at lower speeds. Many devices do not support the 400 kbit/s speed (in part because SMBus does not yet support it). I2C nodes implemented in software (instead of dedicated hardware) may not even support the 100 kbit/s speed; so the whole range defined in the specification is rarely usable. All devices must at least partially support the highest speed used or they may spuriously detect their device address.
Devices are allowed to stretch clock cycles to suit their particular needs, which can starve bandwidth needed by faster devices and increase latencies when talking to other device addresses. Bus capacitance also places a limit on the transfer speed, especially when current sources are not used to decrease signal rise times.
Because I2C is a shared bus, there is the potential for any device to have a fault and hang the entire bus. For example, if any device holds the SDA or SCL line low, it prevents the master from sending START or STOP commands to reset the bus. Thus it is common for designs to include a reset signal that provides an external method of resetting the bus devices. However many devices do not have a dedicated reset pin, forcing the designer to put in circuitry to allow devices to be power-cycled if they need to be reset.
Because of these limits (address management, bus configuration, potential faults, speed), few I2C bus segments have even a dozen devices. It is common for systems to have several such segments. One might be dedicated to use with high-speed devices, for low-latency power management. Another might be used to control a few devices where latency and throughput are not important issues; yet another segment might be used only to read EEPROM chips describing add-on cards (such as the SPD standard used with DRAM sticks).
Производные технологии
I2C is the basis for the ACCESS.bus, the VESA Display Data Channel (DDC) interface, the System Management Bus (SMBus), Power Management Bus (PMBus) and the Intelligent Platform Management Bus (IPMB, one of the protocols of IPMI). These variants have differences in voltage and clock frequency ranges, and may have interrupt lines.
High-availability systems (AdvancedTCA, MicroTCA) use 2-way redundant I2C for shelf management. Multi-master I2C capability is a requirement in these systems.
TWI (Two-Wire Interface) or TWSI (Two-Wire Serial Interface) is essentially the same bus implemented on various system-on-chip processors from Atmel and other vendors.[40] Vendors use the name TWI, even though I2C is not a registered trademark as of 2014-11-07.[41] Trademark protection only exists for the respective logo (see upper right corner), and patents on I2C have now lapsed.
In some cases, use of the term "two-wire interface" indicates incomplete implementation of the I2C specification. Not supporting arbitration or clock stretching is one common limitation, which is still useful for a single master communicating with simple slaves that never stretch the clock.
MIPI I3C sensor interface standard (I3C) is a development of I2C, under development in 2017.[42]
Смотрите также
- List of network buses
- ACCESS.bus
- I3C
- Power Management Bus
- System Management Bus
- UEXT Connector
- VESA Display Data Channel
Рекомендации
- ^ "Financial Press Releases-NXP". investors.nxp.com. Retrieved 2018-04-29.
- ^ "MCP23008". Microchip. May 26, 2021. Archived from the original on May 26, 2021.
- ^ "Benefits of Power Supplies Equipped with I2C Ethernet Communications". Aegis Power Systems. Archived from the original on 2015-12-21. Retrieved 2015-12-21.
- ^ US Patent 4689740, "Two-Wire Bus-System Comprising A Clock Wire And A Data Wire For Interconnecting A Number Of Stations", issued 1987-08-25, assigned to U.S. Philips Corporation
- ^ "Philips sues eight more companies for infringement of I2C bus patent". EE Times. October 17, 2001. Archived from the original on April 2, 2021.
- ^ I2C-bus specification Rev 2.1; Philips Semiconductors; January 2000; Archived.
- ^ I2C-bus specification Rev 3; NXP Semiconductors; June 19, 2007; Archived.
- ^ I2C-bus specification Rev 4; NXP Semiconductors; February 13, 2012; Archived.
- ^ I2C-bus specification Rev 5; NXP Semiconductors; October 9, 2012; Archived.
- ^ a b c d e "I2C-bus specification Rev 6" (PDF). NXP Semiconductors. April 4, 2014. Archived (PDF) from the original on April 26, 2021.
- ^ "7-bit, 8-bit, and 10-bit I2C Slave Addressing". Total Phase. Archived from the original on 2013-06-01. Retrieved 2018-04-29.
- ^ "8-Kbit serial I2C bus EEPROM (PDF)" (PDF). STMicroelectronics. October 2017. Archived (PDF) from the original on 2019-10-18. Retrieved 19 November 2019.
- ^ Using The ZONE_READ And ZONE_WRITE Protocols (PDF) (Application Note). Revision 1.0.1. System Management Interface Forum. 2016-01-07. AN001. Archived (PDF) from the original on 2017-09-22.
- ^ "Is there any definitive I2C pin-out guidance out there? Not looking for a "STANDARD"". StackExchange.
- ^ NXP Application note AN11075: Driving I2C-bus signals over twisted pair cables with PCA9605 (PDF), 2017-08-16, archived from the original (PDF) on 2017-08-16
- ^ Vasquez, Joshua (2017-08-16), Taking the leap off board: An introduction to I2C over long wires, archived from the original on 2017-08-16
- ^ iPack Stackable Board Format, 2017-08-19, archived from the original on 2017-08-19
- ^ Ferrari, Mario; Ferrari, Giulio (2018-04-29). Building Robots with LEGO Mindstorms NXT. pp. 63–64. ISBN 9780080554334. Archived from the original on 2018-04-29.
- ^ Gasperi, Michael; Hurbain, Philippe (2010), "Chapter 13: I2C Bus Communication", Extreme NXT: Extending the LEGO MINDSTORMS NXT to the Next Level, ISBN 9781430224549
- ^ Philo. "NXT connector plug" Archived 2017-08-20 at the Wayback Machine
- ^ Sivan Toledo. "I2C Interfacing Part 1: Adding Digital I/O Ports" Archived 2017-08-12 at the Wayback Machine. 2006
- ^ "Sending I2C reliabily over Cat5 cables" Archived 2017-08-18 at the Wayback Machine
- ^ "I2C Bus Connectors & Cables" Archived 2017-08-18 at the Wayback Machine
- ^ https://github.com/Testato/SoftwareWire/wiki/Multiple-I2C-buses
- ^ https://www.microchip.com/forums/m474935.aspx
- ^ "I2C Address Allocation Table" (PDF) (Selection Guide). Philips Semiconductors. 1999-08-24. Archived from the original (PDF) on 2017-10-16. Retrieved 2017-10-01.
- ^ Data Handbook IC12: I2C Peripherals, Philips ordering code 9397 750 00306
- ^ "System Management Bus (SMBus) Specification" (PDF). Version 3.0. System Management Interface Forum. 2014-12-20. pp. 81–82. Archived (PDF) from the original on 2016-01-29. Retrieved 2017-12-01.
- ^ a b "VESA Display Data Channel Command Interface (DDC/CI) Standard" (PDF). Version 1.1. VESA. 2004-10-29. pp. 15–16. Archived (PDF) from the original on 2016-09-09. Retrieved 2017-12-01.
- ^ "Intelligent Platform Management Interface Specification Second Generation V2.0" (PDF). Document Revision 1.1. Intel, NEC, Hewlett-Packard & Dell. 2013-10-01. p. 563. Archived (PDF) from the original on 2016-03-27. Retrieved 2017-12-01.
The 7-bit portion of the slave address for the BMC is 0010_000b
- ^ TWI Master Bit Band Driver; Atmel; July 2012 Archived 2017-03-29 at the Wayback Machine.
- ^ i2c.resource component Archived 2011-07-24 at the Wayback Machine for AmigaOS 4.x.
- ^ Theo de Raadt (2015-05-29). "/sys/dev/i2c/i2c_scan.c#probe_val". Super User's BSD Cross Reference. OpenBSD. Retrieved 2019-03-04.
static u_int8_t probe_val[256];
- ^ Constantine A. Murenin (2010-05-21). "5.2. I2C bus scan through i2c_scan.c". OpenBSD Hardware Sensors — Environmental Monitoring and Fan Control (MMath thesis). University of Waterloo: UWSpace. hdl:10012/5234. Document ID: ab71498b6b1a60ff817b29d56997a418.
- ^ Introduction to HID over I2C
- ^ Linear Technology's LTC4151 Archived 2017-08-09 at the Wayback Machine has two pins for address selection, each of which can be tied high or low or left unconnected, offering 9 different addresses.
- ^ Maxim's MAX7314 Archived 2017-07-13 at the Wayback Machine has a single pin for address selection to be tied high or low or connected to SDA or SCL, offering 4 different addresses.
- ^ TI's UCD9224 Archived 2017-11-07 at the Wayback Machine uses two ADC channels discriminating twelve levels each to select any valid 7-bit address.
- ^ Delvare, Jean (2005-08-16). "Re: [PATCH 4/5] add i2c_probe_device and i2c_remove_device". linux-kernel (Mailing list). Archived from the original on 2016-08-17.
- ^ avr-libc: Example using the two-wire interface (TWI) Archived 2007-05-27 at the Wayback Machine.
- ^ "TESS -- Error". tmsearch.uspto.gov. Retrieved 2018-04-29.[permanent dead link]
- ^ Thornton, Scott (2017-11-29). "The improved inter-integrated circuit (I3C)". Microcontroller Tips. Archived from the original on 2018-02-03.
дальнейшее чтение
- Himpe, Vincent (2011). Mastering the I2C Bus. ISBN 978-0-905705-98-9. (248 pages)
- Paret, Dominique (1997). The I2C Bus: From Theory to Practice. ISBN 978-0-471-96268-7. (314 pages)
Внешние ссылки
- Official I2C specification Rev 6 (free), NXP
- Detailed Introduction, Primer
- I2C Bus Technical Overview and Frequently Asked Questions
- Introduction to SPI and I2C protocols
- Using the I2C Bus with Linux
- OpenBSD iic(4) manual page
- Serial buses information page