I²C
![]() | |||
Тип | Последовательная коммуникационная шина | ||
---|---|---|---|
История производства | |||
Дизайнер | NXP Semiconductors (затем Philips Semiconductors ) | ||
Разработанный | 1982 год | ||
Данные | |||
Сигнал данных | Открытый коллектор или открытый дренаж | ||
Ширина | 1-битный (SDA) с отдельной тактовой частотой (SCL) | ||
Битрейт | 0,1, 0,4, 1,0, 3,4 или 5,0 Мбит/с в зависимости от режима | ||
Протокол | Последовательный , полудуплексный | ||
Распиновка | |||
ПДД | Контакт данных | ||
СКЛ | Булавка с часами |
я 2 C ( межинтегральная схема ; произносится как « глаз-квадрат » или « глаз-два-види »), также известный как I2C или IIC , представляет собой синхронный многоконтроллерный/многоцелевой контроллер (исторически называемый мастером). /slave ), несимметричная связи , последовательная шина изобретенная в 1982 году компанией Philips Semiconductors . Он широко используется для подключения низкоскоростных периферийных интегральных схем (ИС) к процессорам и микроконтроллерам при внутриплатной связи на коротких расстояниях.
Несколько конкурентов, таких как Siemens , NEC , Texas Instruments , STMicroelectronics , Motorola , [ 1 ] Nordic Semiconductor и Intersil представили совместимые I 2 Продукция C выводится на рынок с середины 1990-х годов.
я 2 Шину C можно найти в широком спектре электронных приложений, где простота и низкая стоимость производства важнее скорости. ПК , которые включают в себя Компоненты и системы 2 C — это последовательного обнаружения присутствия (SPD) EEPROM на двухрядных модулях памяти (DIMM), расширенные идентификационные данные дисплея (EDID) для мониторов через VGA , DVI и HDMI разъемы , доступ к микросхемам NVRAM и т. д. Общие приложения I2C включают чтение аппаратных мониторов. , датчики, часы реального времени , управление исполнительными механизмами, доступ к низкоскоростным ЦАП и АЦП , управление простыми ЖК- или OLED- дисплеями, изменение настроек дисплея компьютера (например, подсветка, контрастность, оттенок, цветовой баланс) через канал данных дисплея и изменение громкости динамика.
Особая сила Я 2 C — это способность микроконтроллера управлять сетью микросхем устройств с помощью всего двух выводов ввода-вывода общего назначения и программного обеспечения. Многие другие технологии шин, используемые в аналогичных приложениях, такие как шина последовательного периферийного интерфейса (SPI), требуют большего количества контактов и сигналов для подключения нескольких устройств.
Шина системного управления (SMBus), определенная Intel и Duracell в 1994 году, является подмножеством I 2 C, определяющий более строгое использование. Одной из целей SMBus является повышение надежности и совместимости. Соответственно, современный я 2 Системы C включают в себя некоторые политики и правила SMBus, иногда поддерживая как I, так и I. 2 C и SMBus, требующие лишь минимальной реконфигурации с помощью команд или использования выходных контактов. Для управления системой ПК используется шина SMBus, контакты которой расположены как в обычных разъемах PCI , так и в разъемах PCI Express .

