Поддержка SMBus в BIOS и ACPI
Шина SMBus, в отличие от ACCESS.bus, сразу получила спецификацию ее поддержки на уровне BIOS . Позже появились спецификации, позволяющие интегрировать устройства SMBus в систему ACPI.
В 1995 г. была опубликована спецификация интерфейса SMBus BIOS — System Management Bus BIOS Interface Specification, основные идеи которой вкратце изложены ниже. Интерфейс позволяет верхним уровням ПО абстрагироваться от аппаратной реализации хост-контроллера. Поддержка BIOS обеспечивается для трех типов режимов работы процессора: реального (и V86), защищенного 16-разрядного и защищенного 32-разрядного. Вызов функций может выполняться либо через BIOS Int 15h (в реальном режиме и в V86), либо через точку входа, полученную при подключении в соответствующем режиме. Для подключения (и отключения) также используется сервис BIOS Int 15h; после подключения доступ через Int 15h блокируется (до отключения). В защищенном режиме вызов интерфейсных функций возможен только через точку входа, полученную при подключении. Поддержка точки входа для реального режима необязательна.
Спецификация SMBus BIOS обеспечивает хост-центрическое обращение к абонентам шины: по инициативе вызывающей программы хост-контроллер посылает устройству команду, которая может предполагать и немедленный ответ устройства. Однако устройства могут посылать хосту сообщения по собственной инициативе, при этом они обязаны использовать протокол Write Word. Хост способен помещать принятые сообщения в небольшую очередь, из которой они могут программно извлекаться путем вызова функции 7 (программа должна периодически выполнять этот вызов для проверки наличия сообщений в очереди). В очереди каждое сообщение представлено байтом адреса источника и парой байт тела сообщения.
Шина SMBus тесно связана с оборудованием, управляющим питанием и участвующим в генерации запросов системного прерывания SMI (System Management Interrupt — особое аппаратное прерывание процессора) и их обработки. Из-за этого в BIOS введен специальный механизм, позволяющий обнаружить обработку SMI во время выполнения транзакций и в иное время. Это необходимо, поскольку обработчик SMI, работающий в режиме SMM, совершенно невидим прикладной программе, а результаты его работы могут существенно влиять на работу программы, вызывающей BIOS SMBus.
Функции общих обращений к SMBus :
♦ SMBus Installation Check (01h) — проверка наличия функций;
♦ SMBus Real Mode Connect (02h) — подключение в реальном режиме;
♦ SMBus 16-Bit Connect (03h) — подключение в 16-битном защищенном режиме;
♦ SMBus 32-Bit Connect (04h) — подключение в 32-битном защищенном режиме;
♦ SMBus Disconnect (05h) — отключение от сервиса;
♦ SMBus Deviсе Address (06h) — получение списка адресов устройств SMBus;
♦ SMBus Critical Messages (07h) — чтение сообщений устройств, переданных хосту.
Для взаимодействия с конкретными устройствами SMBus предназначен набор функций, позволяющих генерировать запросы протокольных команд SMBus и получать результаты их выполнения. Функции запросов и получения ответов разделены, что позволяет на время выполнения (и передачи) довольно длительных команд не занимать время центрального процессора. Большинство протокольных команд вводится за один вызов BIOS; исключение составляет команда записи блока, данные для которой передаются за один или более последующих запросов продолжения. Результаты большинства команд также принимаются за один вызов; результат чтения блока получается за несколько вызовов продолжения.
Вызовы протокольных команд устройств SMBus :
♦ SMBus Request (10h) — запрос команды устройству;
♦ SMBus Request Continuation (11h) — продолжение запроса для записи блока;
♦ SMBus Request Abort (12h) — отказ от выполнения ранее посланного запроса;
♦ SMBus Request Data and Status (13h) — запрос данных и состояния.
Шина SMBus является одним из главных коммуникационных средств в ACPI. Интерфейс SMBus для ACPI определен в спецификации SMBus CMI — документе System Management Bus (SMBus) Control Method Interface Specification Version 1.0, опубликованном в конце 1999 г. Этот интерфейс позволяет легко использовать все возможности SMBus независимо от происхождения или особенностей реализации оборудования. Ниже перечислены основные цели спецификации.
♦ Обеспечить эффективный и надежный интерфейс ACPI для аппаратных средств хост-контроллера независимо от его реализации (со встроенным микроконтроллером или без него).
♦ Обеспечить системную синхронизацию доступа ко всем ресурсам SMBus.
♦ Гарантировать соответствие интерфейса версиям 1.0 и 1.1 спецификации SMBus и возможности его расширения для поддержки новых свойств в будущих версиях.
Для успешного функционирования системы требуется поддержка соответствующими драйверами операционной системы. Для управления питанием форум разработчиков «интеллектуальных» батарей — Smart Battery System Implementers Forum (SBS-IF) — разработал спецификацию драйверов для ОС Windows 9x/2000, с которой можно ознакомиться на сайте http://www.sbs-forum.org/smbus/.
Рассмотрение программного интерфейса CMI выходит за рамки данной книги. Отметим лишь, что коды протоколов SMBus, используемые в CMI, отличаются от кодов, используемых в SMBus BIOS. Те же протоколы, но с байтом PEC, кодируются с единицей в старшем бите (значение увеличено на 80h).
11.1.4. Сравнение шин I²C, ACCESS.bus и SMBus
Как видно из вышеприведенных описаний, все эти три шины являются «близкими родственниками»; однако они имеют ряд электрических, конструктивных и протокольных отличий.
Электрический интерфейс шин (табл. 11.5) достаточно близок, и при обычном (5 В) питании схем проблем совместимости не возникает (Vdd — напряжение питания).
Таблица 11.5 . Электрические параметры шин I²C, ACCESS.bus и SMBus
Параметр | I²C | ACCESS.bus внешняя | ACCESS.bus внутренняя | SMBus мощная | SMBus маломощная |
Входной уровень лог. 0, не более | 1,5 В или 0,3 Vdd | 0,3 Vdd | 0,3 Vdd | 0,8 В | 0,8 В |
Входной уровень лог. 1, не менее | 3,0 В или 0,7 Vdd | 0,7 Vdd | 0,7 Vdd | 2,1 В | 2,1 В |
Выходной уровень лог. 0, не более | 0,4 В или 0,2 Vdd при Vdd<2 В | 0,6 В | 0,6 В | 0,4 В | 0,4 В |
Выходной ток лог. 0, мА | 0,35 | 0,35 | |||
Максимальная емкость линии шины, пФ | –¹ | ||||
Частота, КГц | 0-100, 0-400, 0-3400 | 0-100 | 0-100 | 10-100 | 10-100 |
¹ Вместо емкости задаются допустимые длительности фронтов и спадов.
Конструктивно выделяется шина ACCESS.Bus (внешняя), в которой определены разъемы и кабели, а также питание (5 В) устройств от шины; в других — нет.
Протокольные различия более существенны, из них отметим лишь следующие.
♦ В шине ACCESS.Bus определены лишь передачи данных ведущим устройством, в остальных шинах ведущее устройство может и принимать данные.
♦ В шинах ACCESS.Bus и SMBus ведущее устройство не имеет права повторного захвата шины ранее, чем через 50 мкс после начала передачи. Сигнал SCL в этой шине может удерживаться на низком уровне не дольше 2 мс. В I²C таких ограничений нет.
♦ В шине SMBus ведущее устройство ожидает от ведомого устройства немедленного ответа, в шине ACCESS.Bus ответ приходит независимо, но ожидается не позже чем через 40 мс. В шине SMBus и ведущее устройство, и ведомое устройство могут притормаживать обмен на уровне приема битов, что позволяет им вписываться в свои временные диаграммы (успевать «просыпаться», обрабатывать прерывания).