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

Спецификация Plug and Play для шины ISA


Аппаратно-программную спецификацию «Plug and Play ISA Specification» выпус­тили компании Intel и Microsoft в 1994 г. Она обеспечивает решение задач изоля­ции карт ISA, программного распределения системных ресурсов, конфигурирования и передачи параметров операционной системе и прикладному ПО. Вышеперечис­ленные задачи решаются для карт PnP, которые могут работать и в окружении так называемых традиционных карт {Legacy Cards). Поскольку описание программ­ной части этой спецификации достаточно объемно и выходит за рамки данной книги, рассмотрим принципы реализации PnP в основном с точки зрения аппа­ратных средств. Конфигурирование в системе PnP состоит из следующих шагов.

1. Производится изоляция одной карты от всех остальных.

2.   Карте назначается номер CSN (Card Select Number — селективный номер кар­ты), фигурально выражаясь, «приделывается ручка» (Assign a handle), за кото­рую ее можно «ухватить» дальнейшим командам PnP.

3.    С карты считываются данные о сконфигурированных и поддерживаемых ре­

сурсах. Эти шаги повторяются для всех карт, после чего выполняются завершающие шаги.

4.   Производится распределение (арбитраж) системных ресурсов, выделяемых

каждой карте. Каждая карта конфигурируется согласно выбранному распределению ресур­сов и активируется (переводится в рабочий режим).

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

Для конфигурирования карт PnP необходимо всего три 8-битных системных порта (табл. 6.7), с которыми процессор может общаться, применяя инструкции ввода-вывода с однобайтной передачей данных. Карты PnP должны использовать 12-бит­ное декодирование адреса ввода-вывода, а не 10-битное, как это принято в тради­ционных картах ISA.

166                                                                                        Глава 6. Шины и карты расширения



Таблица 6.7.

Системные порты ISA PnP

Имя порта

Адрес

Тип доступа

ADDRESS WRITE_DATA READ_DATA

0279П (Printer status port) OA79h (Printer status port + OSOOh) Перемещаемый в диапазоне 0203h-03FFh

Только запись Только запись Только чтение

Порт APDRES5 используется для адресации регистров PnP — в него записывают индекс требуемого регистра (см. ниже пункт «Конфигурирование карт») перед обращением к портам WRITE_DATA и READ_DATA. Этот же порт используется и для записи последовательности кодов ключа инициализации. Выбор адреса для него обусловлен тем, что ни одна разумно сделанная карта расширения не будет пытать­ся задействовать для записи адрес регистра состояния стандартного LPT-порта.

Порты WRITE_DATA и READ_DATA используются для обмена данными с регистрами PnP. Адрес порта WRITE_DATA традиционными картами с 10-битным декодирова­нием будет восприниматься как тот же адрес, что и у предыдущего порта, так что конфликт опять-таки исключен. Перемещаемому адресу порта READ_DATA про­граммное обеспечение PnP во время исполнения протокола изоляции может лег­ко найти бесконфликтное положение. Адрес этого порта сообщается всем картам записью в их управляющий регистр PnP.

Вышеперечисленные Три порта используются только для конфигурирования и управления картами PnP.


Для взаимодействия прикладных программ с функци­ ональными устройствами карты используются иные ресурсы, выделенные карте (порты, области памяти, прерывания и каналы DMA). По включению питания или аппаратному сбросу карты настраиваются на стандартную рабочую конфигура­цию, принятую для них по умолчанию (она может храниться в энергонезависи­мой Памяти или задаваться джамперами). Это обязательно, по крайней мере для устройств, участвующих в загрузке, — ввод, вывод (экран) и собственно загрузоч­ное устройство. Остальные устройства могут быть и логически отключенными от шины, до тех пор пока они не будут сконфигурированы программными средства­ми PnP. Карта PnP должна сообщать обо всех используемых ею ресурсах и, по возможности, предлагать альтернативные конфигурирования. Она обязана подчи­няться конфигурационным командам PnP, включая команду деактивации (логиче­ского отключения от шины); при невозможности принять указанную конфигурацию карта (или ее логическое устройство) должна отключаться. Строгое выполнение данных требований всеми картами делает возможным работу системы PnP на не­приспособленной для этого шине ISA. Непременным условием работоспособно­сти является и уникальность идентификаторов карт (см. ниже).-

