Аппаратные интерфейсы ПК. Энциклопедия
Шрифт:
4. Производится распределение (арбитраж) системных ресурсов, выделяемых каждой карте.
5. Каждая карта конфигурируется согласно выбранному распределению ресурсов и активируется (переводится в рабочий режим).
Все шаги конфигурирования выполняет процедура POST (если BIOS имеет поддержку PnP) или операционная система при загрузке. PnP BIOS может ограничиться конфигурированием и активацией только устройств, участвующих в загрузке, оставляя конфигурирование и активацию дополнительных устройств операционной системе. BIOS без поддержки PnP может использовать необходимые для загрузки устройства, сконфигурированные с параметрами по умолчанию, а изоляцией карт, сбором информации и конфигурированием займется операционная система при загрузке. Вариантов много, но все они опираются на единые методы взаимодействия с картами ISA PnP. Конфигурирование выполняется в специальном состоянии плат, в которое их всех можно программно перевести с помощью специального ключа инициализации, защищающего конфигурационную информацию от случайного
Для конфигурирования карт PnP необходимо всего три 8-битных системных порта (табл. 6.7), с которыми процессор может общаться, применяя инструкции ввода-вывода с однобайтной передачей данных. Карты PnP должны использовать 12-битное декодирование адреса ввода-вывода, а не 10-битное, как это принято в традиционных картах ISA.
Таблица 6.7. Системные порты ISA PnP
Имя порта | Адрес | Тип доступа |
---|---|---|
ADDRESS | 0279h (Printer status port) | Только запись |
WRITE_DATA | 0A79h (Printer status port + 0800h) | Только запись |
READ_DATA | Перемещаемый в диапазоне 0203h-03FFh | Только чтение |
Порт
Порты
Вышеперечисленные три порта используются только для конфигурирования и управления картами PnP. Для взаимодействия прикладных программ с функциональными устройствами карты используются иные ресурсы, выделенные карте (порты, области памяти, прерывания и каналы DMA). По включению питания или аппаратному сбросу карты настраиваются на стандартную рабочую конфигурацию, принятую для них по умолчанию (она может храниться в энергонезависимой памяти или задаваться джамперами). Это обязательно, по крайней мере для устройств, участвующих в загрузке, — ввод, вывод (экран) и собственно загрузочное устройство. Остальные устройства могут быть и логически отключенными от шины, до тех пор пока они не будут сконфигурированы программными средствами PnP. Карта PnP должна сообщать обо всех используемых ею ресурсах и, по возможности, предлагать альтернативные конфигурирования. Она обязана подчиняться конфигурационным командам PnP, включая команду деактивации (логического отключения от шины); при невозможности принять указанную конфигурацию карта (или ее логическое устройство) должна отключаться. Строгое выполнение данных требований всеми картами делает возможным работу системы PnP на неприспособленной для этого шине ISA. Непременным условием работоспособности является и уникальность идентификаторов карт (см. ниже).
В плане PnP каждая карта может находиться в одном из четырех состояний.
♦ Wait for key (ожидание ключа) — состояние нормального функционирования (или отключения) логических устройств. В это состояние устройство входит при включении питания, по аппаратному сбросу и по завершению его конфигурирования системой PnP. До подачи ключа в этом состоянии конфигурация карты программными обращениями изменена быть не может.
♦ Sleep («спячка») — состояние, в котором карта ожидает пробуждающей команды
♦ Isolation (изоляция) — карта отвечает только на чтение регистра
♦ Config (конфигурирование) — состояние, в котором карта отвечает на все об ращения к регистрам PnP, позволяя считывать и изменять ее конфигурацию. В этом состоянии может находиться лишь одна карта. По окончании конфигурирования карту переводят в режим ожидания ключа, защищая ее конфигурацию.
Для изоляции карт друг от друга имеется специальный режим работы, в который логика PnP переводится с помощью ключа инициализации (Initiation key). Ключ представляет собой предопределенную последовательность записей в порт
Рис. 6.5. Сдвиговый регистр LFSR карты PnP
Протокол изоляции основан на уникальном последовательном идентификаторе (Serial Identifier), хранящемся в памяти каждой карты PnP. Этот идентификатор представляет собой ненулевое 72-битное число, состоящее из двух 32-битных полей и 8-битного контрольного кода, вычисляемого с помощью того же регистра LFSR. Первое 32-битное поле представляет собой идентификатор производителя. Второе поле назначается производителем и уникально для каждого экземпляра всех выпускаемых им карт. Здесь может присутствовать серийный номер, а для адаптера Ethernet это может быть и частью MAC-адреса. Принцип построения последовательного идентификатора гарантирует, что в одной системе не могут встретиться две карты с совпадающими идентификаторами. Однако случалось, что незадачливые производители тиражировали (свои ли?) устройства, копируя всю «начинку», включая и серийные номера. Доступ к идентификатору осуществляется последовательно, начиная с бита 0 нулевого байта идентификатора производителя и заканчивая битом 7 контрольной суммы. Во время передачи идентификатора на вход
Протокол изоляции может быть программно инициирован в любой момент времени посылкой корректного ключа инициализации, переводящего все карты в конфигурационный режим. В этом режиме каждая карта ожидает 72 пары операций чтения порта
Если текущий бит идентификатора карты имеет единичное значение, то ее буфер шины данных в первом чтении пары выводит на шину данных значение 55h. Если текущий бит нулевой, то буфер работает на чтение шины данных и логика карты анализирует ответ других карт — проверяет наличие комбинации «01» в битах D[1:0] (младшие биты числа 55h). В следующем цикле чтения пары карта с единичным битом выводит число AAh, а карта с нулевым текущим битом проверяет наличие комбинации «10».
Если карта, просматривающая вывод данных другими картами, обнаружила корректные коды в обоих циклах чтения пары, она в данной итерации изоляции исключается.
Если карта в текущей паре управляла шиной или карта читала шину, но не обнаружила корректных активных ответов других карт, она сдвигает идентификатор на один бит и готовится к приему следующей пары циклов чтения.
Эта последовательность выполняется для всех 72 бит идентификатора. В конце процесса останется лишь одна карта. Записью в управляющий регистр PnP (индекс 06) ей назначается селективный номер