Интерфейс последовательной шины I²C, введенной фирмой Philips как простое и дешевое средство сопряжения микросхем бытовой электроники, стал фактическим промышленным стандартом для устройств различного назначения. Он очень удобен для обмена небольшими объемами данных, например, для конфигурации различных устройств. Спецификация шины I²C определяет протокол двусторонней передачи данных по двум сигнальным линиям. Приложения этого протокола могут быть самыми разнообразными, информационная «начинка» зависит от конкретных применений. На основе интерфейса I²C построены шины ACCESS.bus и SMBus, рассмотренные ниже (о работе интерфейса I²C с микросхемами памяти см. п. 7.3.3).
11.1.1. Шина I²C
Шина Inter IC Bus
(шина соединения микросхем), или, кратко, I²C, — синхронная последовательная шина, обеспечивающая двустороннюю передачу данных между подключенными устройствами. Шина ориентирована на 8-битные передачи. Передача данных может быть как одноадресной, к выбранному устройству, так и широковещательной. Уровни сигналов — стандартные, совместимые с широко распространенной логикой ТТЛ, КМОП, N-МОП, как с традиционным питанием +5 В, так и с низковольтным (3,3 В и ниже). Микросхемы с интерфейсом I²C, как правило, имеют аппаратную поддержку протокольных функций. Протокол позволяет взаимодействовать на одной шине устройствам с различным быстродействием интерфейса. Требования к временным параметрам сигналов весьма свободные, так что на компьютерах и микроконтроллерах, не имеющих аппаратной поддержки шины I²C, ее протокол может быть реализован даже чисто программно.Шина I²C используется уже давно, ее официальная версия 1.0
вышла в 1992 г. По сравнению с предшествующими (черновыми) версиями, здесь отсутствует (как запутанная и неиспользуемая) возможность программного задания адреса ведомого устройства. Также отсутствует низкоскоростной режим (Low speed), являющийся частным случаем стандартного режима — Standard Mode (S) — со скоростью 0-100 Кбит/с. В версии 1.0 появились определение быстрого режима — Fast Mode (F) — со скоростью 0-400 Кбит/с и связанные с ним изменения требований к форме сигнала и фильтрации помех. Также здесь веден режим 10-битной адресации устройств. Версия 2.0 вышла в 1998 г., когда интерфейс I²C стал фактически промышленным стандартом, использующимся в большом числе различных ИС. Здесь появился новый высокоскоростной режим — High speed (Hs), — в котором скорость передачи может достигать 3,4 Мбит/с. Прежние режимы F и S логически работают одинаково, и для них используют обобщенное обозначение F/S. В этой версии пересмотрены требования к уровням и форме сигналов с учетом высоких скоростей и возможности подключения низковольтных устройств с питанием 2 В и ниже. В версии 2.1 (2000 г.) уточнены некоторые моменты, касающиеся временных диаграмм в режиме Hs. Приведенная здесь информация основана на спецификации шины I²C версии 2.1, доступной на сайте www.philips.com. Параметры интерфейсных сигналов приводятся в п. 11.1.4, где они сопоставляются с требованиями SMBus и ACCESS.Bus.Интерфейс I²C использует две сигнальные линии: данных SDA
(Serial Data) и синхронизации SCL
(Serial Clock). В обменах участвуют два устройства — ведущее (master) и ведомое (slave). Ведущее и ведомое устройства могут выступать в роли и передатчика, и приемника данных. Протокол допускает наличие на шине нескольких ведущих устройств и имеет простой механизм арбитража (разрешения коллизий).Протокол обмена для обычных устройств F/S
иллюстрирует рис. 11.1. Обе сигнальные линии имеют нагрузочные резисторы, «подтягивающие» их уровень к напряжению питания. На устройстве к каждой линии подключен приемник и передатчик типа «открытый коллектор» («открытый сток»), у ведомого устройства передатчик на линии SCL
не обязателен. Все одноименные передатчики соединяются по схеме «Монтажное И»: уровень в линии будет высоким, если все передатчики пассивны, и низким, если хоть у одного передатчика выходной транзистор открыт. В покое (Idle, исходное состояние шины) все передатчики пассивны. Синхронизацию задает ведущее устройство, но ведомое, если оно не имеет достаточного быстродействия, может замедлять обмен данными.Рис. 11.1
. Протокол передачи данных I²C