В плане PnP каждая карта может находиться в одном из четырех состояний.

¦ Wait for key (ожидание ключа) — состояние нормального функционирования (или отключения) логических устройств. В это состояние устройство входит при включении питания, по аппаратному сбросу и по завершению его конфи­гурирования системой PnP. До подачи ключа в этом состоянии конфигурация карты программными обращениями изменена быть не может.

6.1. Шины ISA, EISA и PC/104

167

¦    
Sleep («спячка») — состояние, в котором карта ожидает пробуждающей коман­

ды Wake [CSN], переводящей ее либо в состояние изоляции, либо в состояние

конфигурирования. При нулевом параметре CSN в команде все карты с нена-

значенным номером CSN переводятся в состояние изоляции.


При ненулевом

параметре CSN в команде карта с совпадающим номером CSN переводится в со­

стояние конфигурирования.

¦     Isolation(изоляция) — картаотвечаеттольконачтениерегистраSerial Isolation

для реализации одноименного протокола (см. далее), с помощью которого ей

назначается уникальный номер CSN. Остальные команды PnP ей недоступны.

¦     Config (конфигурирование) — состояние, в котором карта отвечает на все об­

ращения к регистрам PnP, позволяя считывать и изменять ее конфигурацию.

В этом состоянии может находиться лишь одна карта. По окончании конфигури­

рования карту переводят в режим ожидания ключа, защищая ее конфигурацию.

Протокол изоляции

Для изоляции карт друг от друга имеется специальный режим работы, в который логика PnP переводится с помощью ключа инициализации (Initiation key). Ключ представляет собой предопределенную последовательность записей в порт ADDRE S 5 (279h). Аппаратная логика карты, проверяющая ключ, основана на сдвиговом ре­гистре с обратными связями LFSR (Linear Feedback Shift Register), схема которого приведена на рис. 6.5. Во время проверки ключа на вход С1 подается уровень логи­ческого нуля, а на вход С2 — стробы записи в порт ADDRESS. Логика, не показанная на рисунке, сравнивает код в сдвиговом регистре с текущей записью и при несовпа­дении сбрасывает регистр LFSR в исходное состояние (код 6Ah). В это же состо­яние регистр может быть переведен двумя последовательными записями нулей в порт ADDRESS. Сдвиг в регистре происходит при каждой записи в порт ADDRESS. Если ключ (последовательность из 32 записей требуемых байт) из исходного со­стояния LFSR будет приложен верно, то после последней записи логика карты перейдет в режим конфигурирования (это еще не состояние config) и подготовит­ся к отработке протокола изоляции. Точная последовательность байт ключа в hex-формате выглядит следующим образом:

6А, В5, DA, ED, F6.. FB', 7D, BE, DF, 6F, 37, IB, 0D, 86, СЗ, 61, В0, 58, 2С. 16. 8В. 45, А2, D1, Е8. 74, ЗА, 9D, СЕ, Е7, 73. 39





С1



Выход

контрольной

суммы



Начальное значение:

1         1       0        1        0        1

 Рис. 6.5. Сдвиговый регистр LFSR карты PnP

168 ________________________                              Глава 6. Шины и карты расширения