Дизайн
[ редактировать ]
я 2 C использует только два сигнала : последовательную линию данных (SDA) и последовательную линию синхронизации (SCL). двунаправленными и подтянуты резисторами Оба являются . [ 3 ] Типичное используемое напряжение составляет +5 В или +3,3 В, хотя допускаются системы с другим напряжением.
Я 2 C Эталонный дизайн имеет 7-битное адресное пространство с редко используемым 10-битным расширением. [ 4 ] Общий я 2 Скорость шины C — это 100 кбит/с стандартный режим 400 кбит/с и быстрый режим . Также существует низкоскоростной режим 10 Кбит/с , но допускаются и сколь угодно низкие тактовые частоты. Более поздние редакции I 2 C может размещать больше узлов и работать на более высоких скоростях ( быстрый режим 400 кбит/с , быстрый режим плюс 3,4 Мбит/с 1 Мбит/с, высокоскоростной режим и 5 Мбит/с сверхбыстрый режим ). Эти скорости более широко используются во встроенных системах, чем на ПК.
Обратите внимание, что скорости передачи данных указаны для передачи между контроллером (главным) и целевым устройством (подчиненным) без расширения тактовой частоты или других аппаратных издержек. Заголовки протокола включают целевой адрес и, возможно, адрес регистра внутри целевого устройства, а также побайтовые биты ACK/NACK. Таким образом, фактическая скорость передачи пользовательских данных ниже, чем можно было бы предположить из этих пиковых скоростей передачи данных. Например, если каждое взаимодействие с целью неэффективно позволяет передать только 1 байт данных, скорость передачи данных будет меньше половины пиковой скорости передачи данных.
Количество узлов, которые могут существовать на данном I 2 Шина C ограничена адресным пространством, а также общей емкостью шины 400 пФ , что ограничивает практическое расстояние связи несколькими метрами. Относительно высокий импеданс и низкая помехозащищенность требуют наличия общего потенциала земли, что снова ограничивает практическое использование связью внутри одной печатной платы или небольшой системы плат.
Режим [ 3 ] | Максимум скорость |
Максимум емкость |
Водить машину | Направление |
---|---|---|---|---|
Стандартный режим (См) | 100 кбит/с | 400 пФ | Открытый слив * | Двунаправленный |
Быстрый режим (Fm) | 400 кбит/с | 400 пФ | Открытый слив* | Двунаправленный |
Быстрый режим плюс (Fm+) | 1 Мбит/с | 550 пФ | Открытый слив* | Двунаправленный |
Высокоскоростной режим (Hs) | 1,7 Мбит/с | 400 пФ | Открытый слив* | Двунаправленный |
Высокоскоростной режим (Hs) | 3,4 Мбит/с | 100 пФ | Открытый слив* | Двунаправленный |
Сверхбыстрый режим (УФм) | 5 Мбит/с | ? | Двухтактный | Однонаправленный |
Эталонный дизайн
[ редактировать ]Вышеупомянутый эталонный дизайн представляет собой шину с линиями синхронизации (SCL) и данных (SDA) с 7-битной адресацией. Шина имеет две роли для узлов: контроллер (главный) или целевой (подчиненный):
- Узел контроллера (главный): Узел, который генерирует часы и инициирует связь с целями (подчиненными).
- Целевой (подчиненный) узел: Узел, который получает тактовые сигналы и отвечает на обращение к контроллеру (главному).
Шина является многоконтроллерной, что означает, что может присутствовать любое количество узлов контроллера. Кроме того, роли контроллера и цели могут быть изменены между сообщениями (после отправки STOP).
Для данного устройства шины может существовать четыре потенциальных режима работы, хотя большинство устройств используют только одну роль и два ее режима:
- Передача контроллера (ведущего): узел контроллера отправляет данные цели (подчиненному устройству).
- Прием контроллера (ведущего): узел контроллера получает данные от цели (подчиненного).
- Передача целевого (ведомого): целевой узел отправляет данные контроллеру (главному).
- Целевой (ведомый) прием: целевой узел получает данные от контроллера (ведущего).
Помимо битов данных 0 и 1, I 2 Шина C допускает специальные сигналы START и STOP, которые действуют как разделители сообщений и отличаются от битов данных. (Это отличие от стартовых и стоповых битов , используемых в асинхронной последовательной связи , которые отличаются от битов данных только своей синхронизацией.)
Первоначально контроллер находится в режиме передачи контроллера, отправляя START, за которым следует 7-битный адрес цели, с которой он желает связаться, за которым, наконец, следует один бит, указывающий, желает ли он записывать (0) или читать (1). ) от цели.
Если цель существует на шине, она ответит битом ACK (активный низкий уровень для подтверждения) для этого адреса. Затем контроллер продолжает работать либо в режиме передачи, либо в режиме приема (в зависимости от отправленного им бита чтения/записи), а цель продолжает работать в дополнительном режиме (прием или передача соответственно).
Байты адреса и данных передаются первым старшим битом . Состояние запуска обозначается переходом SDA от высокого к низкому уровню с высоким уровнем SCL; состояние остановки обозначается переходом SDA с низкого уровня на высокий с высоким уровнем SCL. Все остальные переходы SDA происходят при низком уровне SCL.
Если контроллер желает выполнить запись в цель, он повторно отправляет байт, а цель отправляет бит ACK. (В этой ситуации контроллер находится в режиме передачи контроллера, а цель находится в режиме приема цели.)
Если контроллер желает прочитать данные из цели, он повторно получает байт от цели, при этом контроллер отправляет бит ACK после каждого байта, кроме последнего. (В этой ситуации контроллер находится в режиме приема контроллера, а цель находится в режиме передачи цели.)
Я 2 Транзакция C может состоять из нескольких сообщений. Контроллер завершает сообщение с условием STOP, если это конец транзакции, или он может отправить другое условие START, чтобы сохранить контроль над шиной для другого сообщения (транзакция «комбинированного формата»).
Протоколы сообщений
[ редактировать ]я 2 C определяет основные типы транзакций, каждая из которых начинается со СТАРТа и заканчивается СТОПом:
- Одиночное сообщение, в котором контроллер (ведущий) записывает данные в цель (подчиненный).
- Одиночное сообщение, в котором контроллер (главный) считывает данные с целевого (подчиненного) устройства.
- Комбинированный формат, в котором контроллер (главный) выполняет как минимум два чтения или записи на одну или несколько целей (подчиненных).
В комбинированной транзакции каждое чтение или запись начинается со START и целевого адреса. Условия START после первого также называются повторяющимися битами START . Повторяющимся START не предшествуют условия STOP, благодаря чему цели узнают, что следующее сообщение является частью той же транзакции.
Любая конкретная цель будет отвечать только на определенные сообщения, как указано в документации по продукту.
Чистый Я 2 Системы C поддерживают произвольные структуры сообщений. SMBus ограничен девятью из этих структур, такими как слово чтения N и слово записи N , включающие одну цель. PMBus расширяет SMBus групповым протоколом, позволяя отправлять несколько таких транзакций SMBus в одном объединенном сообщении. Завершающий СТОП указывает, когда эти сгруппированные действия должны вступить в силу. Например, одна операция PMBus может изменить конфигурацию трех источников питания (с использованием трех разных I). 2 целевые адреса C), и их новые конфигурации вступят в силу одновременно: когда они получат этот STOP.
За редким исключением, ни я 2 Ни C, ни SMBus не определяют семантику сообщений, например значение байтов данных в сообщениях. В остальном семантика сообщения зависит от продукта. Эти исключения включают сообщения, адресованные I 2 C общий адрес вызова SMBus (0x00) или адрес ответа на оповещение ; и сообщения, участвующие в протоколе разрешения адресов SMBus (ARP) для динамического выделения адресов и управления ими.
На практике большинство целей используют модели управления запрос-ответ, в которых один или несколько байтов, следующих за командой записи, обрабатываются как команда или адрес. Эти байты определяют, как обрабатываются последующие записанные байты или как цель реагирует на последующие чтения. Большинство операций SMBus включают однобайтовые команды.
Пример сообщения: 24C32 EEPROM.
[ редактировать ]
типа 24C32 Одним из конкретных примеров является EEPROM , который использует два байта запроса, которые называются High Address и Low Address. (Соответственно, эти EEPROM не могут использоваться чистыми хостами SMBus, которые поддерживают только однобайтовые команды или адреса.) Эти байты используются для адресации байтов в адресном пространстве EEPROM размером 32 кбит (или 4 кБ ). Та же самая двухбайтовая адресация используется и в более крупных EEPROM, таких как 24C512, который хранит 512 кбит (или 64 КБ). Для записи данных и чтения из этих EEPROM используется простой протокол: записывается адрес, а затем данные передаются до конца сообщения. Часть протокола, связанная с передачей данных, может вызвать проблемы в SMBus, поскольку байтам данных не предшествует счетчик, и за один раз можно передать более 32 байтов. я 2 EEPROM C размером менее 32 кбит, например 2 кбит 24C02, часто используются в SMBus с неэффективной передачей однобайтовых данных для решения этой проблемы.
В EEPROM записывается одно сообщение. После START контроллер отправляет адрес шины чипа с очищенным битом направления ( запись ), затем отправляет двухбайтовый адрес данных в EEPROM, а затем отправляет байты данных для записи, начиная с этого адреса, после чего следует STOP. При записи нескольких байтов все байты должны находиться на одной и той же 32-байтовой странице. Пока он занят сохранением этих байтов в памяти, EEPROM не будет реагировать на дальнейшие команды. 2 C запросы. (Это еще одна несовместимость с SMBus: устройства SMBus всегда должны отвечать на свои адреса шины.)
Для чтения, начиная с определенного адреса в EEPROM, используется комбинированное сообщение. После START контроллер сначала записывает адрес шины этого чипа с очищенным битом направления ( запись ), а затем два байта адреса данных EEPROM. Затем он отправляет (повторяющийся) START и адрес шины EEPROM с установленным битом направления ( чтение ). Затем EEPROM ответит байтами данных, начиная с указанного адреса данных EEPROM — комбинированное сообщение: сначала запись, затем чтение. Контроллер выдает ACK после каждого прочитанного байта, кроме последнего, а затем выдает STOP. EEPROM увеличивает адрес после передачи каждого байта данных; Многобайтовое чтение может получить все содержимое EEPROM, используя одно комбинированное сообщение.
Физический уровень
[ редактировать ]
На физическом уровне линии SCL и SDA имеют конструкцию шины с открытым стоком ( MOSFET ) или открытым коллектором ( BJT ), поэтому подтягивающий резистор для каждой линии необходим . Логический «0» выводится при подтягивании линии к земле, а логическая «1» выводится при разрешении линии плавать (выходной высокий импеданс ), так что нагрузочный резистор подтягивает ее к высокому уровню. Линия никогда не поднимается активно. Такая проводка позволяет нескольким узлам подключаться к шине без коротких замыканий из-за конфликта сигналов. Высокоскоростные системы (и некоторые другие) могут использовать источник тока вместо резистора для подтягивания только SCL или обоих SCL и SDA, чтобы обеспечить более высокую емкость шины и обеспечить более быстрое время нарастания.
Важным следствием этого является то, что несколько узлов могут одновременно управлять линиями. Если какой-либо узел устанавливает низкий уровень линии, он будет низким. Узлы, которые пытаются передать логическое значение (т. е. позволяют линии плавать на высоком уровне), могут обнаружить это и сделать вывод, что в это же время активен другой узел.
При использовании на SCL это называется растяжением тактовой частоты и представляет собой механизм управления потоком для целей. При использовании в SDA это называется арбитражем и гарантирует, что одновременно будет только один передатчик.
В режиме ожидания обе линии имеют высокий уровень. Чтобы начать транзакцию, SDA устанавливается на низкий уровень, а SCL остается на высоком уровне. Это незаконно [ 3 ] : 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 подняться на высокий уровень. Это освобождает Я 2 Автобус С.
- Отправьте «Повторный запуск»: установите SDA на высокий уровень, дайте SCL подняться на высокий уровень, затем снова понизьте уровень SDA. Это начинает новое Я 2 Сообщение шины C без освобождения шины.
Растяжение часов с использованием SCL
[ редактировать ]Одна из наиболее важных особенностей I. 2 Протокол C — это растяжение тактовой частоты. Адресованное целевое устройство может удерживать низкий уровень тактовой линии (SCL) после получения (или отправки) байта, указывая, что оно еще не готово обрабатывать дополнительные данные. Контроллер, который обменивается данными с целью, может не завершить передачу текущего бита, но должен дождаться, пока на линии тактовой частоты фактически не появится высокий уровень. Если целью является увеличение тактовой частоты, линия тактовой частоты все равно будет низкой (поскольку соединения являются открытыми стоками ). То же самое происходит, если второй, более медленный контроллер пытается одновременно управлять часами. (Если существует более одного контролера, все, кроме одного, обычно проигрывают арбитраж.)
Контроллер должен подождать, пока он не заметит, что линия тактовой частоты переходит в высокий уровень, и дополнительное минимальное время (4 мкс для стандартной скорости 100 кбит/с). 2 C) прежде чем снова опустить часы.
Хотя контроллер также может удерживать низкий уровень на линии SCL столько, сколько пожелает (это не разрешено, начиная с версии 6 протокола – подраздел 3.1.1), термин «растяжение тактовой частоты» обычно используется только тогда, когда это делают цели. Хотя теоретически любой тактовый импульс может быть растянут, обычно используются интервалы до или после бита подтверждения. Например, если целью является микроконтроллер , это I 2 Интерфейс C может растягивать часы после каждого байта, пока программное обеспечение не решит, отправлять ли положительное подтверждение или NACK.
Растяжка часов — единственный раз, когда я 2 C, где цель управляет SCL. Многим целям не требуется растяжение тактовой частоты, и поэтому они рассматривают SCL строго как вход без схемы для его управления. Некоторые контроллеры, например те, которые находятся внутри пользовательских ASIC, могут не поддерживать растяжение тактовой частоты; часто эти устройства будут маркироваться как "двухпроводной интерфейс" а не я 2 С.
Чтобы обеспечить минимальную пропускную способность шины , SMBus накладывает ограничения на максимальное увеличение тактовой частоты. Хосты и цели, придерживающиеся этих ограничений, не могут блокировать доступ к шине более чем на короткое время, что не является гарантией чистого I. 2 Системы С.
Арбитраж с использованием SDA
[ редактировать ]Каждый контроллер контролирует шину на наличие стартовых и стоповых битов и не отправляет сообщение, пока другой контроллер держит шину занятой. Однако два контроллера могут начать передачу примерно в одно и то же время; в этом случае происходит арбитраж. Целевой режим передачи также может быть арбитражным, когда контроллер обращается к нескольким целям, но это встречается реже. В отличие от протоколов (таких как Ethernet ), которые используют случайные задержки перед повторной попыткой, я 2 C имеет детерминированную арбитражную политику. Каждый передатчик проверяет уровень линии передачи данных (SDA) и сравнивает его с ожидаемыми уровнями; если они не совпадают, этот передатчик теряет арбитраж и выходит из этого протокольного взаимодействия.
Если один передатчик устанавливает SDA на 1 (не передает сигнал), а второй передатчик устанавливает его на 0 (притягивает к земле), в результате на линии появляется низкий уровень. Затем первый передатчик обнаруживает, что уровень линии отличается от ожидаемого, и приходит к выводу, что передает другой узел. Первым узлом, заметившим такую разницу, становится тот, который проигрывает арбитраж: он перестает управлять SDA. Если это контроллер, он также прекращает управление SCL и ожидает STOP; тогда он может попытаться перевыпустить все свое сообщение. Тем временем другой узел не заметил никакой разницы между ожидаемым и фактическим уровнями SDA и поэтому продолжает передачу. Он может сделать это без проблем, поскольку до сих пор сигнал был именно таким, как он ожидал; ни один другой передатчик не нарушил его сообщение.
Если два контроллера отправляют сообщение двум разным целям, тот, кто отправляет меньший целевой адрес, всегда «выигрывает» арбитраж на этапе адреса. Поскольку два контроллера могут отправлять сообщения на один и тот же целевой адрес, а адреса иногда относятся к нескольким целям, арбитраж иногда должен продолжаться и на этапах данных.
Арбитраж происходит очень редко, но он необходим для правильной поддержки нескольких контроллеров. Как и в случае с растяжением тактовой частоты, не все устройства поддерживают арбитраж. Те, кто это делает, обычно называют себя сторонниками «многоконтроллерной» связи.
Один случай, с которым необходимо осторожно обращаться при использовании нескольких контроллеров. 2 Реализации C — это реализация контроллеров, общающихся друг с другом. Один контроллер может проиграть арбитраж в отношении входящего сообщения и должен вовремя сменить свою роль с контроллера на цель, чтобы подтвердить свой собственный адрес.
В чрезвычайно редком случае, когда два контроллера одновременно отправляют одинаковые сообщения, оба считают связь успешной, но цель увидит только одно сообщение. По этой причине, когда к цели могут получить доступ несколько контроллеров, каждая команда, распознаваемая целью, либо должна быть идемпотентной , либо должна быть гарантирована возможность никогда не выполняться двумя контроллерами одновременно. (Например, команда, выдаваемая только одним контроллером, не обязательно должна быть идемпотентной, как и не обязательно, чтобы конкретная команда была идемпотентной, когда некоторый механизм взаимного исключения гарантирует, что только один контроллер может быть вынужден выдать эту команду в любой момент времени. .)
Арбитраж в SMBus
[ редактировать ]Пока я 2 C осуществляет арбитраж только между контроллерами, SMBus использует арбитраж в трех дополнительных контекстах, когда несколько целей отвечают контроллеру, а одна передает свое сообщение.
- Хотя концептуально это шина с одним контроллером, целевое устройство, поддерживающее «протокол уведомления хоста», действует как контроллер для выполнения уведомления. Он захватывает шину и записывает 3-байтовое сообщение по зарезервированному адресу «SMBus Host» (0x08), передавая свой адрес и два байта данных. Когда две цели попытаются уведомить хост одновременно, одна из них проиграет арбитраж и ей придется повторить попытку.
- Альтернативная система уведомления о цели использует отдельный сигнал SMBALERT# для запроса внимания. В этом случае хост выполняет чтение 1 байта из зарезервированного «Адрес ответа на предупреждение SMBus» (0x0C), который является своего рода широковещательным адресом. Все цели оповещения отвечают байтами данных, содержащими их собственный адрес. Когда цель успешно передает свой собственный адрес (выигрывая арбитраж против других), она перестает вызывать это прерывание. И в этом, и в предыдущем случае арбитраж гарантирует, что сообщение одной цели будет получено, а остальные будут знать, что им необходимо повторить попытку.
- SMBus также поддерживает «протокол разрешения адресов», согласно которому устройства возвращают 16-байтовый «уникальный идентификатор устройства» (UDID). Несколько устройств могут ответить; тот, у кого наименьший UDID, выиграет арбитраж и будет признан.
Арбитраж в PMBus
[ редактировать ]PMBus версии 1.3 расширяет протокол ответа на оповещения SMBus протоколом «чтения зоны». [ 6 ] Цели могут быть сгруппированы в «зоны», и все цели в зоне могут быть адресованы для ответа, при этом их ответы замаскированы (исключая нежелательную информацию), инвертированы (поэтому нужная информация отправляется как 0 бит, что выигрывает в арбитраже) или переупорядочены ( поэтому наиболее важная информация отправляется первой). Арбитраж гарантирует, что ответ с наивысшим приоритетом будет возвращен контроллеру первым.
PMBus резервирует I 2 Адреса C 0x28 и 0x37 для чтения и записи зоны соответственно.
Различия между режимами
[ редактировать ]Существует несколько возможных режимов работы I. 2 С общение. Все они совместимы в том смысле, что всегда можно использовать стандартный режим 100 Кбит/с , но объединение устройств с разными возможностями на одной шине может вызвать следующие проблемы:
- Быстрый режим обладает высокой совместимостью и просто сокращает некоторые временные параметры для достижения скорости 400 кбит/с. Быстрый режим широко поддерживается I 2 Целевые устройства C, поэтому контроллер может использовать его, если знает, что емкость шины и сила подтягивания позволяют это.
- Режим Fast Plus обеспечивает скорость до 1 Мбит/с с использованием более мощных (20 мА) драйверов и подтягивающих устройств для достижения более быстрого времени нарастания и спада. Совместимость со стандартными и быстрыми устройствами (с возможностью понижения тока 3 мА) может быть достигнута, если есть какой-либо способ уменьшить силу подтягиваний при разговоре с ними.
- Высокоскоростной режим (3,4 Мбит/с) совместим с обычным I 2 Устройства C подключены к одной и той же шине, но требуют, чтобы контроллер имел активное подтягивание тактовой линии, которое включается во время высокоскоростной передачи. Первый бит данных передается с обычным нарастающим фронтом тактового импульса с открытым стоком, который может быть растянут. Для оставшихся семи бит данных и ACK контроллер устанавливает высокий тактовый сигнал в соответствующее время, и цель может не растянуть его. Всем высокоскоростным передачам предшествует однобайтовый «код контроллера» на быстрой или стандартной скорости. Этот код служит трем целям:
- он сообщает высокоскоростным целевым устройствам перейти на правила высокоскоростной синхронизации,
- это гарантирует, что устройства с высокой или нормальной скоростью не будут пытаться участвовать в передаче (поскольку он не соответствует их адресу) и
- поскольку он идентифицирует контроллер (существует восемь кодов контроллера, и каждый контроллер должен использовать свой собственный), он гарантирует, что арбитраж будет завершен до высокоскоростной части передачи, и поэтому высокоскоростная часть не должна учитывать эта способность.
- Сверхбыстрый режим , по сути, предназначен только для записи. 2 Подмножество C, которое несовместимо с другими режимами, за исключением того, что его поддержку легко добавить к существующему I. 2 Аппаратное обеспечение интерфейса C. Разрешен только один контроллер, и он всегда активно управляет линиями передачи данных, чтобы достичь скорости передачи 5 Мбит/с. Растягивание тактового сигнала, арбитраж, передача чтения и подтверждения опускаются. В основном он предназначен для анимированных светодиодных дисплеев , где ошибка передачи может вызвать лишь незначительный кратковременный визуальный сбой . Сходство с другими Я 2 Режимы шины C ограничены:
- условия запуска и остановки используются для разграничения передач,
- я 2 Адресация C позволяет нескольким целевым устройствам совместно использовать шину без шины SPI , и сигналов выбора цели в стиле
- Девятый тактовый импульс отправляется на каждый переданный байт, отмечая положение неиспользуемых битов подтверждения.
Некоторые производители предоставляют так называемый нестандартный режим Turbo со скоростью до 1,4 Мбит/с.
Во всех режимах тактовая частота контролируется контроллером(ами), а шина с большей длиной, чем обычно, может работать на скорости ниже номинальной за счет понижения тактовой частоты .
Соединения цепей
[ редактировать ]
я 2 C популярен для взаимодействия периферийных схем с системами прототипирования, такими как Arduino и Raspberry Pi . я 2 C не использует стандартизированный разъем, однако разработчики плат создали различные схемы подключения для I. 2 Взаимосвязи С. Чтобы свести к минимуму возможный ущерб из-за подключения 0,1-дюймовых разъемов наоборот, некоторые разработчики предложили использовать попеременные сигнальные и силовые соединения следующих схем подключения: (GND, SCL, VCC, SDA) или (VCC, SDA, GND, SCL). . [ 7 ]
Подавляющее большинство приложений используют I 2 C в том виде, в каком он был изначально спроектирован — периферийные микросхемы, подключенные напрямую к процессору на одной и той же печатной плате и, следовательно, на относительно коротких расстояниях менее 1 фута (30 см) без разъема. Однако при использовании дифференциального драйвера альтернативная версия I 2 C может обмениваться данными на расстоянии до 20 метров (возможно, более 100 метров) по CAT5 или другому кабелю. [ 8 ] [ 9 ]
Несколько стандартных разъемов предназначены для 2 Сигналы С. Например, разъем UEXT несет I 2 С; 10-контактный разъем iPack поддерживает I 2 С; [ 10 ] Разъем 6P6C Lego Mindstorms NXT несет в себе I 2 С; [ 11 ] [ 12 ] [ 13 ] [ 14 ] некоторые люди используют разъемы 8P8C и кабель CAT5, обычно используемые для физического уровня Ethernet , для передачи дифференциально-кодированного I 2 C-сигналы [ 15 ] или усиленный однотактный I 2 сигналы С; [ 16 ] и каждый разъем HDMI и большинство разъемов DVI и VGA передают данные DDC2 по сети. 2 С.
Буферизация и мультиплексирование
[ редактировать ]Когда меня много 2 C в системе может возникнуть необходимость включения шинных буферов или мультиплексоров для разделения больших сегментов шины на более мелкие. Это может быть необходимо для поддержания емкости сегмента шины ниже допустимого значения или для разделения нескольких устройств с одинаковым адресом с помощью мультиплексора. Существует множество типов мультиплексоров и буферов, и все они должны учитывать тот факт, что я 2 Линии C определены как двунаправленные. Мультиплексоры могут быть реализованы с помощью аналоговых коммутаторов, которые могут связывать один сегмент с другим. Аналоговые переключатели поддерживают двунаправленный характер линий, но не изолируют емкость одного сегмента от другого и не обеспечивают возможности буферизации.
Буферы могут использоваться для изоляции емкости одного сегмента от другого и/или позволяют 2 C для передачи по более длинным кабелям или трассам. Буферы для двунаправленных линий, таких как I 2 C должен использовать одну из нескольких схем предотвращения блокировки. я 2 C имеет открытый сток, поэтому буферы должны устанавливать низкий уровень на одной стороне, когда они видят низкий уровень на другой. Один из методов предотвращения блокировки состоит в том, чтобы буфер имел тщательно выбранные входные и выходные уровни так, чтобы выходной уровень его драйвера был выше его входного порога, что предотвращает его самозапуск. Например, буфер может иметь входной порог 0,4 В для обнаружения низкого уровня, а выходной низкий уровень — 0,5 В. Этот метод требует, чтобы все другие устройства на шине имели совместимые пороговые значения, и часто это означает, что несколько буферов реализуют эту функцию. схемы нельзя соединить последовательно друг с другом.
В качестве альтернативы существуют другие типы буферов, которые реализуют усилители тока или отслеживают состояние (т. е. какая сторона поставила шину на низкий уровень), чтобы предотвратить фиксацию. Метод состояния обычно означает, что непреднамеренный импульс создается во время переключения, когда одна сторона подает шину на низкий уровень, затем другая подает ее на низкий уровень, а затем первая сторона отпускает (это обычное явление во время I 2 подтверждение С).
Совместное использование SCL между несколькими шинами
[ редактировать ]Имея один контроллер, можно иметь несколько I. 2 Автобусы C используют одну и ту же линию SCL. [ 17 ] [ 18 ] Пакеты на каждой шине отправляются либо один за другим, либо одновременно. Это возможно, поскольку связь на каждой шине может быть разделена на чередующиеся короткие периоды с высоким уровнем вероятности нежелательной почты, за которыми следуют короткие периоды с низким уровнем вероятности нежелательной почты. И часы можно растянуть, если одному автобусу потребуется больше времени в одном штате.
Преимущества заключаются в одновременном использовании целевых устройств с одним и тем же адресом и экономии соединений или более высокой пропускной способности за счет одновременного использования нескольких линий передачи данных.
Таблица состояний линий
[ редактировать ]В этих таблицах показаны различные атомарные состояния и битовые операции, которые могут произойти во время I. 2 Сообщение С.
Тип | Неактивный автобус
(Н) |
Начинать
(С) |
Праздный
(я) |
Останавливаться
(П) |
Растяжка часов
(КС) |
---|---|---|---|---|---|
Примечание | Бесплатное обращение в арбитраж | Заявка на шину (контроллер) | Автобус заявлен (контроллер) | Освобождение шины (контроллер) | Приостановлено по цели |
ПДД | Пассивное подтягивание | Задний фронт (контроллер) | Удерживается на низком уровне (контроллер) | Нарастающий фронт (контроллер) | Плевать |
СКЛ | Пассивное подтягивание | Пассивное подтягивание | Пассивное подтягивание | Пассивное подтягивание | Удерживается на низком уровне (цель) |
Тип | Отправка одного бита данных (1) (0)
(SDA устанавливается/выбирается после SCL, чтобы избежать обнаружения ложного состояния) |
Ответ получателя с битом ACK
(байт получен от отправителя) |
Ответ получателя с битом NACK
(Байт не получен от отправителя) | |||
---|---|---|---|---|---|---|
Настройка бита (Bs) | Готов к выборке (Bx) | Настройка бита (Bs) | ПОДТВЕРЖДЕНИЕ (А) | Настройка бита (Bs) | НАК (А') | |
Примечание | Бит установки отправителя (контроллер/цель) | Бит выборки приемника (контроллер/цель) | Отправитель-передатчик hi-Z | Отправитель видит, что SDA низкий | Отправитель-передатчик hi-Z | Отправитель видит, что SDA высокий |
ПДД | Установить бит (после падения SCL) | Бит захвата (после повышения вероятности нежелательной почты) | Удерживается приемником на низком уровне (после падения уровня SCL) | Поддерживается высоким (или пассивным высоким) приемником (после падения уровня SCL) | ||
СКЛ | Задний фронт (контроллер) | Нарастающий фронт (контроллер) | Задний фронт (контроллер) | Нарастающий фронт (контроллер) | Задний фронт (контроллер) | Нарастающий фронт (контроллер) |
Тип | Настройка сигнала (Sr) после ACK/NACK | Повторный старт (Ср) | |||
---|---|---|---|---|---|
Примечание | Начните здесь с ACK | Как избежать состояния остановки (P) | Начните здесь с NACK | То же, что и сигнал запуска (S) | |
ПДД | Был удержан на низком уровне для ACK | Восходящий край | Пассивный высокий | Пассивный высокий | Задний фронт (контроллер) |
СКЛ | Задний фронт (контроллер) | Удерживается низко | Нарастающий фронт (контроллер) | Пассивный высокий | Пассивное подтягивание |
Структура адресации
[ редактировать ]7-битная адресация
[ редактировать ]Поле: | С | я 2 Поле адреса C | Ч/З' | А | я 2 Последовательности сообщений C... | П | ||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|
Тип | Начинать | Байт 1 | ПОДТВЕРЖДЕНИЕ | Байт X и т. д.
Остальное чтение или запись сообщение идет сюда |
Останавливаться | |||||||
Позиция бита в байте X | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | ||||
7-битный адрес поз. | 7 | 6 | 5 | 4 | 3 | 2 | 1 | |||||
Примечание | MSB | младший бит | 1 = Чтение | |||||||||
0 = Запись |
10-битная адресация
[ редактировать ]Поле: | С | 10-битный индикатор режима | Верхний адрес | Ч/З' | А | Нижнее поле адреса | А | я 2 Последовательности сообщений C | П | ||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Тип | Начинать | Байт 1 | ПОДТВЕРЖДЕНИЕ | Байт 2 | ПОДТВЕРЖДЕНИЕ | Байт X и т. д.
Остальное чтение или запись сообщение идет сюда |
Останавливаться | ||||||||||||||
Позиция бита в байте X | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | |||||
Значение бита | 1 | 1 | 1 | 1 | 0 | Х | Х | Х | Х | Х | Х | Х | Х | Х | Х | Х | |||||
10-битный адрес pos | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | |||||||||||
Примечание | Указывает 10-битный режим | MSB | 1 = Чтение | младший бит | |||||||||||||||||
0 = Запись |
Зарезервированные адреса в 7-битном адресном пространстве
[ редактировать ]Две группы по 8 адресов в каждой зарезервированы для специальных функций:
- 0000 ХХХ
- 1111 ХХХ
Сдержанный адрес индекс |
8-битный байт | Описание | ||
---|---|---|---|---|
7-битный адрес | Значение чтения/записи | |||
MSB (4-битный) |
младший бит (3-битный) |
1 бит | ||
1 | 0000 | 000 | 0 | Общий вызов |
2 | 0000 | 000 | 1 | Стартовый байт |
3 | 0000 | 001 | Х | адрес CBUS |
4 | 0000 | 010 | Х | Зарезервировано для другого формата шины |
5 | 0000 | 011 | Х | Зарезервировано для будущих целей |
6 | 0000 | 1ХХ | Х | Код контроллера режима HS |
7 | 1111 | 1ХХ | 1 | Идентификатор устройства |
8 | 1111 | 0ХХ | Х | 10-битная целевая (ведомая) адресация |
Кроме того, остальные 112 адресов предназначены для определенных классов устройств, а некоторые из них дополнительно зарезервированы либо соответствующими стандартами, либо общим использованием.
SMBus резервирует некоторые дополнительные адреса. В частности, 0001 000
зарезервировано для хоста SMBus, который может использоваться устройствами с поддержкой контроллера, 0001 100
- это «адрес ответа на предупреждение SMBus», который опрашивается хостом после внеполосного прерывания, и 1100 001
— это адрес по умолчанию, который изначально используется устройствами, поддерживающими динамическое назначение адреса.
Незарезервированные адреса в 7-битном адресном пространстве
[ редактировать ]Старший бит (4 бита) | Типичное использование [ 19 ] [ 20 ] [ 21 ] [ 22 ] [ 23 ] |
---|---|
0001 | Цифровые ресиверы, SMBus |
0010 | Декодеры ТВ-видео, IPMB |
0011 | AV- кодеки |
0100 | Видеокодеры, GPIO расширители |
0101 | ACCESS.bus , PMBus |
0110 | VESA DDC , PMBus |
0111 | Контроллер дисплея |
1000 | Обработка ТВ-сигнала, обработка звука, SMBus |
1001 | AV-коммутация, АЦП и ЦАП , IPMB , SMBus |
1010 | Память, часы реального времени |
1011 | AV-процессоры |
1100 | ФАПЧ и тюнеры, модуляторы и демодуляторы, SMBus |
1101 | AV-процессоры и декодеры, усилители мощности звука, SMBus |
1110 | AV цветового пространства Преобразователи |
Хотя старший бит 1111 зарезервирован для идентификатора устройства и 10-битной целевой (ведомой) адресации, он также используется устройствами, зависящими от дисплея VESA DDC , такими как указывающие устройства . [ 22 ]
Формат транзакции
[ редактировать ]Я 2 C Транзакция состоит из одного или нескольких сообщений . Каждое сообщение начинается со стартового символа, а транзакция заканчивается стоп-символом. Стартовые символы после первого, которые начинают сообщение, но не транзакцию, называются повторяющимися стартовыми символами.
Каждое сообщение доступно для чтения или записи. Транзакция, состоящая из одного сообщения, называется транзакцией чтения или записи. Транзакция, состоящая из нескольких сообщений, называется комбинированной транзакцией. Наиболее распространенной формой последнего является сообщение записи, предоставляющее информацию об адресе внутри устройства, за которым следует сообщение чтения.
Многие я 2 Устройства C не различают объединенную транзакцию и те же сообщения, отправленные как отдельные транзакции, но не все. Протокол идентификации устройства требует одной транзакции; целям запрещено отвечать, если они видят символ остановки. Режимы конфигурации, калибровки или самотестирования, вызывающие необычную реакцию целевого устройства, также часто автоматически завершаются в конце транзакции.
Временная диаграмма
[ редактировать ]
- Передача данных инициируется с условием запуска (S), сигнализируемым тем, что SDA устанавливается на низкий уровень, в то время как SCL остается на высоком уровне.
- Уровень SCL устанавливается на низкий уровень, а SDA устанавливает уровень первого бита данных, сохраняя при этом низкий уровень SCL (во время синей полосы).
- Данные выбираются (принимаются), когда уровень SCL возрастает для первого бита (B1). Чтобы бит был действительным, SDA не должен меняться между нарастающим фронтом SCL и последующим спадающим фронтом (все время зеленой полосы).
- Этот процесс повторяется: переход SDA осуществляется, пока уровень SCL низкий, а данные считываются, пока уровень SCL высокий (от B2 до Bn).
- За последним битом следует тактовый импульс, во время которого SDA устанавливается на низкий уровень для подготовки к стоп- биту.
- Условие остановки (P) сигнализируется, когда SCL возрастает, за которым следует повышение SDA.
Чтобы избежать ложного обнаружения маркера, существует минимальная задержка между спадающим фронтом SCL и изменением SDA, а также между изменением SDA и нарастающим фронтом SCL. Обратите внимание, что я 2 Сообщение C, содержащее n бит данных (включая подтверждения), содержит n + 1 тактовый импульс.
Проектирование программного обеспечения
[ редактировать ]я 2 C подходит для разработки программного обеспечения «драйвера шины». Программное обеспечение для подключенных устройств написано для вызова «драйвера шины», который обрабатывает фактический низкоуровневый сигнал. 2 Аппаратное обеспечение С. Это позволяет коду драйвера подключенных устройств легко переносить на другое оборудование, включая революционную конструкцию.
Пример бит-бэнга I 2 Протокол C
[ редактировать ]Ниже приведен пример бит-бэнга I 2 Протокол C как I 2 Контроллер C (мастер). Пример написан псевдоC . на Это иллюстрирует все Я 2 Функции C, описанные ранее (растяжение тактовой частоты, арбитраж, стартовый/стоповый бит, подтверждение/нет). [ 24 ]
// Hardware-specific support functions that MUST be customized:
#define I2CSPEED 100
void I2C_delay(void);
bool read_SCL(void); // Return current level of SCL line, 0 or 1
bool read_SDA(void); // Return current level of SDA line, 0 or 1
void set_SCL(void); // Do not drive SCL (set pin high-impedance)
void clear_SCL(void); // Actively drive SCL signal low
void set_SDA(void); // Do not drive SDA (set pin high-impedance)
void clear_SDA(void); // Actively drive SDA signal low
void arbitration_lost(void);
bool started = false; // global data
void i2c_start_cond(void)
{
if (started) {
// if started, do a restart condition
// set SDA to 1
set_SDA();
I2C_delay();
set_SCL();
while (read_SCL() == 0) { // Clock stretching
// You should add timeout to this loop
}
// Repeated start setup time, minimum 4.7us
I2C_delay();
}
if (read_SDA() == 0) {
arbitration_lost();
}
// SCL is high, set SDA from 1 to 0.
clear_SDA();
I2C_delay();
clear_SCL();
started = true;
}
void i2c_stop_cond(void)
{
// set SDA to 0
clear_SDA();
I2C_delay();
set_SCL();
// Clock stretching
while (read_SCL() == 0) {
// add timeout to this loop.
}
// Stop bit setup time, minimum 4us
I2C_delay();
// SCL is high, set SDA from 0 to 1
set_SDA();
I2C_delay();
if (read_SDA() == 0) {
arbitration_lost();
}
started = false;
}
// Write a bit to I2C bus
void i2c_write_bit(bool bit)
{
if (bit) {
set_SDA();
} else {
clear_SDA();
}
// SDA change propagation delay
I2C_delay();
// Set SCL high to indicate a new valid SDA value is available
set_SCL();
// Wait for SDA value to be read by target, 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 bus
bool i2c_read_bit(void)
{
bool bit;
// Let the target drive data
set_SDA();
// Wait for SDA value to be written by target, 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 target, 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 target.
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 bus
unsigned 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;
}
}
Поддержка операционной системы
[ редактировать ]- В AmigaOS можно использовать компонент i2c.resource. [ 25 ] для AmigaOS 4.x и MorphOS 3.x или общую библиотеку i2c.library от Вильгельма Нокера для старых систем.
- Разработчики Arduino могут использовать библиотеку Wire.
- Разработчики CircuitPython и MicroPython могут использовать классы busio.I2C или Machine.I2C соответственно.
- Maximite поддерживает меня 2 Связь C изначально является частью MMBasic.
- PICAXE использует команды i2c и hi2c.
- eCos поддерживает меня 2 C для нескольких аппаратных архитектур.
- ChibiOS/RT поддерживает I 2 C для нескольких аппаратных архитектур.
- FreeBSD , NetBSD и OpenBSD также предоставляют I 2 Фреймворк C с поддержкой ряда распространенных контроллеров и датчиков.
- Начиная с OpenBSD 3.9 (выпущен 1 мая 2006 г ), центральный Подсистема i2c_scan проверяет все возможные чипы датчиков одновременно во время загрузки, используя специальную схему взвешивания и функцию локального кэширования для чтения значений регистров из I. 2 цели C; [ 26 ] это позволяет проверять датчики на оборудовании общего назначения стандартном i386/amd64 во время загрузки без какой-либо настройки пользователем и заметной задержки проверки; процедуры сопоставления отдельных драйверов тогда должны полагаться только на строковое «понятное имя» для сопоставления; [ 27 ] в результате, большинство я 2 Драйверы датчиков C автоматически включаются по умолчанию в применимых архитектурах без негативного влияния на стабильность; отдельные датчики, оба я 2 C и другие экспортируются в пользовательскую среду через инфраструктуру sysctl hw.sensors . По состоянию на март 2019 г. [update], OpenBSD имеет более двух десятков драйверов устройств. 2 C, которые экспортируют какой-то датчик через структуру hw.sensors , и большинство этих драйверов по умолчанию полностью включены в i386/amd64.
GENERIC
ядра OpenBSD. - В NetBSD более двух десятков я 2 Существуют целевые устройства C, оснащенные датчиками аппаратного мониторинга, доступ к которым осуществляется через среду sysmon envsys в виде списков свойств . На оборудовании общего назначения каждый драйвер должен выполнять собственное тестирование, поэтому все драйверы для I 2 Цели C по умолчанию отключены в NetBSD.
GENERIC
Сборка i386/amd64.
- Начиная с OpenBSD 3.9 (выпущен 1 мая 2006 г ), центральный Подсистема i2c_scan проверяет все возможные чипы датчиков одновременно во время загрузки, используя специальную схему взвешивания и функцию локального кэширования для чтения значений регистров из I. 2 цели C; [ 26 ] это позволяет проверять датчики на оборудовании общего назначения стандартном i386/amd64 во время загрузки без какой-либо настройки пользователем и заметной задержки проверки; процедуры сопоставления отдельных драйверов тогда должны полагаться только на строковое «понятное имя» для сопоставления; [ 27 ] в результате, большинство я 2 Драйверы датчиков C автоматически включаются по умолчанию в применимых архитектурах без негативного влияния на стабильность; отдельные датчики, оба я 2 C и другие экспортируются в пользовательскую среду через инфраструктуру sysctl hw.sensors . По состоянию на март 2019 г. [update], OpenBSD имеет более двух десятков драйверов устройств. 2 C, которые экспортируют какой-то датчик через структуру hw.sensors , и большинство этих драйверов по умолчанию полностью включены в i386/amd64.
- В Linux я 2 C обрабатывается драйвером устройства для конкретного устройства, а другой — для I. 2 Адаптер C (или SMBus ), к которому он подключен. Сотни таких драйверов входят в состав текущих выпусков ядра Linux.
- В Mac OS X их около двух десятков. 2 Расширения ядра C, которые взаимодействуют с датчиками для считывания напряжения, тока, температуры, движения и другого физического состояния.
- В Microsoft Windows я 2 C реализуется соответствующими драйверами устройств большей части доступного в отрасли оборудования. Для встроенных устройств HID / SoC Windows 8 и более поздних версий имеют встроенный драйвер шины I²C. [ 28 ]
- В Windows CE я 2 C реализуется соответствующими драйверами устройств большей части доступного в отрасли оборудования.
- Unison OS, POSIX RTOS для IoT, поддерживает I 2 C для нескольких аппаратных архитектур MCU и MPU.
- В ОС RISC я 2 C снабжен общим I 2 Интерфейс C от контроллера ввода-вывода и поддерживается системой модулей ОС.
- В Sinclair QDOS и Minerva QL операционных системах я 2 C поддерживается набором расширений, предоставляемых TF Services.
Инструменты разработки
[ редактировать ]При разработке или устранении неполадок систем с использованием I 2 C, видимость на уровне аппаратных сигналов может быть важна.
Хост-адаптеры
[ редактировать ]Есть несколько я 2 Аппаратные решения хост-адаптера C для создания I 2 Контроллер C или целевое соединение с хост-компьютерами под управлением Linux , Mac или Windows . Большинство опций USB -to-I. 2 Адаптеры С. Не всем из них требуются проприетарные драйверы или API .
Анализаторы протоколов
[ редактировать ]я 2 Анализаторы протоколов C — это инструменты, которые выполняют выборку I 2 C и декодировать электрические сигналы, чтобы обеспечить более высокий уровень просмотра данных, передаваемых по шине.
Логические анализаторы
[ редактировать ]При разработке и/или устранении неполадок I 2 C-шина, проверка аппаратных сигналов может быть очень важной. Логические анализаторы — это инструменты, которые собирают, анализируют, декодируют и сохраняют сигналы, поэтому люди могут просматривать высокоскоростные сигналы в свободное время. Логические анализаторы отображают временные метки каждого изменения уровня сигнала, что может помочь обнаружить проблемы протокола. Большинство логических анализаторов имеют возможность декодировать сигналы шины в данные протокола высокого уровня и отображать данные ASCII.
Ограничения
[ редактировать ]Назначение целевых адресов - слабость I 2 C. Семь бит слишком мало, чтобы предотвратить конфликты адресов между многими тысячами доступных устройств. Что облегчает проблему конфликтов адресов между разными поставщиками, а также позволяет подключаться к нескольким идентичным устройствам, так это то, что производители выделяют контакты, которые можно использовать для установки целевого адреса в один из нескольких вариантов адреса для каждого устройства. Обычно используются два или три контакта, а во многих устройствах на каждый адресный контакт имеется три или более вариантов подключения. [ 29 ] [ 30 ] [ 31 ]
10-битный я 2 Адреса C еще не получили широкого распространения, и многие операционные системы их не поддерживают. [ 32 ] Также не используется сложная схема SMBus «ARP» для динамического назначения адресов (кроме карт PCI с наличием SMBus, для которых она необходима).
Автоматическая конфигурация шины является смежной проблемой. Данный адрес может использоваться рядом различных устройств, несовместимых с протоколом, в различных системах, и вряд ли какие-либо типы устройств могут быть обнаружены во время выполнения. Например, 0x51
может использоваться EEPROM 24LC02 или 24C32 с несовместимой адресацией; PCF8563 или по RTC , который нельзя надежно отличить ни от того, ни от другого (без изменения состояния устройства, что может быть запрещено). Единственные надежные механизмы настройки, доступные хостам, включают внеполосные механизмы, такие как таблицы, предоставляемые системной прошивкой, в которых перечислены доступные устройства. Опять же, эту проблему можно частично решить с помощью ARP в системах SMBus, особенно когда используются идентификаторы поставщиков и продуктов; но это не прижилось. Версия I Rev. 3 2 Спецификация C добавляет механизм идентификации устройства.
я 2 C поддерживает ограниченный диапазон скоростей. Хосты, поддерживающие мультимегабитные скорости, встречаются редко. Поддержка скорости Fm+ 1 Мбит/с более распространена, поскольку ее электроника представляет собой простые варианты того, что используется на более низких скоростях. Многие устройства не поддерживают скорость 400 Кбит/с (отчасти потому, что SMBus ее еще не поддерживает). я 2 Узлы C, реализованные программно (вместо выделенного оборудования), могут даже не поддерживать скорость 100 Кбит/с; поэтому весь диапазон, определенный в спецификации, редко можно использовать. Все устройства должны хотя бы частично поддерживать максимальную используемую скорость, иначе они могут ошибочно определить адрес своего устройства.
Устройствам разрешено растягивать тактовые циклы в соответствии с их конкретными потребностями, что может привести к ограничению полосы пропускания, необходимой для более быстрых устройств, и увеличению задержек при обмене данными с адресами других устройств. Емкость шины также ограничивает скорость передачи данных, особенно когда источники тока не используются для уменьшения времени нарастания сигнала.
Потому что я 2 C — это общая шина, существует вероятность того, что любое устройство выйдет из строя и приведет к зависанию всей шины. Например, если какое-либо устройство удерживает на линии SDA или SCL низкий уровень, это не позволяет контроллеру отправлять команды START или STOP для сброса шины. Таким образом, конструкции обычно включают в себя сигнал сброса, который обеспечивает внешний метод сброса устройств шины. Однако многие устройства не имеют специального контакта сброса, что вынуждает разработчика включать схему, позволяющую включать и выключать устройства, если их необходимо перезагрузить.
Из-за этих ограничений (управление адресами, конфигурация шины, потенциальные сбои, скорость) 2 Сегменты шины C имеют даже десяток устройств. Вместо этого системы обычно имеют несколько меньших сегментов. Один из них может быть предназначен для использования с высокоскоростными устройствами для управления питанием с малой задержкой. Другой можно использовать для управления несколькими устройствами, для которых задержка и пропускная способность не являются важными проблемами; еще один сегмент может использоваться только для чтения микросхем EEPROM, описывающих дополнительные карты (например, стандарт SPD, используемый с планками DRAM).
В системах с очень низким энергопотреблением подтягивающие резисторы могут потреблять больше энергии, чем вся остальная конструкция вместе взятая. В них резисторы часто питаются от переключаемого источника напряжения, например, от DIO микроконтроллера. Подтягивания также ограничивают скорость автобуса и требуют небольших дополнительных затрат. Поэтому некоторые проектировщики обращаются к другим последовательным шинам, не нуждающимся в подтягиваниях, например I3C или SPI .
Производные технологии
[ редактировать ]я 2 C является основой для ACCESS.bus , VESA интерфейса канала данных дисплея (DDC), шины управления системой (SMBus), шины управления питанием (PMBus) и шины управления интеллектуальной платформой (IPMB, один из протоколов IPMI ). . Эти варианты имеют различия в диапазонах напряжения и тактовой частоты, а также могут иметь линии прерываний .
высокой доступности Системы ( AdvancedTCA , MicroTCA ) используют двустороннее резервирование I. 2 C для управления полками. Мультиконтроллер I 2 Возможность использования C является обязательным требованием в этих системах.
TWI (двухпроводной интерфейс) или TWSI (двухпроводной последовательный интерфейс) — это, по сути, одна и та же шина, реализованная на различных внутрикристальных процессорах от Atmel и других производителей. [ 33 ] Продавцы используют название TWI, хотя я 2 C не является зарегистрированным товарным знаком по состоянию на 7 ноября 2014 г. [ 34 ] Защита товарных знаков существует только для соответствующего логотипа (см. верхний правый угол), а патенты на I 2 Срок действия C истек. [ нужна ссылка ] Согласно Microchip Technology , TWI и I2C имеют несколько различий. Одна из них заключается в том, что TWI не поддерживает СТАРТ-байт. [ 35 ]
В некоторых случаях использование термина «двухпроводной интерфейс» указывает на неполную реализацию I. 2 Спецификация С. Отсутствие поддержки арбитража или растяжения тактовой частоты является одним из распространенных ограничений, которое по-прежнему полезно для одного контроллера, взаимодействующего с простыми целями, которые никогда не растягивают тактовую частоту.
Стандарт интерфейса датчика MIPI I3C (I3C) является развитием I 2 C, в разработке в 2017 году. [ 36 ]
Редакции
[ редактировать ]Год | Версия | Примечания | Ссылки |
---|---|---|---|
1981 | Патент | Патент США № 4689740, поданный 2 ноября 1981 г. корпорацией US Philips. | [ 37 ] [ 38 ] |
1982 | Оригинал | 100 кбит/с я 2 Система C была создана как простая внутренняя шинная система для построения управляющей электроники с различными чипами Philips. | — |
1992 | 1 | 400 кбит/с Добавлен быстрый режим (Fm) и режим 10-битной адресации для увеличения емкости до 1008 узлов. Это была первая стандартизированная версия. | — |
1998 | 2 | Добавлен Высокоскоростной режим 3,4 Мбит/с (Hs) с энергосберегающими требованиями по электрическому напряжению и току. | [ 39 ] |
2000 | 2.1 | Уточнена версия 2, без существенных функциональных изменений. | [ 40 ] |
2007 | 3 | Добавлен быстрый режим плюс 1 Мбит/с (Fm+) (с использованием драйверов 20 мА) и механизм идентификации устройства. | [ 41 ] |
2012 | 4 | 5 Мбит/с Добавлен сверхбыстрый режим (UFm) для новых линий USDA (данные) и USCL (тактовая частота), использующих двухтактную логику без подтягивающих резисторов . и добавил присвоенную таблицу идентификаторов производителей. Это всего лишь однонаправленная шина. |
[ 42 ] |
2012 | 5 | Исправлены ошибки. | [ 43 ] |
2014 | 6 | Исправил два графика. | [ 44 ] |
2021 | 7 | Термины « главный/ведомый » изменены на «контроллер/цель» для соответствия спецификации шины I3C . В Таблице 5 обновлены идентификаторы производителей. Добавлен раздел 9, обзор шины I3C. Это текущий стандарт (требуется вход в систему). |
[ 3 ] |
См. также
[ редактировать ]- Список сетевых автобусов
- ACCESS.автобус
- I3C
- Шина управления питанием
- Шина системного управления
- УЭКТ Разъем
- Канал данных дисплея VESA
Ссылки
[ редактировать ]- ^ «Финансовые пресс-релизы-NXP» . инвесторы.nxp.com . Проверено 29 апреля 2018 г.
- ^ «MCP23008» . Микрочип . 26 мая 2021 г. Архивировано из оригинала 26 мая 2021 г.
- ^ Перейти обратно: а б с д и "Я 2 Спецификация C-bus, ред. 7 дюймов (PDF) . NXP Semiconductors . 1 октября 2021 г. Архивировано из оригинала (PDF) 6 октября 2022 г.
- ^ «7-битная, 8-битная и 10-битная адресация подчиненного устройства I2C» . Общая фаза . Архивировано из оригинала 1 июня 2013 г. Проверено 29 апреля 2018 г.
- ^ «8-Кбитный серийный номер I 2 Шина C EEPROM (PDF)» (PDF) . STMicroelectronics . Октябрь 2017 г. Архивировано (PDF) из оригинала 18 октября 2019 г. Проверено 19 ноября 2019 г. .
- ^ Использование протоколов ZONE_READ и ZONE_WRITE (PDF) (примечания по применению). Версия 1.0.1. Форум по интерфейсу управления системой. 07.01.2016. АН001. Архивировано (PDF) из оригинала 22 сентября 2017 г.
- ^ «Есть ли какое-либо четкое руководство по распиновке I2C? Не ищите «СТАНДАРТ» » . СтекExchange.
- ^ Примечание по применению NXP AN11075: Передача сигналов шины I2C по витой паре с помощью PCA9605 (PDF) , 16 августа 2017 г., заархивировано из оригинала (PDF) 16 августа 2017 г.
- ^ Васкес, Джошуа (16 августа 2017 г.), «Прыжок с борта: введение в I2C по длинным проводам» , заархивировано из оригинала 16 августа 2017 г.
- ^ Формат стекируемой платы iPack , 19 августа 2017 г., заархивировано из оригинала 19 августа 2017 г.
- ^ Феррари, Марио; Феррари, Джулио (29 апреля 2018 г.). Создание роботов с помощью LEGO Mindstorms NXT . Сингресс. стр. 63–64. ISBN 9780080554334 . Архивировано из оригинала 29 апреля 2018 г.
- ^ Гаспери, Майкл; Гурбен, Филипп (2010), «Глава 13: Я 2 C Bus Communication» , Extreme NXT: Расширение LEGO MINDSTORMS NXT до следующего уровня , ISBN 9781430224549
- ^ Филон. «Разъем разъема NXT». Архивировано 20 августа 2017 г. на Wayback Machine.
- ^ Сиван Толедо. «Интерфейс I2C, часть 1: Добавление цифровых портов ввода-вывода». Архивировано 12 августа 2017 г. на Wayback Machine . 2006 г.
- ^ «Надежная отправка I2C по кабелям Cat5». Архивировано 18 августа 2017 г. на Wayback Machine.
- ^ «Разъемы и кабели шины I2C». Архивировано 18 августа 2017 г. на Wayback Machine.
- ^ «Несколько шин I2C · Testato/SoftwareWire Wiki» . Гитхаб .
- ^ «Совместное использование шины I2C | Микрочип» .
- ^ "Я 2 Таблица распределения адресов C» (PDF) (Руководство по выбору). Philips Semiconductors . 24 августа 1999 г. Архивировано из оригинала (PDF) 16 октября 2017 г. Проверено 01 октября 2017 г.
- ^ Справочник данных IC12: Периферийные устройства I2C, код заказа Philips 9397 750 00306.
- ^ «Спецификация шины системного управления (SMBus)» (PDF) . Версия 3.0. Форум по интерфейсу управления системой. 20 декабря 2014 г. стр. 81–82. Архивировано (PDF) из оригинала 29 января 2016 г. Проверено 1 декабря 2017 г.
- ^ Перейти обратно: а б «Стандарт командного интерфейса канала данных дисплея VESA (DDC/CI)» (PDF) . Версия 1.1. ВЕСА . 29 октября 2004 г. стр. 15–16. Архивировано (PDF) из оригинала 9 сентября 2016 г. Проверено 1 декабря 2017 г.
- ^ «Спецификация интерфейса управления интеллектуальной платформой, второе поколение V2.0» (PDF) . Версия документа 1.1. Intel, NEC, Hewlett-Packard и Dell. 01.10.2013. п. 563. Архивировано (PDF) из оригинала 27 марта 2016 г. Проверено 1 декабря 2017 г.
7-битная часть подчиненного адреса BMC — 0010_000b.
- ^ Драйвер TWI Master Bit Band; Атмел; Июль 2012 г. Архивировано 29 марта 2017 г. в Wayback Machine .
- ^ Компонент i2c.resource. Архивировано 24 июля 2011 г. на Wayback Machine для AmigaOS 4.x.
- ^ Тео де Раадт (29 мая 2015 г.). "/sys/dev/i2c/i2c_scan.c#probe_val" . Перекрестная ссылка BSD суперпользователя . OpenBSD . Проверено 4 марта 2019 г.
static u_int8_t probe_val[256];
- ^ Константин Александрович Муренин (21 мая 2010 г.). «5.2. Я 2 Сканирование шины C через i2c_scan.c». Аппаратные датчики OpenBSD — мониторинг окружающей среды и управление вентиляторами ( по математике диссертация ). Университет Ватерлоо : UWSpace. hdl : 10012/5234 . Идентификатор документа: ab71498b6b1a60ff817b29d56997a418.
- ^ Введение в HID через I2C
- ^ LTC4151 компании Linear Technology. Архивировано 9 августа 2017 г. на Wayback Machine. Имеет два контакта для выбора адреса, каждый из которых можно подключить к высокому или низкому уровню или оставить неподключенным, предлагая 9 различных адресов.
- ^ MAX7314 Максима, архивировано 13 июля 2017 г. на Wayback Machine, имеет один контакт для выбора адреса, который может быть привязан к высокому или низкому уровню или подключен к SDA или SCL, предлагая 4 разных адреса.
- ^ UCD9224 компании TI, архивировано 7 ноября 2017 г. на Wayback Machine, использует два канала АЦП, различающих двенадцать уровней каждый, для выбора любого допустимого 7-битного адреса.
- ^ Дельвар, Жан (16 августа 2005 г.). «Re: [ИСПРАВЛЕНИЕ 4/5] добавьте i2c_probe_device и i2c_remove_device» . linux-kernel (список рассылки). Архивировано из оригинала 17 августа 2016 г.
- ^ avr-libc: Пример использования двухпроводного интерфейса (TWI). Архивировано 27 мая 2007 г. на Wayback Machine .
- ^ «ТЭСС -- Ошибка» . tmsearch.uspto.gov . Проверено 29 апреля 2018 г. [ постоянная мертвая ссылка ]
- ^ «Что такое TWI? Как настроить TWI для связи I2C» (PDF) . Микрочиповая технология. 2018.
- ^ Торнтон, Скотт (29 ноября 2017 г.). «Улучшенная межинтегральная схема (I3C)» . Советы по микроконтроллеру . Архивировано из оригинала 3 февраля 2018 г.
- ^ Патент США 4689740 «Двухпроводная шинная система, включающая провод синхронизации и провод данных для соединения нескольких станций», выдан 25 августа 1987 г., передан корпорации Philips в США.
- ^ «Philips подает в суд еще на восемь компаний за нарушение патента на шину I2C» . ЭЭ Таймс . 17 октября 2001 г. Архивировано из оригинала 2 апреля 2021 г.
- ^ Я 2 Спецификация C-bus, версия 2.0; Филипс Полупроводники; декабрь 1998 г.; В архиве.
- ^ Я 2 Спецификация C-bus, версия 2.1; Филипс Полупроводники; январь 2000 г.; В архиве.
- ^ Я 2 Спецификация C-bus, версия 3; НХП Полупроводники; 19 июня 2007 г.; В архиве.
- ^ Я 2 Спецификация C-bus, версия 4; НХП Полупроводники; 13 февраля 2012 г.; В архиве.
- ^ Я 2 Спецификация C-bus, версия 5; НХП Полупроводники; 9 октября 2012 г.; В архиве.
- ^ "Я 2 Спецификация C-bus, ред. 6 дюймов (PDF) . NXP Semiconductors . 4 апреля 2014 г. Архивировано из оригинала (PDF) 26 апреля 2021 г.
Дальнейшее чтение
[ редактировать ]- Химпе, Винсент (2011). Овладение своим Я 2 Автобус С. Электор Интернешнл Медиа. ISBN 978-0-905705-98-9 . (248 страниц)
- Парет, Доминик (1997). Шина I2C: от теории к практике . Уайли. ISBN 978-0-471-96268-7 . (314 страниц)
Внешние ссылки
[ редактировать ]