Аппаратные интерфейсы ПК

         

Шина I


Шина Inter 1C Bus (шина соединения микросхем), или, кратко, PC, — синхронная последовательная шина, обеспечивающая двустороннюю передачу данных между подключенными устройствами. Шина ориентирована на 8-битные передачи. Пере­дача данных может быть как одноадресной, к выбранному устройству, так и широко­вещательной. Уровни сигналов — стандартные, совместимые с широко распро­страненной логикой ТТЛ, КМОП, N-МОП, как с традиционным питанием +5 В, так и с низковольтным (3,3 В и ниже). Микросхемы с интерфейсом PC, как пра­вило, имеют аппаратную поддержку протокольных функций. Протокол позволя­ет взаимодействовать на одной шине устройствам с различным быстродействием интерфейса. Требования к временным параметрам сигналов весьма свободные, так что на компьютерах и микроконтроллерах, не имеющих аппаратной поддержки шины PC, ее протокол может быть реализован даже чисто программно.

Шина PC используется уже давно, ее официальная версия 1.0 вышла в 1992 г. По сравнению с предшествующими (черновыми) версиями, здесь отсутствует (как запутанная и неиспользуемая) возможность программного задания адреса ведо­мого устройства. Также отсутствует низкоскоростной режим (Low speed), явля­ющийся частным случаем стандартного режима — Standard Mode (5) — со скоро­стью 0-100 Кбит/с. В версии 1.0 появились определение быстрого режима — Fast Mode (F) — со скоростью 0-400 Кбит/с и связанные с ним изменения требований к форме сигнала и фильтрации помех. Также здесь веден режим 10-битной адре­сации устройств. Версия 2.0 вышла в 1998 г., когда интерфейс PC стал фактиче-

422                        Глава 11. Вспомогательные последовательные интерфейсы и шины

ски промышленным стандартом, использующимся в большом числе различных ИС. Здесь появился новый высокоскоростной режим — High speed (Hs), — в котором скорость передачи может достигать 3,4 Мбит/с. Прежние режимы FH Алогически работают одинаково, и для них используют обобщенное обозначение F/S. В этой версии пересмотрены требования к уровням и форме сигналов с учетом высоких скоростей и возможности подключения низковольтных устройств с питанием 2 В и ниже.
В версии 2.1 (2000 г.) уточнены некоторые моменты, касающиеся времен­ных диаграмм в режиме Hs. Приведенная здесь информация основана на специ­фикации шины PC версии 2.1, доступной на сайте www.philips.com. Параметры интерфейсных сигналов приводятся в п. 11.1.4, где они сопоставляются с требова­ниями SMBus и ACCESS.Bus.

Интерфейс PC использует две сигнальные линии: данных SDA (Serial Data) и син­хронизации SCL (Serial Clock). В обменах участвуют два устройства — ведущее (master) и ведомое (slave). Ведущее и ведомое устройства могут выступать в роли и передатчика, и приемника данных. Протокол допускает наличие на шине не­скольких ведущих устройств и имеет простой механизм арбитража (разрешения коллизий).

Протокол обмена для обычных устройств F/S иллюстрирует рис. 11.1. Обе сиг­нальные линии имеют нагрузочные резисторы, «подтягивающие» их уровень к напряжению питания. На устройстве к каждой линии подключен приемник и пе­редатчик типа «открытый коллектор» («открытый сток»), у ведомого устройства передатчик на линии SCL не обязателен. Все одноименные передатчики соединя­ются по схеме «Монтажное И»: уровень в линии будет высоким, если все передат­чики пассивны, и низким, если хоть у одного передатчика выходной транзистор открыт. В покое (Idle, исходное состояние шины) все передатчики пассивны. Син­хронизацию задает ведущее устройство, но ведомое, если оно не имеет достаточ­ного быстродействия, может замедлять обмен данными.



Рис. 11.1. Протокол передачи данных I2C

Начало любой передачи — условие Start — инициируется ведущим устройством, убедившимся в том, что шина свободна (высокий уровень сигналов SCL и SDA). Условие Start (на диаграммах обозначается как S)— перевод сигнала SDA из вы­сокого в низкий при высоком уровне SCL Завершается операция переводом сиг­нала SDA из низкого уровня в высокий при высоком уровне SCL — условие Stop (обозначается как Р), также вводящееся ведущим устройством. При передаче дан­ных состояние линии SDA может изменяться только при низком уровне SCL, биты данных считаются действительными во время высокого уровня SCL Ведущее устройство может начать очередную передачу вслед за текущей, не вводя условие