Протокол изоляции основан на уникальном последовательном идентификаторе (Serial Identifier), хранящемся в памяти каждой карты PnP. Этот идентификатор представляет собой ненулевое 72тбитное число, состоящее из двух 32-битных по­лей и 8-битного контрольного кода, вычисляемого с помощью того же регистра LFSR. Первое 32-битное поле представляет собой идентификатор производите­ля. Второе поле назначается производителем и уникально для каждого экземпляра всех выпускаемых им карт. Здесь может присутствовать серийный номер, а для адаптера Ethernet это может быть и частью МАС-адреса. Принцип построения последовательного идентификатора гарантирует, что в одной системе не могут встретиться две карты с совпадающими идентификаторами. Однако случалось, что незадачливые производители тиражировали (свои ли?) устройства, копируя всю «начинку», включая и серийные номера. Доступ к идентификатору осуществ­ляется последовательно, начиная с бита 0 нулевого байта идентификатора произ­водителя и заканчивая битом 7 контрольной суммы. Во время передачи иденти­фикатора на вход С1 схемы LFSR поступают текущие биты идентификатора, а на вход С2 подаются стробы чтения регистра Serial Isolation (см. ниже). В так­тах передачи контрольной суммы ее биты берутся с выхода сдвигового регистра.

Протокол изоляции может быть программно инициирован в любой момент време­ни посылкой корректного ключа инициализации, переводящего все карты в кон­фигурационный режим. В этом режиме каждая карта ожидает 72 пары операций чтения порта READ_DATA. Ответ каждой карты на эти операции определяется зна­чением очередного бита ее последовательного идентификатора.

Если текущий бит идентификатора карты имеет единичное значение, то ее буфер шины данных в первом чтении пары выводит на шину данных значение 55Ь.


Если текущий бит нулевой, то буфер работает на чтение шины данных и логика карты анализирует ответ других карт — проверяет наличие комбинации «01» в битах D[l:0] (младшие биты числа 55h). В следующем цикле чтения пары карта с еди­ничным битом выводит число AAh, а карта с нулевым текущим битом проверяет наличие комбинации «10».

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

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

Эта последовательность выполняется для всех 72 бит идентификатора. В конце процесса останется лишь одна карта. Записью в управляющий регистр PnP (ин­декс 06) ей назначается селективный номер CSN, по которому она будет использо­ваться в дальнейших операциях. Карта с назначенным номером CSN в следующих итерациях протокола изоляции не участвует (на пары чтений не отвечает).

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

6.1. Шины ISA, EISA и PC/104        ______________________________________ 169

Программа конфигурирования проверяет данные, возвращаемые во время всех пар циклов чтения, и побитно собирает прочитанный идентификатор. Если в паре приняты байты 55h и AAh, то соответствующий бит считается единичным, в дру­гих случаях он считается нулевым. При приеме идентификатора программа подсчи­тывает контрольную сумму и сравнивает ее с принятой. Несовпадение контрольной суммы или отсутствие среди принятых байт 55h и AAh указывает на то, что вы­бранный адрес порта READ_DATA конфликтует с каким-либо устройством. Тогда программа пробует произвести итерацию, переместив адрес порта READ_DATA в допустимом диапазоне адресов.


Если при переборе нескольких возможных ад­ресов не удается считать корректный идентификатор, то принимается решение об отсутствии карт PnP в системе (вообще или с неназначенными номерами CSN). Программа должна обеспечивать задержку 1 мс после подачи ключа перед первой парой чтений и 250 мкс между парами чтений. Это дает карте время для доступа к информации, которая может храниться и в медленных устройствах энергонезави­симой памяти.

Итак, по завершении протокола изоляции программное обеспечение имеет спи­сок идентификаторов обнаруженных карт и присвоенных им селективных номе­ров, сообщенных и самим картам. Далее общение программы с каждой картой идет по ее селективному номеру CSN, фигурирующему в командах PnP. Нулевой CSN присваивается картам по программному или аппаратному сбросу и используется как широковещательный адрес.

Конфигурирование карт

Конфигурирование карт выполняется обращениями к регистрам PnP. Обращения к регистрам PnP представляют собой операции записи или чтения портов вво­да-вывода по адресам WRITE_DATA или READ_DATA соответственно. При этом для указания конкретного регистра PnP используется индекс — номер этого регистра, предварительно записанный в регистр ADDRESS.

