6.1.4. Регенерация памяти
Динамическая память, применяемая в компьютере в качестве системного ОЗУ, а также, возможно, находящаяся на картах расширения, требует регенерации — периодического обновления (refresh) всех строк матрицы. На системной плате всегда имеется контроллер регенерации памяти, в задачу которого входит регулярный перебор строк памяти с формированием специального цикла регенерации. Каждые 15 мкс контроллер регенерации формирует цикл регенерации (сигнал REFRESH#), диаграмма которого аналогична циклу DMA, но вместо чтения данных выполняется регенерация. В этом цикле считывания данных из микросхем памяти не производится, но стробы строк формируются (подробнее о методах регенерации см. в книге «Аппаратные средства IBM PC. Энциклопедия»). На шине ISA контроллер регенерации работает как нулевой канал DMA (в старых машинах он непосредственно и использовался). Каждые 15 мкс контроллер регенерации формирует сигнал REFRESH#, во время действия которого устанавливается AEN=H и BALE=H, формируется сигнал MEMR#, а на линиях SA[7:0] устанавливается адрес текущей регенерируемой строки. Диаграмма цикла регенерации аналогична циклу DMA, но сигнал REFRESH# указывает на то, что вместо чтения данных выполняется регенерация.
Если какое-либо устройство захватывает управление шиной более чем на 15 мкс, оно должно позаботиться о регенерации памяти. Для этого раз в 15 мкс оно должно вырабатывать сигнал REFRESH#, «отпуская» все адресные и управляющие сигналы. При этом контроллер шины, расположенный на системной плате и отвечающий за регенерацию памяти, сформирует очередной адрес на линиях SA[7:0] и сигнал MEMR#, а также установит AEN=0 и BALE=1 на все время цикла регенерации. Если устройство, надолго захватившее шину, сигнал регенерации не формирует, то запросы регенерации накапливаются в контроллере регенерации, и, как только управление будет возвращено, эти запросы будут немедленно удовлетворены. Однако число безнаказанно пропущенных запросов ограничено свойствами динамической памяти, и очередь запросов в контроллере регенерации может ограничиваться, например, четырьмя.
6.1.5. Прерывания
На шине ISA имеются линии запросов маскируемых и немаскируемых аппаратных прерываний. Линии запросов IRQ2-IRQ7 поступают на входы первичного контроллера прерываний, IRQ9-IRQ15 — на входы вторичного. Контакт B4 (IRQ2/9) запрос IRQ2 вырабатывал только у машин PX/XT. На всех современных машинах (класса AT) он является запросом IRQ9, хотя на многих адаптерах (всех 8-битных) он обозначается как IRQ2. Приоритеты у запросов убывают по порядку IRQ9…IRQ15 и далее IRQ3…IRQ7. Запросы от конкретных линий могут быть замаскированы записью в регистры контроллера (см. п. 12.4), общий запрет/разрешение осуществляется манипулированием флагом разрешения прерываний (IF) процессора. Устройство может использовать одну или несколько линий запроса прерывания. На используемой линии запроса устройство в покое должно формировать низкий уровень сигнала, а при возникновении условия прерывания устанавливать на нем высокий уровень запроса. Неиспользуемые линии должны быть электрически отключены от шины или же их выходные формирователи должны переводиться в третье состояние. Переход из низкого в высокий уровень является сигналом для контроллера прерываний на формирование запроса прерывания к процессору. Устройство должно удерживать высокий уровень запроса до тех пор, пока к нему не обратится программа-обработчик прерывания, что будет означать не только обнаружение, но и правильную идентификацию источника запроса прерывания. Если запрос снят преждевременно, идентификация будет некорректной. Детально механизм обслуживания прерываний рассмотрен в п. 12.4.
Способ подачи сигнала прерывания, принятый в ISA, — чувствительность к уровню, причем к высокому, — имеет меньшую помехозащищенность, чем срабатывание по отрицательному перепаду, и отрезает путь к нормальному разделению (совместному использованию) линий запросов.
Линия IOCHK# позволяет вызывать EIC) системного порта 061h, а признаком того, что прерывание NMI вызвано сигналом IOCHK#, является единичное значение бита 6 (IOCHK) того же порта.
6.1.6. Шина PC/104
Шина PC/104, предназначенная для построения относительно несложных встраиваемых контроллеров, логически эквивалентна ISA. В ее названии 104 — число контактов коннектора, на который выводятся сигналы шины ISA. От ISA шина PC/104 отличается только типом коннектора и нагрузочными характеристиками линий: поскольку протяженность линий значительно сократилась, сигнальные цепи могут быть слаботочными. Формирователи сигналов MEMCS16#, IOCS16#, MASTER# и 0WS# должны обеспечивать вытекающий ток до 20 мА, для остальных достаточно 4 мА.
Вид платы PC/104 приведен на рис. 6.4, назначение контактов дано в табл. 6.5 и 6.6. Плата компьютера с шиной PC/104 имеет разъемы-
Рис. 6.4. Компьютер с шиной PC/104:
Таблица 6.5. Разъем J1/P1 шины PC-104
| РЯДА | № | Ряд В |
|---|---|---|
| IOCHK# | 1 | GND |
| SD7 | 2 | RESET |
| SD6 | 3 | +5 В |
| SD5 | 4 | IRQ2/9 |
| SD4 | 5 | –5 В |
| SD3 | 6 | DRQ2 |
| SD2 | 7 | –12 В |
| SD1 | 8 | 0WS# |
| SD0 | 9 | +12 В |
| IOCHRDY | 10 | Ключ |
| AEN | 11 | SMEMW# |
| SA19 | 12 | SMEMR# |
| SA18 | 13 | IOWR# |
| SA17 | 14 | IORD# |
| SA16 | 15 | DACK3# |
| SA15 | 16 | DRQ3 |
| SAM | 17 | DACK1# |
| SA13 | 18 | DRQ1 |
| SA12 | 19 | REFRESH* |
| SA11 | 20 | BCLK |
| SA10 | 21 | IRQ7 |
| SA9 | 22 | IRQ6 |
| SA8 | 23 | IRQ5 |
| SA7 | 24 | IRQ4 |
| SA6 | 25 | IRQ3 |
| SA5 | 26 | DACK2# |
| SA4 | 27 | TC |
| SA3 | 28 | BALE |
| SA2 | 29 | +5 В |
| SA1 | 30 | OSC |
| SA0 | 31 | GND |
| GND | 32 | GND |
Таблица 6.6. Разъем J2/P2 шины PC-104
| Ряд C | № | Ряд D |
| GND | 0 | GND |
| SBHE | 1 | MEMCS16# |
| LA23 | 2 | IOCS16# |
| LA22 | 3 | IRQ10 |
| LA21 | 4 | IRQ11 |
| LA20 | 5 | IRQ12 |
| LA19 | 6 | IRQ15 |
| LA18 | 7 | IRQ14 |
| LA17 | 8 | DACK0# |
| MEMR# | 9 | DRQ0 |
| MEMW# | 10 | DACK5# |
| SD8 | 11 | DRQ5 |
| SD9 | 12 | DACK6# |
| SD10 | 13 | DRQ6 |
| SD11 | 14 | DACK7# |
| SD12 | 15 | DRQ7 |
| SD13 | 16 | +5 В |
| SD14 | 17 | MASTER# |
| SD15 | 18 | GND |
| Ключ | 19 | GND |
С широким использованием процессоров Pentium и следующих моделей в модуль ввели еще и шину PCI, так появился стандарт PC/104-Plus (именно такая карта показана на рис. 6.4). Трехрядный коннектор PCI имеет метрический шаг контактов 2 мм. Платы микрокомпьютеров с шинами PC/104 могут иметь и краевые разъемы ISA, PCI или комбинированный; с их помощью контроллеры подключаются к пассивной кросс-плате, в которую устанавливаются карты расширения (ISA, PCI) обычного (PC) конструктива.
6.1.7. Конфигурирование интерфейсных карт ISA и EISA
Как было указано выше, всем устройствам-абонентам шин ISA и EISA должны назначаться свои системные ресурсы — области адресов в пространствах памяти и ввода-вывода, линии запросов прерываний и каналы прямого доступа к памяти, причем устройства не должны конфликтовать по ресурсам. Иными словами, все устройства, подключенные к шине, требуется должным образом
Задача конфигурирования осложняется из-за отсутствия общего механизма автоматической передачи установленных параметров прикладному и системному ПО. Конфигурирование старых карт расширения выполняется переключением джамперов, затем установленные параметры заносятся в конфигурационные файлы.
Позже на картах ISA стали применять микросхемы энергонезависимой памяти (как правило, EEPROM), хранящей настройки. С такими картами поставляются утилиты настройки, позволяющие в диалоговом режиме задать требуемые параметры. Отсюда их названия:
Идеальными условиями для программного конфигурирования, и тем более автоматического (без вмешательства пользователя), является изоляция карты от всех остальных (на время конфигурирования). Тогда ПО конфигурирования сможет вести с картой диалог, на который не повлияет присутствие других устройств. Для автоматического конфигурирования необходимо также обеспечить единый метод двустороннего обмена конфигурационной информацией между картой и конфигурационным ПО. Возможность изоляции карт при конфигурировании заложена в шины MCA, PCI и EISA, но в ISA такой возможности нет. В шине EISA можно выборочно управлять сигналом AEN (разрешающим дешифрацию адресов портов ввода-вывода) для каждого слота, причем эта возможность сохраняется и для карт ISA, установленных в слот EISA. В машинах с EISA имеется специальная энергонезависимая память конфигурирования слотов, с которой взаимодействует утилита конфигурирования EQU (EISA Configuration Utility); эта память и утилита могут использоваться и при установке карт ISA в машину EISA. Для шины ISA система автоматического конфигурирования — ISA PnP — была разработана лишь спустя десяток лет после начала массового выпуска компьютеров и карт расширения. Также были расширены функции BIOS — появилась спецификация PnP BIOS. Полная поддержка автоматического конфигурирования карт ISA требует наличия PnP BIOS, карт и/или модулей ISA PnP на системной плате, а также ОС с поддержкой PnP или же специализированного ПО.
6.1.8. Спецификация Plug and Play для шины ISA
Аппаратно-программную спецификацию «Plug and Play ISA Specification» выпустили компании Intel и Microsoft в 1994 г. Она обеспечивает решение задач изоляции карт ISA, программного распределения системных ресурсов, конфигурирования и передачи параметров операционной системе и прикладному ПО. Вышеперечисленные задачи решаются для карт PnP, которые могут работать и в окружении так называемых
Конфигурирование в системе PnP состоит из следующих шагов.
1. Производится изоляция одной карты от всех остальных.
2. Карте назначается номер
3. С карты считываются данные о сконфигурированных и поддерживаемых ресурсах. Эти шаги повторяются для всех карт, после чего выполняются завершающие шаги.
4. Производится распределение (арбитраж) системных ресурсов, выделяемых каждой карте.
5. Каждая карта конфигурируется согласно выбранному распределению ресурсов и активируется (переводится в рабочий режим).
Все шаги конфигурирования выполняет процедура POST (если BIOS имеет поддержку PnP) или операционная система при загрузке. PnP BIOS может ограничиться конфигурированием и активацией только устройств, участвующих в загрузке, оставляя конфигурирование и активацию дополнительных устройств операционной системе. BIOS без поддержки PnP может использовать необходимые для загрузки устройства, сконфигурированные с параметрами по умолчанию, а изоляцией карт, сбором информации и конфигурированием займется операционная система при загрузке. Вариантов много, но все они опираются на единые методы взаимодействия с картами ISA PnP. Конфигурирование выполняется в специальном состоянии плат, в которое их всех можно программно перевести с помощью специального ключа инициализации, защищающего конфигурационную информацию от случайного разрушения.
Для конфигурирования карт PnP необходимо всего три 8-битных
Таблица 6.7. Системные порты ISA PnP
| Имя порта | Адрес | Тип доступа |
|---|---|---|
| ADDRESS | 0279h ( | Только запись |
| WRITE_DATA | 0A79h ( | Только запись |
| READ_DATA | Перемещаемый в диапазоне 0203h-03FFh | Только чтение |
Порт ADDRESS используется для адресации регистров 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 каждая карта может находиться в одном из четырех состояний.
♦
♦ Wake[CSN], переводящей ее либо в состояние изоляции, либо в состояние конфигурирования. При нулевом параметре CSN в команде все карты с неназначенным номером CSN переводятся в состояние изоляции. При ненулевом параметре CSN в команде карта с совпадающим номером CSN переводится в состояние конфигурирования.
♦ Serial Isolation для реализации одноименного протокола (см. далее), с помощью которого ей назначается уникальный номер CSN. Остальные команды PnP ей недоступны.
♦
Для изоляции карт друг от друга имеется специальный режим работы, в который логика PnP переводится с помощью ADDRESS (279h). Аппаратная логика карты, проверяющая ключ, основана на сдвиговом регистре с обратными связями ADDRESS. Логика, не показанная на рисунке, сравнивает код в сдвиговом регистре с текущей записью и при несовпадении сбрасывает регистр LFSR в исходное состояние (код 6Ah). В это же состояние регистр может быть переведен двумя последовательными записями нулей в порт ADDRESS. Сдвиг в регистре происходит при каждой записи в порт ADDRESS. Если ключ (последовательность из 32 записей требуемых байт) из исходного состояния LFSR будет приложен верно, то после последней записи логика карты перейдет в режим конфигурирования (это еще не состояние
6А, B5, DA, ED, F6, FB, 7D, BE, DF, 6F, 37, 1B, 0D, 86, C3, 61, B0, 58,
2С, 16, 8В, 45, A2, D1, E8, 74, 3A, 9D, СЕ, E7, 73, 39
Рис. 6.5. Сдвиговый регистр LFSR карты PnP
Протокол изоляции основан на уникальном C1 схемы LFSR поступают текущие биты идентификатора, а на вход C2 подаются стробы чтения регистра Serial Isolation (см. ниже). В тактах передачи контрольной суммы ее биты берутся с выхода сдвигового регистра.
Протокол изоляции может быть программно инициирован в любой момент времени посылкой корректного ключа инициализации, переводящего все карты в конфигурационный режим. В этом режиме каждая карта ожидает 72 пары операций чтения порта READ_DATA. Ответ каждой карты на эти операции определяется значением очередного бита ее последовательного идентификатора.
Если текущий бит идентификатора карты имеет единичное значение, то ее буфер шины данных в первом чтении пары выводит на шину данных значение 55h. Если текущий бит нулевой, то буфер работает на
Если карта, просматривающая вывод данных другими картами, обнаружила корректные коды в обоих циклах чтения пары, она в данной итерации изоляции исключается.
Если карта в текущей паре управляла шиной или карта читала шину, но не обнаружила корректных активных ответов других карт, она сдвигает идентификатор на один бит и готовится к приему следующей пары циклов чтения.
Эта последовательность выполняется для всех 72 бит идентификатора. В конце процесса останется лишь одна карта. Записью в управляющий регистр PnP (индекс 06) ей назначается селективный номер CSN, по которому она будет использоваться в дальнейших операциях. Карта с назначенным номером CSN в следующих итерациях протокола изоляции не участвует (на пары чтений не отвечает).
Во время протокола изоляции карты не имеют права удлинять шинные циклы с помощью сигнала IOCHRDY, поскольку это привело бы к неопределенности результатов наблюдения за «соседями». В других режимах этот сигнал может быть использован без особых ограничений.
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, входящий в группу управляющих регистров карты.
Рис. 6.6. Конфигурационные регистры PnP (* — определяется разработчиком)
Все логические устройства карт PnP должны обеспечивать, по крайней мере, минимальную функциональность:
♦ регистры ресурсов при чтении должны отражать фактические текущие на стройки;
♦ бит активации при чтении должен отражать реальное состояние активности устройства на шине ISA;
♦ если программа пытается «навязать» карте конфигурацию, не поддерживаемую устройством, это устройство не должно активироваться и, соответственно, при чтении его флаг активации должен быть сброшен.
Для адресации к карте и ее логическим устройствам, а также для чтения конфигурационной информации используются стандартные регистры управления картой (табл. 6.8).
Таблица 6.8. Стандартные регистры управления картой PnP
| Имя | Индекс и тип | Назначение |
|---|---|---|
| Set RD_DATA Port | 00H, WO | Установка адреса порта для чтения. Биты [7:0] задают значение бит [9:2] адреса порта READ_DATA. Только для записи |
| Serial Isolation | 01h, RO | Чтение этого регистра в состоянии |
| Config Control | 02h, WO | Бит [2] — сброс CSN в 0. Бит [1] — возвращение в состояние |
| Wake[CSN] | 03h, WO | Запись в этот регистр приведет карту, у которой номер CSN совпадает с записываемым байтом, к переходу из состояния |
| Resource Data | 04h, RO | Чтение этого регистра возвращает очередной байт информации о ресурсах. Перед чтением должен опрашиваться регистр Status |
| Status | 05h, RO | Регистр состояния. Единичное значение бита [0] указывает на возможность чтения очередного байта ресурсов |
| Card Select Number | 06h, RW | Регистр хранения селективного номера CSN, обеспечивающего выбор конкретной карты командой Wake[CSN]. Обнуляется по включению питания и аппаратному сбросу |
| Logical Device Number | 07h, RW | Выбор текущего логического устройства, к которому относятся все операции по обмену конфигурационной информацией, проверки диапазона адресов ввода-вывода и активации. Если карта имеет только одно устройство, регистр допускает только чтение и всегда имеет нулевое значение |
| Card Level Резерв | 08h-1Fh | Зарезервированы на будущее |
| Card Level, Vendor Defined | 20h-2Fh | Используются по усмотрению производителя |
Конфигурирование карты начинается с команды WAKE[CSN] — записи байта CSN в регистр с индексом 3. Эта операция переводит карту с указанным номером CSN в состояние
Доступ к регистрам PnP через ключ возможен в любое время функционирования, однако запись в них должна производиться в полной уверенности о знании последствий. Возможно даже переназначение CSN «на ходу», но это требуется лишь в устройствах, допускающих «горячие» включения-выключения (что не приветствуется на шине ISA), док-станциях (
Стандартные регистры управления логическим устройством (табл. 6.9) используются для активации карт и проверки отсутствия конфликтов на шине ISA в выбранном диапазоне адресов ввода-вывода. Когда включен режим проверки конфликтов, на чтение по любому адресу установленного диапазона портов ввода-вывода логическое устройство отвечает байтом 55h или AAh в зависимости от состояния бита 0 регистра проверки. Естественно, что в рабочем режиме этот «автоответчик» должен быть отключен.
Таблица 6.9. Стандартные регистры управления логическим устройством PnP
| Имя | Индекс и тип | Назначение |
|---|---|---|
| Activate | 30h, RW | |
| I/O Range Check | 31h, RW | |
| Logical Device Control Резерв | 32h-37h | Зарезервированы на будущее |
| Logical Device Control Vendor Defined | 38h-3Fh | Используются по усмотрению производителя |
Оперативные данные конфигурирования доступны через регистры логических устройств. Каждое логическое устройство имеет собственные дескрипторы используемых системных ресурсов.
♦
♦ Resource Data.
♦ IRQ2/9 шины ISA применяют номер 9.
♦
Назначение регистров дескрипторов и их положение в индексном пространстве PnP раскрывает табл. 6.10.
Таблица 6.10. Регистры дескрипторов системных ресурсов логических устройств PnP
| Индекс и тип | Назначение |
|---|---|
| 40h-5Fh — обычные (24-битные) дескрипторы памяти | |
| 40h, RW | |
| 41h, RW | |
| 42h, RW | |
| 43h, RW | |
| 44h, RW | |
| 45h-47h | |
| 48h-4Ch | |
| 4Dh-4Fh | |
| 50h-54h | |
| 55h-57h | |
| 58h-5Ch | |
| 5Dh-5Fh | |
| 60h-6Fh — дескрипторы пространства ввода-вывода | |
| 60h, RW | |
| 61h, RW | |
| 62h-63h, RW | |
| 64h-65h, RW | |
| 66h-67h, RW | |
| 68h-69h, RW | |
| 6Ah-6Bh, RW | |
| 6Ch-6Dh, RW | |
| 6Eh-6Fh, RW | |
| 70h-73h — дескрипторы запросов прерываний | |
| 70h, RW | |
| 71h, RW | |
| 72h, 73h RW | |
| 74h-75h — дескрипторы каналов прямого доступа | |
| 74h, RW | |
| 75h, RW | |
| 76h-A8h — 32-битные дескрипторы памяти | |
| 76h, RW | |
| 77h, RW | |
| 78h, RW | |
| 79h, RW | |
| 7Ah, RW | |
| 7Bh, RW | |
| 7Ch, RW | |
| 7Dh, RW | |
| 7Eh, RW | |
| 7Fh | |
| 80h-88h | |
| 89h-8Fh | |
| 90h-98h | |
| 99h-9Fh | |
| A0h-A8h | |
Дескрипторы требуемых ресурсов (данные о возможных конфигурациях логических устройств) могут быть считаны последовательно байт за байтом из регистра Resource Data и использованы для конфигурирования устройств, которое выполняется через регистры, перечисленные в табл. 6.10. Считываться будут данные из карты, находящейся в состоянии Wake[CSN], сначала будут считаны 8 байт уникального идентификатора, затем байт контрольного кода, который будет недействительным, поскольку генерируется аппаратно регистром LFSR во время побитного считывания идентификатора. Только после этого начнется считывание дескрипторов ресурсов. Порядок считывания дескрипторов существенен — именно в этом порядке должны программироваться регистры дескрипторов ресурсов карты PnP. Последовательность считывания дескрипторов для каждого логического устройства завершается признаком завершения области дескрипторов.
Считав все дескрипторы всех устройств, программа, выполняющая конфигурирование PnP, получает исчерпывающую информацию об устройствах и их потребностях. После этого она пытается найти бесконфликтную конфигурацию для всех устройств, с учетом потребностей установленных устройств, не относящихся к устройствам PnP. В соответствии с принятым планом она конфигурирует все устройства, а те, которым не удается выделить ресурсы, отключает. Данные о принятых настройках передаются «заинтересованному» ПО программным способом.
6.2. Шина PCI
PCI (Peripheral Component Interconnect) local bus — шина соединения периферийных компонентов является основной шиной расширения современных компьютеров. Она разрабатывалась в расчете на Pentium, но хорошо сочеталась и с процессорами 486. Сейчас PCI является четко стандартизованной высокопроизводительной и надежной шиной расширения. Первая версия PCI 1.0 появилась в 1992 г. В PCI 2.0 (1993 г.) введена спецификация коннекторов и карт расширения. В версии 2.1 (1995 г.) введена частота 66 МГц. В настоящее время действует спецификация PCI 2.2 (декабрь 1998 г.), которая уточняет и разъясняет некоторые положения предшествующей версии 2.1. Данное описание основано на тексте стандарта «PCI Local Bus Specification. Revision 2.2» от 18.12.1998, опубликованного организацией PCI SIG (Special Interest Group).
Поначалу шина PCI вводилась как пристройка (mezzanine bus) к системам с основной шиной ISA, став позже центральной шиной: она соединяется с системной шиной процессора высокопроизводительным мостом («северным»), входящим в состав чипсета системной платы. Остальные шины расширения ввода-вывода (ISA/EISA или MCA), а также локальная ISA-подобная шина X-BUS и интерфейс LPC, к которым подключаются микросхемы системной платы (ROM BIOS, контроллеры прерываний, клавиатуры, DMA, портов СОМ и LPT, НГМД и прочие «мелочи»), подключаются к шине PCI через «южный» мост. В современных системных платах с хабовой архитектурой шину PCI отодвинули на периферию, не ущемляя ее в мощности канала связи с процессором и памятью, но и не нагружая транзитным трафиком устройств других шин.
Шина является синхронной — фиксация всех сигналов выполняется по положительному перепаду (фронту) сигнала CLK. Номинальной частотой синхронизации считается 33 МГц, при необходимости частота может быть понижена (на машинах с процессором 486 использовали частоты 20–33 МГц). Во многих случаях частоту успешно разгоняют и до 41,5 МГц (половина типовой частоты системной шины 83 МГц). Начиная с версии 2.1 допускается повышение частоты до 66 МГц при согласии всех устройств на шине.
Номинальная разрядность шины данных — 32 бита, спецификация определяет и расширение разрядности до 64 бит. При частоте шины 33 МГц теоретическая пропускная способность достигает 132 Мбайт/с для 32-битной шины и 264 Мбайт/с для 64-битной; при частоте синхронизации 66 МГц — 264 и 528 соответственно. Однако эти пиковые значения достигаются лишь во время передачи пакета, а из-за протокольных накладных расходов реальная средняя суммарная (для всех задатчиков) пропускная способность шины оказывается ниже.
С устройствами PCI процессор может взаимодействовать командами обращения к памяти и портам ввода-вывода, адресованным к областям, выделенным каждому такому устройству при конфигурировании. Устройства могут вырабатывать запросы маскируемых и немаскируемых прерываний. Понятия каналов DMA для шины PCI нет, но агент шины может сам выступать в роли задатчика, поддерживая высокопроизводительный обмен с памятью (и не только), не занимая ресурсов центрального процессора. Таким образом, к примеру, может быть реализован обмен в режиме DMA с устройствами AT А, подключенными к контролеру PCI IDE (см. п. 9.2.1). Спецификация PCI требует от устройств способности перемещать все занимаемые ресурсы в пределах доступного пространства адресации. Это позволяет обеспечивать бесконфликтное распределение ресурсов для многих устройств (функций). Для управления устройствами рекомендуется вместо портов ввода-вывода по возможности использовать ячейки памяти. Одно и то же функциональное устройство может быть сконфигурировано по-разному, отображая свои регистры либо на пространство памяти, либо на пространство ввода-вывода. Драйвер может определить текущую настройку, прочитав содержимое регистра базового адреса устройства, — признаком пространства ввода-вывода будет единичное значение бита 0 (см. п. 6.2.12). Драйвер также может определить и номер запроса прерывания, который используется устройством.
6.2.1. Адресация устройств PCI
Для шины PCI принята иерархия понятий адресации: шина, устройство, функция. Эти понятия фигурируют только при обращении к регистрам конфигурационного пространства (см. п. 6.2.12). К этим регистрам обращаются на этапе конфигурирования — переучета обнаруженных устройств, выделения им непересекающихся ресурсов (областей памяти и пространства ввода-вывода) и назначения номеров аппаратных прерываний. При дальнейшей регулярной работе устройства будут отзываться на обращения по назначенным им адресам памяти и ввода-вывода, доведенным до сведения связанных с ними модулей ПО. Эти адреса принимаются с шины AD в начале каждой транзакции. Для доступа к конфигурационному пространству используются отдельные линии IDSEL.
IDSEL, принадлежащую этой шине. Устройство может быть многофункциональным, то есть состоять из множества (от 1 до 8) так называемых