11.1. Последовательные шины на базе I2C_______________________________ 423



Stop, — это называется repeated Start (повторный старт, обозначающийся S г). В про­токоле условия S и Sr почти равнозначны. Каждая посылка данных состоит из 8 бит данных, формируемых передатчиком (старший бит — MSB — передается первым), после чего передатчик на один такт освобождает линию данных для получения подтверждения. Приемник во время девятого такта формирует бит подтвержде­ния Ac k, по которому передатчик убеждается, что его «услышали». После переда­чи бита подтверждения ведомое устройство может задержать следующую посыл­ку, удерживая линию SCL на низком уровне. Ведомое устройство в режимах F/S может замедлить передачу по шине и на уровне приема каждого бита, удерживая SCL на низком уровне после его спада, сформированного передатчиком. Поэтому ведущее устройство должно генерировать сигнал SCL не «вслепую», а анализируя состояние линии SCL: сняв этот сигнал, новый импульс (открытие ключа передат­чика) оно имеет право вводить, лишь убедившись, что сигнал SCL вернулся в пас­сивное состояние (высокий уровень). В противном случае синхронизация будет потеряна. Сигнал SCL может быть растянут и другим устройством, пытающимся захватить шину в это же время. Тактовый сигнал SCL не обязательно будет равномер­ным: время его нахождения на низком уровне будет определяться максимальным временем, в котором его захочет удержать самое медленное из устройств, участву­ющих в данном обмене (даже и конфликтующих); время нахождение на высоком уровне будет определяться самым быстрым из конфликтующих ведущих устройств.

Коллизия (конфликт) на шине может возникнуть, когда два (или более) устрой­ства, убедившись в покое шины, одновременно (или почти одновременно) иници­ируют обмен данными. Все они управляют линиями SCL и SDA и наблюдают за ними. Если устройство, передающее единицу (высокий уровень), в данном такте на линии SDA видит ноль (низкий уровень), оно должно признать свой проигрыш в конфликте и освободить линии SCL и SDA (при этом ему позволительно управ­лять линией SCL до конца передачи текущего байта).


Выигравшее устройство даже и не заметит проигравших конкурентов и продолжит работу. Арбитраж может закончиться в любом месте посылки, формируемой ведущим устройством. Иска­жения информации, передаваемой выигравшим устройством, не происходит (при­ятное отличие от коллизий в сетях Ethernet). Если ведущее устройство, проиграв­шее в конфликте, имеет и функции ведомого устройства, по признанию проигрыша оно должно перейти в режим ведомого, поскольку конфликт мог быть вызван и по­пыткой обращения к нему победившего ведущего устройства.

Бит подтверждения АС К, вводящийся в конце каждого байта устройством-приемни­ком, выполняет несколько функций. Когда передатчиком является ведущее устрой­ство, приемник (ведомый) должен вводить нулевой бит АС К, свидетельствующий о нормальном получении очередного байта. Единичный бит АС К (нет подтверж­дения) в ответ на посылку адреса свидетельствует об отсутствии адресованного ведомого устройства на шине или его занятости внутренними процессами. Отсут­ствие подтверждения байта данных свидетельствует о занятости устройства. Не получив бита подтверждения, ведущее устройство должно сформировать усло­вие Stop, чтобы освободить шину. Когда ведущее устройство является приемником, оно должно формировать нулевой бит АС К после каждого принятого байта, кроме последнего. Единичный бит АСК в этом случае является указанием ведомому

424__________ Глава 11. Вспомогательные последовательные интерфейсы и шины

устройству на окончание передачи — оно теперь должно освободить линии SDA и SCL, чтобы ведущее устройство смогло сформировать условие Р или S r.

На вышеописанной физической основе строится протокол обмена данными по PC. Каждое ведомое устройство имеет свой адрес, уникальный на шине. В начале любой передачи ведущее устройство после условия S или S г посылает адрес ведо­мого устройства или специальный адрес (табл. 11.1). Ведомое устройство, опо­знавшее свой адрес после условия Start, становится выбранным; оно обязано отве­тить подтверждением на адрес и последующие сигналы со стороны ведущего устройства, до получения условия Р или 5г.


В первоначальном варианте интер­ фейса разрядность адреса устройства составляла 7 бит, впоследствии был введен и режим 10-битной адресации, совместимый с 7-битной. На одной шине могут присутствовать устройства и с 7-битной, и 10-битной адресацией.