Каждая карта имеет стандартный набор регистров PnP, причем часть из них от­носится к карте в целом, а часть — к каждому логическому устройству, входяще­му в карту. Архитектура PnP поддерживает концепцию многофункционально­сти, согласно которой каждая карта может включать в себя несколько логических устройств. В любой момент времени в индексном пространстве регистров PnP ото­бражаются стандартные регистры управления картой (см. ниже) и регистры толь­ко одного логического устройства (рис. 6.6). Выбор логического устройства, с ко­торым производится общение, осуществляется записью в регистр Logical Device Number, входящий в группу управляющих регистров карты.

Все логические устройства карт PnP должны обеспечивать, по крайней мере, мини­мальную функциональность:



¦    регистры ресурсов при чтении должны отражать фактические текущие на­

стройки;

¦    бит активации при чтении должен отражать реальное состояние активности

устройства на шине ISA;

170

Глава 6. Шины и карты расширения

¦ если программа пытается «навязать» карте конфигурацию, не поддерживаемую устройством, это устройство не должно активироваться и, соответственно, при чтении его флаг активации должен быть сброшен.



Рис. 6.6. Конфигурационные регистры PnP (* — определяется разработчиком)

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

Таблица 6.8. Стандартные регистры управления картой PnP

Имя

Индекс и тип    Назначение

Set RD_DATA Port    OOh, WO

Serial Isolation       01 h, RO Config Control        02h,WO



03h,WO

Wake[CSN]



Установка адреса порта для чтения. Биты [7:0]задают значение бит [9:2] адреса порта READ_DATA. Только для записи

Чтение этого регистра в состоянии Isolation приводит к побитному анализу идентификатора

Бит [2] — сброс CSN в 0. Бит [ 1 ] — возвращение в состояние Wait for Key. Бит [0] — сброс всех логических устройств и перевод конфигурационных регистров в состояние включения питания, но с сохранением номера CSN. Биты не запоминаются, так что необходимости в их программном сбросе нет

Запись в этот регистр приведет карту, у которой номер CSN совпадает с записываемым байтом, к переходу из состояния Sleep в состояние Config (если данные не нулевые). Запись нулевого байта переводит все карты с неназначенным номером CSN в состояние Isolation. Указатель последовательно считываемых байт сбрасывается

6.1. Шины ISA, EISA и PC/104

171

Имя

Индекс и тип    Назначение

Resource Data

Status

Card Select Number

Logical Device Number

Card Level Резерв

Card Level, Vendor Defined

04h, RO                 Чтение этого регистра возвращает очередной байт



информации о ресурсах. Перед чтением должен , опрашиваться регистр Status

05h, RO                 Регистр состояния. Единичное значение бита [0]

указывает на возможность чтения очередного байта ресурсов

06h, RW                Регистр хранения селективного номера CSN,

обеспечивающего выбор конкретной карты командой Wake[CSN]. Обнуляется по включению питания и аппаратному сбросу

07h, RW                Выбор текущего логического устройства, к которому

относятся все операции по обмену конфигурационной информацией, проверки диапазона адресов ввода-вывода и активации. Если карта им^еет только одно устройство, регистр допускает только чтение и всегда имеет нулевое значение

08h-1Fh                 Зарезервированы на будущее

20h-2Fh                 Используются по усмотрению производителя

