Вспомогательные последовательные интерфейсы и шины
В этой главе рассматриваются интерфейсы и шины, предназначенные, в основном, для «внутреннего использования». В этом качестве I²C используется для идентификации модулей DIMM, информация о которых хранится в маленьких микросхемах энергонезависимой памяти. В ряде современных системных плат присутствует шина SMBus, основанная на том же интерфейсе I²C. Эта шина используется для считывания идентификационной информации модулей памяти, по ней же осуществляется доступ к памяти идентификаторов и средствам термоконтроля процессоров Xeon. Она же входит и в состав сигналов слота CNR (слот подключения расширений аудиокодека и телекоммуникаций) для конфигурирования аудио- и коммуникационного оборудования. По интерфейсу I²C, входящему в интерфейс VESA DDC1/2B, современные мониторы обмениваются конфигурационной и управляющей информацией с графическим адаптером (а через него и с центральным процессором). Канал DDC входит в обычный 15-контактный аналоговый интерфейс VGA, его развитие EVC и цифровые интерфейсы P&D, DVI и DFP. А при поддержке графическим адаптером и монитором интерфейса DDC1/2AB пользователь теоретически получает возможность внешнего подключения дополнительных устройств по шине ACCESS.Bus через разъем, расположенный на мониторе (практически таких мониторов встречать не доводилось). Этими устройствами могут быть устройства позиционирования (планшеты, мыши), считыватели карт, штрих-кодов и т. п. Последовательная шина ACCESS.Bus, основанная на I²C, разработана фирмой DEC для взаимодействия компьютера с его аксессуарами — например, монитором (канал VESA DDC), интеллектуальными источниками питания (Smart Battery) и т. п. С помощью интерфейса I²C можно загружать программы (firmware) в энергонезависимую память (флэш) ряда популярных микроконтроллеров. Интерфейс I²C обеспечивает скорость передачи данных до 100 и даже до 400 Кбит/с, при этом он гораздо проще и дешевле интерфейса RS-232C с его «потолком» 115 Кбит/с и позволяет легко подключать несколько устройств, с поддержкой «горячего» подключения/отключения и технологии PnP. Недавно в спецификацию PC была введена высокая скорость передачи, до 3,4 Мбит/с, но на такой скорости могут работать лишь новые микросхемы со специальной аппаратной поддержкой интерфейса.
Интерфейс SMI в явном виде в ПК встречается нечасто, он «родом» из коммуникационной аппаратуры Fast Ethernet, где широко используется для управления модулями физического уровня (в том числе и сменными модулями концентраторов).
Интерфейсы SPI и JTAG встречаются в аппаратуре, основанной на микроконтроллерах и конфигурируемой логике, — наиболее часто они используются для загрузки конфигурационной информации (и кодов программ). Для тех же целей применяются и другие трехпроводные и четырехпроводные интерфейсы, но здесь мы ограничимся лишь упоминанием об их существовании.
11.1. Последовательные шины на базе I²C
Интерфейс последовательной шины 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
Начало любой передачи — условие Start — инициируется ведущим устройством, убедившимся в том, что шина свободна (высокий уровень сигналов SCL и SDA). Условие Start (на диаграммах обозначается как S) — перевод сигнала SDA из высокого в низкий при высоком уровне SCL. Завершается операция переводом сигнала SDA из низкого уровня в высокий при высоком уровне SCL — условие Stop (обозначается как P), также вводящееся ведущим устройством. При передаче данных состояние линии SDA может изменяться только при низком уровне SCL, биты данных считаются действительными во время высокого уровня SCL Ведущее устройство может начать очередную передачу вслед за текущей, не вводя условие Stop , — это называется repeated Start (повторный старт, обозначающийся Sr). В протоколе условия S и Sr почти равнозначны. Каждая посылка данных состоит из 8 бит данных, формируемых передатчиком (старший бит — MSB — передается первым), после чего передатчик на один такт освобождает линию данных для получения подтверждения. Приемник во время девятого такта формирует бит подтверждения Ack, по которому передатчик убеждается, что его «услышали». После передачи бита подтверждения ведомое устройство может задержать следующую посылку, удерживая линию SCL на низком уровне. Ведомое устройство в режимах F/S может замедлить передачу по шине и на уровне приема каждого бита, удерживая SCL на низком уровне после его спада, сформированного передатчиком. Поэтому ведущее устройство должно генерировать сигнал SCL не «вслепую», а анализируя состояние линии SCL: сняв этот сигнал, новый импульс (открытие ключа передатчика) оно имеет право вводить, лишь убедившись, что сигнал SCL вернулся в пассивное состояние (высокий уровень). В противном случае синхронизация будет потеряна. Сигнал SCL может быть растянут и другим устройством, пытающимся захватить шину в это же время. Тактовый сигнал SCL не обязательно будет равномерным: время его нахождения на низком уровне будет определяться максимальным временем, в котором его захочет удержать самое медленное из устройств, участвующих в данном обмене (даже и конфликтующих); время нахождение на высоком уровне будет определяться самым быстрым из конфликтующих ведущих устройств.
Коллизия (конфликт) на шине может возникнуть, когда два (или более) устройства, убедившись в покое шины, одновременно (или почти одновременно) инициируют обмен данными. Все они управляют линиями SCL и SDA и наблюдают за ними. Если устройство, передающее единицу (высокий уровень), в данном такте на линии SDA видит ноль (низкий уровень), оно должно признать свой проигрыш в конфликте и освободить линии SCL и SDA (при этом ему позволительно управлять линией SCL до конца передачи текущего байта). Выигравшее устройство даже и не заметит проигравших конкурентов и продолжит работу. Арбитраж может закончиться в любом месте посылки, формируемой ведущим устройством. Искажения информации, передаваемой выигравшим устройством, не происходит (приятное отличие от коллизий в сетях Ethernet). Если ведущее устройство, проигравшее в конфликте, имеет и функции ведомого устройства, по признанию проигрыша оно должно перейти в режим ведомого, поскольку конфликт мог быть вызван и попыткой обращения к нему победившего ведущего устройства.
Бит подтверждения ACK, вводящийся в конце каждого байта устройством- приемником, выполняет несколько функций. Когда передатчиком является ведущее устройство , приемник (ведомый) должен вводить нулевой бит ACK, свидетельствующий о нормальном получении очередного байта. Единичный бит ACK (нет подтверждения) в ответ на посылку адреса свидетельствует об отсутствии адресованного ведомого устройства на шине или его занятости внутренними процессами. Отсутствие подтверждения байта данных свидетельствует о занятости устройства. Не получив бита подтверждения, ведущее устройство должно сформировать условие Stop , чтобы освободить шину. Когда ведущее устройство является приемником , оно должно формировать нулевой бит ACK после каждого принятого байта, кроме последнего. Единичный бит ACK в этом случае является указанием ведомому устройству на окончание передачи — оно теперь должно освободить линии SDA и SCL, чтобы ведущее устройство смогло сформировать условие P или Sr.
На вышеописанной физической основе строится протокол обмена данными по I²C. Каждое ведомое устройство имеет свой адрес, уникальный на шине. В начале любой передачи ведущее устройство после условия S или Sr посылает адрес ведомого устройства или специальный адрес (табл. 11.1). Ведомое устройство, опознавшее свой адрес после условия Start , становится выбранным ; оно обязано ответить подтверждением на адрес и последующие сигналы со стороны ведущего устройства, до получения условия P или Sr. В первоначальном варианте интерфейса разрядность адреса устройства составляла 7 бит, впоследствии был введен и режим 10-битной адресации, совместимый с 7-битной. На одной шине могут присутствовать устройства и с 7-битной, и 10-битной адресацией.
Таблица 11.1 . Специальные адреса I²C
Биты[7:1] | Бит 0 (RW) | Назначение |
General call address — адрес общего вызова | ||
0000 000 | Start — начало активного обмена | |
0000 001 | X | Адрес устройства шины CBUS (для совместимости) |
0000 010 | X | Адрес для устройств иных шин |
0000 011 | X | Зарезервировано |
0000 1XX | X | Код ведущего устройства режима Hs |
1111 1XX | X | Зарезервировано |
1111 0XX | X | Признак 10-битной адресации |
При 7-битной адресации в первом байте после S (Sr) ведущее устройство передает 7 бит адреса (А[6:0] в битах [7:1]) и признак операции RW (в бите 0 RW=1 — чтение, RW=0 — запись). Адреса ведомых устройств не должны попадать в области, указанные в таблице. Диапазоны адресов устройств различных типов централизованно выдаются изготовителям микросхем фирмой Philips. Для микросхем памяти, например, 7-битный адрес содержит две части: старшие 4 бита А[6:3] несут информацию о типе устройства (EEPROM — 1010), а младшие 3 бита А[0:2] определяют номер устройства данного типа на шине. Микросхемы с интерфейсом I²C имеют три адресных входа, коммутацией которых на логические уровни 1 и 0 задается номер устройства, на который оно «отзовется», а тип устройства «зашит» в нем самом его изготовителем.
Когда ведущее устройство является передатчиком данных, оно в первом байте передает адрес ведомого устройства, при этом RW=0. Выбранное ведомое устройство отзывается подтверждением (ACK=0), после чего ведущее устройство посылает один или несколько байт данных, на каждый из которых ведомое устройство должно отвечать подтверждением.
Когда ведущее устройство является приемником данных, оно в первом байте передает адрес ведомого устройства с RW=1. Выбранное ведомое устройство также отзывается подтверждением (ACK=0), после чего происходит смена направления передачи и данные уже передает ведомое устройство. Ведущее устройство подтверждает каждый принятый байт, кроме последнего.
Эти передачи могут завершаться условием P, вводимым ведущим устройством, после которого шину может захватить любое ведущее устройство. Возможны и комбинированные передачи, когда ведущее устройство после окончания очередного обмена не отдает шину, а формирует повторный старт (Sr), после чего обращается к тому же или иному устройству.
Отметим, что спецификация I²C не оговаривает правил модификации внутреннего (для микросхемы) адреса данных при последовательных обращениях — их определяет разработчик устройства в соответствии с его функциями. Для памяти естественен автоинкремент адреса, упрощающий последовательные обращения. Для регистроориентированных устройств автоинкремент обычно не нужен.
Специальные коды, приведенные в табл. 11.1, трактуются следующим образом.
♦ Общий вызов является широковещательным, на него должны отвечать лишь устройства, поддерживающие соответствующие функции (см. ниже).
♦ Байт Start предназначен для облегчения программной реализации протокола I²C (для функций ведомых устройств, не имеющих полной аппаратной реализации протокола). На байт Start не должно отвечать ни одно устройство. Формируемый сигнал SDA (рис. 11.2) может быть использован как запрос аппаратного прерывания, по которому процессор «вплотную» займется обработкой сигналов I²C. До получения этого байта процессор (микроконтроллер) может не отвлекаться на слежение за сигналами интерфейса.
♦ На адреса шины CBUS (трехпроводный «родственник» шины I²C) и иных шин устройства I²C отвечать не должны.
♦ При использовании 10-битной адресации биты [2:1] содержат старшую часть адреса, форматы 10-адресных посылок рассмотрены ниже.
Рис. 11.2 . Временна́я диаграмма байта Start
Посылка общего вызова используется для одной из двух целей, определяемых вторым байтом, младший бит которого называется В. При В=0 устройства, принявшие общий вызов, должны считать программируемую часть своего аппаратного адреса, выполнив (второй байт 00000110b) или не выполнив (000000100b) внутреннюю процедуру сброса. Другие значения байта устройства должны игнорировать. Каким образом программируется адрес, зависит от устройства (указывается в его описании). При В=1 общий вызов используется для широковещательной передачи данных . В этом случае ведущее устройство в старших 7 битах второго байта сообщает свой адрес (тот же, на который оно отзывается в роли ведомого), а далее посылает требуемое количество байт данных, которые оно желает донести до неизвестного ему приемника. Приемник (как правило, это интеллектуальное устройство) должен отвечать подтверждением на каждый принятый байт начиная с первого (общий вызов), затем на адрес ведущего устройства и последующие байты данных.
Широковещательная передача может использоваться, например, аппаратным контроллером клавиатуры, не знающим, на какой адрес посылать свои асинхронно возникающие сообщения. Вместо этого возможна и иная схема: по включении (и сбросу) это устройство становится ведомым приемником, которому ведущее устройство (системный контроллер) сообщит адрес потребителя информации для дальнейших «узконаправленных» передач, в которых это устройство будет уже ведущим.
Введение 10-битной адресации стало решением проблемы дефицита адресов: при 7-битной адресации с учетом зарезервированных комбинаций остается только 112 адресов, при 10-битной доступны еще 1024 адреса. Передача данных ведущим устройством с 10-битной адресацией выглядит просто: в первом байте после S (Sr) биты 2:1 несут старшие биты адреса, бит 0 — признак RW=0; второй байт несет младшие 8 бит адреса, а последующие байты — передаваемые данные. Приемник дает подтверждения обычным способом. Прием данных ведущим устройством несколько сложнее, поскольку признак RW является явным указателем на смену направления передачи и младшую часть адреса ведущее устройство передать уже не может. Прием по 10-битному адресу ведущее устройство начинает как фиктивную передачу: в первом байте посылает признак 10-битной записи и 2 бита адреса, во втором байте — остаток адреса. Далее ведущее устройство выполняет условие Sr и посылает признак 10-битного чтения (RW=1) с двумя старшими битами того же адреса. Ведомый передатчик, получив те же 2 старшие бита адреса, что и до Sr, отвечает подтверждением и начинает передавать данные ведущему устройству. Этот процесс продолжается и завершается так же, как и с 7-битной адресацией. Возможны и комбинированные обмены: реальная передача ведущего устройства 10-битному устройству, за которой после Sr следует чтение того же устройства. Также возможно комбинирование (через Sr) 7- и 10-битных обращений к разным устройствам. Широковещание с 10-битной адресацией выглядит так же, как и с 7-битной, но адрес ведущего устройства передается уже двумя байтами (младшие 8 бит адреса передаются на месте первого байта данных).
Высокоскоростной режим (Hs ) позволяет обмениваться данными со скоростью до 3,4 Мбит/с, причем обеспечивается обратная совместимость устройств Hs с быстрыми и стандартными (F/S ). Для обеспечения возможности обмена на столь высокой скорости выходные и входные буферы микросхем должны переключаться в специальный режим работы, отличающийся параметрами формируемых и принимаемых импульсов. Сигналы высокоскоростных устройств обозначаются как SDAH и SCLH; в смешанных системах для работы в Hs они должны отделяться от линий SDA и SCL обычных устройств специальными мостами (поведение устройств F/S на таких частотах непредсказуемо). В режиме Hs уже нет речи о разрешении конфликтов — арбитраж выполняется на скоростях F/S ; также здесь нет возможности синхронизации по каждому биту (замедления передачи ведомым устройством), а ведущим устройством устанавливаются жесткие соотношения длительности низкого и высокого уровней сигнала SCLH (2:1). Ведомое устройство может притормаживать обмен только после выдачи бит подтверждений. Для перехода в режим Hs ведущее устройство в первом байте (после S) использует зарезервированное значение 00001ххх, в котором xxx несет код ведущего устройства. Во время передачи этого байта (на скорости F/S ) выполняется арбитраж — если обмен одновременно пытаются начать несколько устройств, продолжать его может только выигравшее ведущее устройство. Код ведущего устройства в режиме Hs назначается при конфигурировании, а все ведущие устройства на шине в режиме Hs должны иметь различные коды (код 000 зарезервирован), чем и обеспечивается завершение арбитража за время передачи первого байта. Ведущее устройство может переключиться в режим Hs , только если оно выиграло арбитраж и получило единичный бит подтверждения. В этом случае он перестраивает свои выходные и входные буферы на параметры Hs и формирует повторный старт (Sr). Далее обмен логически выполняется точно так же, как и в режиме F/S , но уже на высокой скорости. Режим Hs может распространяться на несколько последующих передач, разделенных условиями Sr, и завершится работа в режиме Hs по условию P, по которому буферные схемы снова вернутся к параметрам F/S .
Шина ACCESS.Bus
Последовательная шина ACCESS.Bus (Accessory Bus) разрабатывалась фирмой DEC как унифицированный недорогой интерфейс взаимодействия компьютера с внешними устройствами — клавиатурой, координатными устройствами, текстовыми устройствами (принтеры, считыватели штрих-кодов), мониторами (в плане обмена управляющей и конфигурационной информацией по каналу VESA DDC). История ACCESS.Bus начинается с 1991 г.; несколько позже в шину вели дополнительную спецификацию для взаимодействия с внутренними устройствами, например, интеллектуальными источниками питания (Smart Battery) и т. п. К внутренним относятся устройства системного управления SM (System Management), и в спецификации имеются точки соприкосновения с шиной SMBus, основанной на том же интерфейсе I²C. Формально шина позволяет обмениваться сообщениями устройствам числом до 125 (предел принятой системы адресации). Над аппаратным протоколом I²C в шине ACCESS.Bus имеется базовый программный протокол, с которым взаимодействуют протоколы конкретных подключенных устройств. Протоколы обеспечивают подключение/отключение устройств без перезагрузки ОС и автоматическое динамическое назначение адресов. Последняя доступная версия ACCESS.bus Specifications Version 3.0 опубликована ACCESS.bus Industry Group в 1995 г., дальнейшее описание сделано на ее основе.
На аппаратном уровне шина логически полностью соответствует шине I²C со стандартной скоростью (до 100 Кбит/с) и 7-битной адресацией ведомых устройств. Здесь работают те же механизмы синхронизации и арбитража. Однако из всех возможных способов передачи и приема данных в ACCESS.bus основным является передача данных ведущим устройством и их прием ведомым устройством — это самый простой способ, при котором в каждой транзакции отсутствует смена направления передачи. Из этого следует, что для двустороннего обмена информацией все устройства должны поддерживать функции ведущего устройства (передатчика) и ведомого устройства (приемника). Для совместимости с SMBus разрешена возможность чтения данных ведущим устройством и комбинированные передачи через условие Sr.
По электрическим сигналам имеются две спецификации, для внешних и внутренних устройств соответственно.
Спецификация для внешних устройств (Off-board ACCESS.bus), являющаяся основной для этой шины, определяет использование 4-контактного экранированного модульного разъема (MOLEX SEMCONN или AMP SDL), назначение контактов которого приведено в табл. 11.2. Хост-компьютер должен обеспечивать питание 5 В с током 50-1000 мА. Каждое устройство (и кабель), характеризуется потребляемым током I (мА) и вносимой емкостью сигнальных проводов С (пФ). Предельное число подключаемых устройств ограничивается суммарной вносимой емкостью (не более 1000 пФ) и током потребления. До ограничения по адресации (125 устройств) дело практически не доходит. Максимальная суммарная длина кабеля (без повторителей) не должна превышать 10 м. По сравнению с I²C в шине ток нагрузки линий SDA и SCL увеличен до 6 мА (выходной ток низкого уровня). Для улучшения формы импульсов и защиты от статического электричества устройства рекомендуется подключаться к линиям SDA и SCL через последовательные резисторы 51 Ом. Входы микросхем рекомендуется защищать диодами, соединенными с шинами GND и +5 В.
Таблица 11.2 . Назначение контактов внешнего разъема ACCESS.bus
Контакт | Назначение | Цвет провода |
GND | Черный | |
SDA | Зеленый | |
+5 В (питание устройств) | Красный | |
SCL | Белый |
Ассоциация VESA для вывода внешней шины ACCESS.Bus на корпус мониторов предлагает иной, 5-контактный разъем ACCESS.Bus; назначение его контактов приведено в табл. 11.3.
Таблица 11.3 . Разъем ACCESS.Bus (VESA)
Контакт | Назначение |
GND | |
Ключ | |
SDA | |
+5 В (питание устройств) | |
SCL |
Спецификация для внутренних устройств (On-board ACCESS.bus) рассчитана на меньшие токи нагрузки (350 мкА); здесь допускаются последовательные резисторы большего сопротивления. Вместо ограничения на вносимую емкость задаются требования к фронтам и спадам сигналов. Эта спецификация была введена только в 1995 г., она нацелена на совместимость с устройствами SMBus, и в нее введены дополнительные ограничения на максимальные длительности различных фаз, соответствующие SMBus.
Базовый протокол шины ACCESS.bus 3.0 состоит из двух наборов: протокол PA для устройств с программируемым адресом (Programmable Address) и протокол FA для устройств с фиксированным адресом. В устройстве (как внешнем, так и внутреннем) может быть реализован любой из них или оба. Предыдущая версия спецификации описывала только внешние устройства PA; внутренние устройства с FA называются SM-устройствами (System Management). Протокол FA практически соответствует шине SMBus, описанной ниже, без «архитектурных излишеств» в виде PEC и динамического назначения адресов. Устройства SM могут общаться с хостом по протоколу Write Word (см. ниже). Базовый протокол PA основан на передаче однонаправленных сообщений (см. ниже). Шина ACCESS.bus является хост-центрической: сообщения передаются от устройства к хосту и от хоста к устройству; исключением является попытка сброса устройства-двойника (см. ниже). После включения питания устройства должны отвечать только на «дежурный» адрес 0110 111; в процессе конфигурирования каждому устройству назначается личный адрес. В рабочем состоянии шина позволяет обнаруживать подключение новых устройств и их конфигурировать без перезагрузки («горячее подключение»).
Сообщения передаются в виде пакетов, формат пакета приведен на рис. 11.3. Адрес назначения DestAddr воспринимается получателем аппаратно (это адрес ведомого устройства I²C). Адрес источника SrcAddr позволяет получателю идентифицировать источник данных (и определить, куда посылать ответ). Флаг протокола P позволяет различать назначение тела пакета: P=0 — «полезные» данные устройства (Device Data Stream); P=1 — управление/состояние (control/status). Поле Length определяет длину тела пакета (в байтах); само тело (Body) размещается в последующих байтах. Контрольный байт Checksum является результатом выполнения функции XOR (Исключающее ИЛИ) над всеми предшествующими байтами пакета начиная с адреса приемника. Признаком целостности пакета является нулевой результат функции XOR от всех байтов пакета включая контрольный. Подлежат отработке только пакеты с корректным контрольным байтом. Минимальная длина всего пакета — 4, максимальная — формально 131 (127 байт тело и 4 байта обрамления). Однако максимальную длину пакета ограничивает и время, разрешенное устройству для передачи пакета.
Рис. 11.3 . Формат пакета сообщения ACCESS.Bus
Каждому устройству назначается свой адрес, на который оно должно отзываться битами подтверждения при приеме сообщения. Адрес выражают однобайтным числом, причем всегда четным, поскольку в I²C 7-битный адрес дополняется младшим битом RW, нулевым в ACCESS.bus. Адрес 50h всегда назначается хост-компьютеру, адрес 10h зарезервирован для хоста SM-устройств. Адрес 6Eh является «дежурным» адресом, на который отзываются лишь устройства с неназначенным личным адресом. Для личных адресов устройств остаются диапазоны 02-4ЕН; 52-GCh; 70-FEh — 125 адресов с некоторыми исключениями, зарезервированными для фиксированных адресов SM-устройств и мониторов.
Для ACCESS.bus определено 9 протокольных сообщений (у них флаг P=1), обязательных для реализации интерфейсных функций шины (автоконфигурирования). «Полезными» прикладными сообщениями могут обмениваться только сконфигурированные устройства и только после явного разрешения этого обмена.
Ниже перечислены сообщения от хоста к устройствам .
♦ Reset — сброс устройства и перевод его в режим ответа на «дежурный» адрес. Тело состоит из однобайтного кода F0h. Это же сообщение может послать и устройство, обнаружившее на шине помеху в виде устройства-двойника с тем же адресом. Послав это сообщение по своему же собственному адресу, устройство заставит двойника перейти на «дежурный» адрес.
♦ Identification Request — запрос идентификационной строки. Тело состоит из однобайтного кода F1h.
♦ Assign Address — назначение устройству, имеющему совпадающую идентификационную строку, нового адреса. Тело (длина 30) начинается с кода F2h, за которым следует 28-байтный идентификатор устройства, а за ним — байт нового адреса.
♦ Capabilities Request — запрос фрагмента информации о возможностях устройства. В теле за кодом F3h следует 16-битный параметр — смещение требуемых данных относительно начала структуры данных возможностей. Для упрощения логики устройств параметр ограничивается значениями, обеспечивающими чтение первого фрагмента (с нулевым смещением), следующего и переспрос последнего переданного.
♦ Enable Application Report — разрешение передачи прикладных данных. За кодом F5h следует байт кода операции: 00h — запрет, 01 — разрешение.
♦ Presence Check — проверка наличия устройства по данному адресу. За кодом F7h следует нулевой байт (зарезервирован на будущее).
Далее перечислены сообщения от устройств к хосту .
♦ Attention —запрос на конфигурирование (устройство включилось и завершило автоинициализацию). Тело состоит из однобайтного кода E0h.
♦ Identification Reply — ответ на запрос идентификационной строки. Тело (длина 29) содержит код E1h, за которым следует 28-байтная строка идентификации.
♦ Capabilities Reply — ответ на запрос фрагмента описания возможностей. Тело (длина 3-35) начинается с кода E3h, за которым следует 16-битное смещение (см. запрос) и собственно данные (0-32 байт). Хост собирает фрагменты, используя смещение.
Также в спецификации определены дополнительные протокольные сообщения, используемые для управления потреблением, распределением ресурсов и иных целей (у этих сообщений также флаг P=1).
♦ Resource Request — запрос ресурса (от устройства к хосту). За кодом E5h следует байт-описатель ресурса и необходимые данные. Команда позволяет запросить адрес в личное пользование и освободить его; запросить сообщение о текущем времени; запросить хост о сохранении блока данных, а также о воз вращении его обратно; запросить хост о сохранении питания на шине (для окончания внутренних операций); запросить дополнительную полосу шины.
♦ Resource Grant — выделение ресурса, ответ хоста на запрос. За кодом F4h следует описатель ресурса и необходимые данные.
♦ Application Hardware Signal — запрос устройства на генерацию высокоприоритетного аппаратного сигнала хост-компьютеру. За кодом A0h следует байт со следующим кодом сигнала:
• 1 — Reset — попытка аппаратного сброса компьютера;
• 2 — Halt — вызов отладчика;
• 3 — Attention — генерация сигнала внимания (аппаратное прерывание).
♦ Application Test — команда от хоста на выполнение устройством прикладного теста (код B1h).
♦ Application Test Reply — сообщение устройством о результатах выполнения теста. За кодом A1h следует код результата (0 — успешное выполнение, иначе — ошибка) и 0-30 байт дополнительных данных.
♦ Application Status Message — сообщение устройством об изменении своего состояния (в прикладном плане). За кодом A2h следует нулевой байт, за ним байт состояния и 2 байта специфических данных. Байт состояния:
• 00 — готово;
• 01 — не готово;
• 02 — изменились свойства;
• 03 — потеряно внутреннее состояние;
• 04 — потеряны прикладные данные (может, и от переполнения).
♦ Device Power Management Command — команда управления потреблением устройства. За кодом F6 следует байт кода операции:
• 00 — режим Run ;
• 01 — режим Standby ;
• 02 — режим Suspend ;
• 03 — режим Shutdown ;
• 04 — совет отключить питание;
• 05 — рестарт;
• 06 — сообщить режим потребления.
Остальные коды протокольных сообщений задаются разработчиком в соответствии со спецификой устройств. Напомним, что прикладные данные передаются с флагом P=0.
Строка идентификации устройства ACCESS.bus длиной 28 байт состоит из ряда символьных полей — байта ревизии протокола (protocol revision), 7-байтного поля ревизии модуля (module revision), 8-байтных имен производителя (vendor name) и модуля (module name), за которым следует 32-битный уникальный номер устройства (device number). Этот номер может быть либо фиксированным (уникальность обеспечивает производитель, что недешево), либо случайным числом, генерируемым по включению (на весь сеанс работы). Системное ПО, распознавая устройство для подключения драйверов, не должно руководствоваться этой строкой — возможности устройства (Capabilities) описываются (и сообщаются) в специальной структуре данных. Эта структура зависит от типа устройства.
На уникальности идентификатора и основан механизм автоконфигурирования : на запрос идентификатора по «дежурному» адресу отвечают все устройства, еще не имеющие личных адресов. Однако в ходе арбитража до конца сообщения доходит только одно из этих устройств, после чего хост ему назначает личный адрес. В следующем общем опросе идентификаторов «победит» уже другое устройство и так далее, пока всем устройствам не будут назначены личные адреса (об этом хост узнает по отсутствию ответа на общий опрос). Устройство-«новичок» на шине заявит о своем появлении сообщением Attention, в ответ на которое хост выполнит вышеописанную процедуру идентификации и назначения адреса.
Спецификация ACCESS.bus определяет структуру программного обеспечения на хост-компьютере. Центральным элементом ПО является менеджер шины — ACCESS.bus Manager — программный драйвер, управляющий всеми операциями с устройствами, подключенными к шине. Этот драйвер, с одной стороны, связывается с аппаратными средствами хост-контроллера через драйвер минипорта MPD; с другой стороны, к нему обращаются драйверы устройств. Прикладное ПО обращается либо к драйверам нужных устройств, либо к менеджеру шины (но никак не напрямую к хост-контроллеру). Менеджер шины инициализирует шину и управляет ею, определяя вновь подключенные и отключенные устройства. Он связывает драйверы устройств (или прикладное ПО) с самими устройствами, проверяет входящие сообщения и работает как двунаправленный коммутатор данных, переформатирующий и буферизующий входящие и исходящие сообщения. Драйвер мини-порта MPD (Mini Port Driver) служит для изоляции менеджера шины от аппаратных особенностей хост-контроллера. Драйверы устройств являются двусторонними интерфейсами между прикладными программами и специфическими устройствами. В спецификации ACCESS.bus описываются программные интерфейсы драйверов (Device Driver, Mini Port Driver), а также протоколы для клавиатур, указателей (Locator), мониторов, батарей и текстовых устройств.
Шина SMBus
&nb