При 7-битной адресации в первом байте после S (Sr) ведущее устройство переда­ет 7 бит адреса (А[6:0] в битах [7:1]) и признак операции RW (в бите О RW=1 — чте­ние, RW=0 — запись). Адреса ведомых устройств не должны попадать в области, указанные в таблице. Диапазоны адресов устройств различных типов централи­зованно выдаются изготовителям микросхем фирмой Philips. Для микросхем па­мяти, например, 7-битный адрес содержит две части: старшие 4 бита А[б:3] несут информацию о типе устройства (EEPROM — 1010), а младшие 3 бита А[0:2] определяют номер устройства данного типа на шине. Микросхемы с интерфей­сом PC имеют три адресных входа, коммутацией которых на логические уровни 1 и 0 задается номер устройства, на который оно «отзовется», а тип устройства «за­шит» в нем самом его изготовителем.

Когда ведущее устройство является передатчиком данных, оно в первом байте передает адрес ведомого устройства, при этом RW=0. Выбранное ведомое устрой­ство отзывается подтверждением (АСК=0), после чего ведущее устройство посы­лает один или несколько байт данных, на каждый из которых ведомое устройство должно отвечать подтверждением.

Когда ведущее устройство является приемником данных, оно в первом байте пе­редает адрес ведомого устройства с RW=1. Выбранное ведомое устройство также отзывается подтверждением (АСКНЗ), после чего происходит смена направления передачи и данные уже передает ведомое устройство. Ведущее устройство под­тверждает каждый принятый байт, кроме последнего.

Эти передачи могут завершаться условием Р, вводимым ведущим устройством, после которого шину может захватить любое ведущее устройство. Возможны и комбинированные передачи, когда ведущее устройство после окончания очеред­ного обмена не отдает шину, а формирует повторный старт (Sr), после чего обра­щается к тому же или иному устройству.



Отметим, что спецификация PC не оговаривает правил модификации внутренне­го (для микросхемы) адреса данных при последовательных обращениях — их определяет разработчик устройства в соответствии с его функциями. Для памяти естественен автоинкремент адреса, упрощающий последовательные обращения. Для регистроориентированных устройств автоинкремент обычно не нужен.

11.1. Последовательные шины на базе I2C

425

Таблица 11.1. Специальные адреса I2C

Биты [7:1 ]   Бит 0 (RW)   Назначение

 

0000000

0

0000 000

1

0000 001

X

0000 010

X

0000 011

X

0000 1ХХ

X

1111 1ХХ

X

1111 ОХХ

X

General call address — адрес общего вызова

Start — начало активного обмена

Адрес устройства шины CBUS (для совместимости)

Адрес для устройств иных шин

Зарезервировано

Код ведущего устройства режима Hs

Зарезервировано

Признак 10-битной адресации

Специальные коды, приведенные в табл. 11.1, трактуются следующим образом.

¦     Общий вызов является широковещательным, на него должны отвечать лишь

устройства, поддерживающие соответствующие функции (см. ниже).

¦     Байт Start предназначен для облегчения программной реализации протокола

PC (для функций ведомых устройств, не имеющих полной аппаратной реали­

зации протокола). На байт S t a r t не должно отвечать ни одно устройство. Фор­мируемый сигнал SDA (рис. 11.2) может быть использован как запрос аппарат­ного прерывания, по которому процессор «вплотную» займется обработкой сигналов PC. До получения этого байта процессор (микроконтроллер) может не отвлекаться на слежение за сигналами интерфейса.

¦     На адреса шины CBUS (трехпроводный «родственник» шины PC) и иных шин

устройства PC отвечать не должны.

¦     При использовании 10-битной адресации биты [2:1] содержат старшую часть

адреса, форматы 10-адресных посылок рассмотрены ниже.



 

Рис. 11.2. Временная диаграмма байта Start



Посылка общего вызова используется для одной из двух целей, определяемых вто­рым байтом, младший бит которого называется В. При В=0 устройства, приняв­шие общий вызов, должны считать программируемую часть своего аппаратного адреса, выполнив (второй байт 00000110Ь) или не выполнив (ОООООЮОЬ) внут­реннюю процедуру сброса. Другие значения байта устройства должны игнориро­вать. Каким образом программируется адрес, зависит от устройства (указывается в его описании). При В=1 общий вызов используется для широковещательной пере­дачи данных. В этом случае ведущее устройство в старших 7 битах второго байта сообщает свой адрес (тот же, на который оно отзывается в роли ведомого), а далее