Конфигурирование карты начинается с команды WAKE [CSN] — записи байта CSN в регистр с индексом 3. Эта операция переводит карту с указанным номером CSN в состояние Config (конфигурирование), а остальные карты «засыпают» — пере­ходят в состояние Sleep. Для конфигурируемой карты выполняются операции чтения ее конфигурационной информации (как карты в целом, так и логических устройств) и программирования используемых ресурсов. Программирование каждого логического устройства завершается установкой его бита активации, после чего логическое устройство активизируется на шине ISA (начнет реально использовать назначенные ресурсы). Программирование всей карты завершается переводом ее в состояние Wait for key (ожидание ключа). По окончании кон­фигурирования все карты PnP должны быть переведены в это состояние, и тогда их случайное реконфигурирование будет блокировано 32-байтным ключом. Доступ к регистрам PnP через ключ возможен в любое время функционирования, однако запись в них должна производиться в полной уверенности о знании послед­ствий. Возможно даже переназначение CSN «на ходу», но это требуется лишь в устройствах, допускающих «горячие» включения-выключения (что не привет­ствуется на шине ISA), док-станциях (Docking Stations) для подключения порта­тивных компьютеров и системах управления энергопотреблением.



Размер области адресов определяется в блоке данных, считанном из регистра Resource Data.

¦     Дескрипторы запросов прерываний (2). Неиспользуемый селектор запроса пре­рывания должен быть нулевым (поскольку нулевой номер запроса недопус­тим — занят системным таймером). Для линии IRQ2/9 шины ISA применяют номер 9.

¦     Дескрипторы каналов прямого доступа к памяти. Неиспользуемый дескриптор

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

Назначение регистров дескрипторов и их положение в индексном пространстве PnP раскрывает табл. 6.10.

Таблица 6.10. Регистры дескрипторов системных ресурсов логических устройств PnP

 

Индекс и тип    Назначение

40h-5Fh— обычные (24-битные) дескрипторы памяти

40h, RW           Дескриптор памяти 0: базовый адрес памяти, биты [23:16]

 41h, RW           Дескриптор памяти 0: базовый адрес памяти, биты [15:8]

6.1. Шины ISA, EISA и PC/104_________________________________________ 173

Индекс и тип    Назначение

42h, RW                Дескриптор памяти 0: управление. Бит [1 ] — режим обращения: 0 — 8 бит,

1 — 16 бит. Бит [0] (RO) — способ задания диапазона: 0 — следующее поле воспринимается как маска адреса, 1 —как старший адрес

43h, RW                Дескриптор памяти 0: маска или максимальный адрес области, биты [23:16].

Единичное значение бита в маске указывает, что соответствующий бит адреса участвует в дешифрации адреса области памяти (старшие биты); нулевое — бит адреса используется для адресации в пределах выделенной области)

44h, RW                Дескриптор памяти 0: маска или максимальный адрес области, биты [15:8]

45h-47h                 Заполнитель (зарезервировано)

48h-4Ch                Дескриптор памяти Г (аналогично предыдущему)

4Dh-4Fh                Заполнитель (зарезервировано)

50h-54h                Дескриптор памяти 2 (аналогично предыдущему)

55h-57h                 Заполнитель (зарезервировано)



58h-5Ch                Дескриптор памяти 3 (аналогично предыдущему)

5Dh-5Fh                Заполнитель (зарезервировано)

60h-6Fh—дескрипторы пространства ввода-вывода

60h, RW                Дескриптор портов 0: базовый адрес, биты [15:8]. Если логическое

устройство использует только 10-битное декодирование адреса,

биты [15:10] могут игнорироваться

61 h, RW               Дескриптор портов 0: базовый адрес, биты [7:0]

62h-63h, RW     Дескриптор портов 1 (аналогично предыдущему)

64h-65h,RW     Дескриптор портов 2 (аналогично предыдущему)

66h-67h, RW     Дескриптор портов 3 (аналогично предыдущему)

68h-69h, RW     Дескриптор портов 4 (аналогично предыдущему)

6Ah-6Bh, RW     Дескриптор портов 5 (аналогично предыдущему)

6Ch-6Dh, RW     Дескриптор портов 6 (аналогично предыдущему)

6Eh-6Fh,RW     Дескриптор портов 7 (аналогично предыдущему)

70h-73h —дескрипторы запросов прерываний

70h, RW                Селектор запроса прерывания 0. Биты [3:0] задают номер IRQ для Interrupt О

71 h, RW               Тип сигнала запроса прерывания 0. Бит[1 ] — активный уровень: 1 — высокий,

