На уровне связи (2-м уровне OSI) определяются те же правила передачи данных, что и в I²C: условия S
, P
, Sr
; биты подтверждения; 7-битная адресация и признак RW
в первом байте, следующем за условием S
( Sr
). Как и в I²C, ведущее устройство может выполнять и запись, и чтение данных ведомого устройства; используются и комбинированные транзакции (через условие Sr
). В генерации подтверждений на SMBus есть особенности. На собственный адрес устройство всегда должно отвечать битом подтверждения ACK
, даже если оно занято внутренними операциями. Это правило обеспечивает работу механизма определения присутствия данного устройства на шине. Ведомое устройство может вводить бит NACK
в ответ на любой неадресный байт, если оно занято или запрашиваемые командой данные недоступны. В этом случае у него есть и альтернатива поведения — задержать синхросигнал на низком уровне (в разрешенных пределах). Ведомое устройство должно вводить бит NACK
в ответ на недопустимые коды команд или данных. Ответ NACK
вынуждает ведущее устройство прекратить транзакцию (ввести P
). Ведущее устройство, будучи приемником, ответом NACK
информирует передатчик о приеме последнего ожидаемого байта.
Сетевой уровень (3-й уровне OSI) определяет «лицо» шины SMBus и заслуживает более детального рассмотрения.
Сетевой уровень SMBus
В шине SMBus введено понятия «хоста» (host) — абонента шины, выполняющего координирующие и конфигурирующие функции. Хост является ведущим устройством шины, при этом должен выполнять ряд функций ведомого устройства и отрабатывать сообщения уведомления.
Каждое ведомое устройство имеет свой уникальный адрес; в диапазоне 7-битных значений адреса выделяются специальные значения (табл. 11.4), которых несколько больше, чем в I²C. 10-битная адресация в текущей версии не рассматривается. Адреса устройств разделяются по типам. Для устройств однозначно понятного назначения SMBus WG выделяет специальные адреса (Purpose-assigned addresses). Например, батареи Smart Battery имеют адрес 0001 011, их зарядные устройства — 0001 001. Устройства с этими адресами обязаны соответствовать требованиям SMBus, предъявляемым к устройствам данного класса. Ряд систем с SMBus определяют и используют эти устройства, основываясь на их адресе. Другие системы могут и не доверять одному только адресу, а определять типы присутствующих устройств иным образом. Для устройств разнообразного назначения, а также устройств, не полностью отвечающих спецификациям SMBus для своего класса, производители назначают иные адреса, с которыми можно ознакомиться на сайте www.smbus.org. Адреса устройств-прототипов задействуются исключительно в экспериментально-отладочных целях и в коммерческих изделиях использоваться не должны. В спецификации SMBus 2.0 появилась возможность автоматического динамического назначения адресов устройств, которая будет рассмотрена ниже.
Таблица 11.4. Специальные адреса SMBus
Биты[7:1] |
Бит 0 (RW) |
Назначение |
0000 000 |
0 |
General call address — адрес общего вызова |
0000 000 |
1 |
Start — начало активного обмена |
0000 001 |
X |
Адрес устройства шины CBUS (для совместимости) |
0000 010 |
X |
Адрес для устройств иных шин |
0000 011 |
X |
,Зарезервировано |
0000 1XX |
X |
Зарезервировано |
0101 000 |
X |
Хост шины ACCESS.bus |
0110 111 |
X |
«Дежурный» адрес ACCESS.bus |
1111 0XX |
Х |
Признак 10-битной адресации |
1111 1XX |
X |
Зарезервировано |
0001 000 |
X |
Хост шины SMBus |
0001 100 |
X |
Адрес ответа на сигнальные сообщения SMBus |
1100 001 |
X |
«Дежурный» адрес SMBus |
1001 0XX |
Х |
Адрес устройств-прототипов |
Типичное устройство SMBus поддерживает определенный набор команд, с помощью которых выполняется обмен данными. Команда кодируется одним байтом, передаваемым в транзакции вслед за адресным байтом. Команды могут использовать один из 11 протоколов, определенных в SMBus.
В версии 1.1 спецификации SMBus введена возможность контроля ошибок пакета PEC (Packet error checking). Механизм PEC основан на добавлении в конец каждого передаваемого пакета байта CRC-кода, вычисляемого по всем предыдущим байтам пакета, начиная с адресного. Почти все протоколы могут иметь два варианта — без PEC и с PEC; на одной шине могут присутствовать устройства и с поддержкой PEC, и без. На байт PEC приемник отвечает подтверждением, но трактовка ответа неоднозначна. Если передатчик в ответ на PEC получил ответ NACK
, это означает, что приемник не подтвердил корректный прием пакета. Однако ответ ACK
не является подтверждением достоверности приема: приемник может «не понимать» PEC и отвечать на него как на обычный байт данных; приемник может и не выполнять контроль в реальном времени приема потока данных. Более «достоверный контроль достоверности» могут обеспечить лишь протоколы высших уровней. Так, например, для контроля достоверности записи в устройство можно использовать последующее чтение тех же данных с PEC, и по анализу всего принятого пакета ведущее устройство сделает вывод об успешности или ошибке операции записи.
Читать дальше