426__________ Глава 11. Вспомогательные последовательные интерфейсы и шины

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

Широковещательная передача может использоваться, например, аппаратным кон­троллером клавиатуры, не знающим, на какой адрес посылать свои асинхронно возникающие сообщения. Вместо этого возможна и иная схема: по включении (и сбросу) это устройство становится ведомым приемником, которому ведущее устройство (системный контроллер) сообщит адрес потребителя информации для дальнейших «узконаправленных» передач, в которых это устройство будет уже ведущим.

Введение 10-битной адресации стало решением проблемы дефицита адресов: при 7-битной адресации с учетом зарезервированных комбинаций остается только 112 адресов, при 10-битной доступны еще 1024 адреса. Передача данных ведущим устройством с 10-битной адресацией выглядит просто: в первом байте после S (S г) биты 2:1 несут старшие биты адреса, бит 0 — признак RW=0; второй байт несет младшие 8 бит адреса, а последующие байты — передаваемые данные.


Приемник дает подтверждения обычным способом. Прием данных ведущим устройством несколько сложнее, поскольку признак RW является явным указателем на смену направления передачи и младшую часть адреса ведущее устройство передать уже не может. Прием по 10-битному адресу ведущее устройство начинает как фиктив­ную передачу: в первом байте посылает признак 10-битной записи и 2 бита адреса, во втором байте — остаток адреса. Далее ведущее устройство выполняет условие Sr и посылает признак 10-битного чтения (RW=1) с двумя старшими битами того же адреса. Ведомый передатчик, получив те же 2 старшие бита адреса, что и до 5г, отвечает подтверждением и начинает передавать данные ведущему устройству. Этот процесс продолжается и завершается так же, как и с 7-битной адресацией. Возможны и комбинированные обмены: реальная передача ведущего устройства 10-битному устройству, за которой после Sr следует чтение того же устройства. Также возможно комбинирование (через 5г) 7- и 10-битных обращений к раз­ным устройствам. Широковещание с 10-битной адресацией выглядит так же, как и с 7-битной, но адрес ведущего устройства передается уже двумя байтами (млад­шие 8 бит адреса передаются на месте первого байта данных). Высокоскоростной режим (Hs) позволяет обмениваться данными со скоростью до 3,4 Мбит/с, причем обеспечивается обратная совместимость устройств Hs с быс­трыми и стандартными (-F/5). Для обеспечения возможности обмена на столь высокой скорости выходные и входные буферы микросхем должны переключать­ся в специальный режим работы, отличающийся параметрами формируемых и принимаемых импульсов. Сигналы высокоскоростных устройств обозначаются как SDAH и SCLH; в смешанных системах для работы в Hs они должны отделять­ся от линий SDA и SCL обычных устройств специальными мостами (поведение устройств F/S на таких частотах непредсказуемо). В режиме Hs уже нет речи о разре­шении конфликтов — арбитраж выполняется на скоростях F/S; также здесь нет

11.1. Последовательные шины на базе I2C_______________________________ 427



возможности синхронизации по каждому биту (замедления передачи ведомым устройством), а ведущим устройством устанавливаются жесткие соотношения длительности.низкого и высокого уровней сигнала SCLH (2:1). Ведомое устрой­ство может притормаживать обмен только после выдачи бит подтверждений. Для перехода в режим Hs ведущее устройство в первом байте (после 5) использует за­резервированное значение 0000 1ххх, в котором ххх несет код ведущего устройства. Во время передачи этого байта (на скорости F/S) выполняется арбитраж — если обмен одновременно пытаются начать несколько устройств, продолжать его мо­жет только выигравшее ведущее устройство. Код ведущего устройства в режиме Hs назначается при конфигурировании, а все ведущие устройства на шине в ре­жиме Hs должны иметь различные коды (код 000 зарезервирован), чем и обес­печивается завершение арбитража за время передачи первого байта. Ведущее устройство может переключиться в режим Hs, только если оно выиграло арбитраж и получило единичный бит подтверждения. В этом случае он перестраивает свои выходные и входные буферы на параметры Hs и формирует повторный старт (S г). Далее обмен логически выполняется точно так же, как и в режиме F/S, но уже на высокой скорости. Режим Hs может распространяться на несколько последующих передач, разделенных условиями S r, и завершится работа в режиме Hs по усло­вию Р, по которому буферные схемы снова вернутся к параметрам F/S.


Содержание раздела