0 — низкий. Бит[0] — тип: 1 — уровень, 0 — перепад. Если карта поддерживает

только один тип сигнала, регистр может быть типа RO

72h, 73h RW      Селектор и тип запроса прерывания 1 (аналогично предыдущему) 74И-75И —дескрипторы каналов прямого доступа

74h, RW                Селектор 0 канала DMA. Биты [2:0] задают номер используемого канала

(001 — DMA0....111 — DMA7)

75h, RW                Селектор 1 канала DMA (аналогично предыдущему)

76h-A8h — 32-битные дескрипторы памяти

76h, RW                32-битный дескриптор памяти 0: базовый адрес памяти, биты [31:24]

77h, RW                32-битный дескриптор памяти 0: базовый адрес памяти, биты [23:16]

78h, RW                32-битный дескриптор памяти 0: базовый адрес памяти, биты [15:8]

79h, RW                32-битный дескриптор памяти О: базовый адрес памяти, биты [7:0]

продолжение ^

174____________________________                      Глава 6.


Шины и карты расширения


Таблица 6.10 (продолжение) Индекс и тип    Назначение

7Ah, RW               32- битный дескриптор памяти От правление. Биты [7:3] —зарезервированы,

при чтении должны возвращать нули. Биты [2:1]— управление доступом: 00 — 8-битная память, 01 — 16-битная память, 10 — зарезервировано, 11 — 32-битная память. Бит [0] (RO) — способ задания диапазона: 0 — следующее поле воспринимается как размер области, 1 — следующее поле воспринимается как старший адрес

7Bh, RW               32-битный дескриптор памяти 0: размер или старший адрес области,

биты [31:24]

7Ch, RW               32-битный дескриптор памяти 0: размер или старший адрес области,

биты [23:16]

7Dh, RW               32-битный дескриптор памяти 0: размер или старший адрес области,

биты [15:8]

7Eh, RW                32-битный дескриптор памяти 0: размер или старший адрес области,

биты [7:0]

7Fh                       Заполнитель (зарезервировано)

80h-88h                32-битный дескриптор памяти 1

89h-8Fh                Заполнитель (зарезервировано)

90h-98h                32-битный дескриптор памяти 2

99h-9Fh                Заполнитель(зарезервировано)

A0h-A8h              32-битный дескриптор памяти 3

Дескрипторы требуемых ресурсов (данные о возможных конфигурациях логиче­ских устройств) могут быть считаны последовательно байт за байтом из регистра Resource Data и использованы для конфигурирования устройств, которое вы­полняется через регистры, перечисленные в табл. 6.10. Считываться будут данные из карты, находящейся в состоянии config. Если регистр считывается сразу после «победы» карты в протоколе изоляции, считывание начинается с дескриптора версии PnP. Если считывание начинается для карты после ее «пробуждения» ко­мандой Wake [CSN], сначала будут считаны 8 байт уникального идентификатора, затем байт контрольного кода, который будет недействительным, поскольку гене­рируется аппаратно регистром LFSR во время побитного считывания идентифи­катора. Только после этого начнется считывание дескрипторов ресурсов.Поря­док считывания дескрипторов существенен — именно в этом порядке должны программироваться регистры дескрипторов ресурсов карты PnP. Последователь­ность считывания дескрипторов для каждого логического устройства завершает­ся признаком завершения области дескрипторов.

Считав все дескрипторы всех устройств, программа, выполняющая конфигуриро­вание PnP, получает исчерпывающую информацию об устройствах и их потреб­ностях. После этого она пытается найти бесконфликтную конфигурацию для всех устройств, с учетом потребностей установленных устройств, не относящихся к устройствам PnP. В соответствии с принятым планом она конфигурирует все устройства, а те, которым не удается выделить ресурсы, отключает. Данные о при­нятых настройках передаются «заинтересованному» ПО программным способом.

6.2. Шина PCI                                                                                                                   175


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