Аппаратные интерфейсы ПК. Энциклопедия
Шрифт:
Во время протокола изоляции карты не имеют права удлинять шинные циклы с помощью сигнала
Программа конфигурирования проверяет данные, возвращаемые во время всех пар циклов чтения, и побитно собирает прочитанный идентификатор. Если в паре приняты байты 55h и AAh, то соответствующий бит считается единичным, в других случаях он считается нулевым. При приеме идентификатора программа подсчитывает контрольную сумму и сравнивает ее с принятой. Несовпадение контрольной суммы или отсутствие среди принятых байт 55h и AAh указывает на то, что выбранный адрес порта
Программа должна обеспечивать задержку 1 мс после подачи ключа перед первой парой чтений и 250 мкс между парами чтений. Это дает карте время для доступа к информации, которая может храниться и в медленных устройствах энергонезависимой памяти.
Итак, по завершении протокола изоляции программное обеспечение имеет список идентификаторов обнаруженных карт и присвоенных им селективных номеров, сообщенных и самим картам. Далее общение программы с каждой картой идет по ее селективному номеру CSN, фигурирующему в командах PnP. Нулевой CSN присваивается картам по программному или аппаратному сбросу и используется как широковещательный адрес.
Конфигурирование карт выполняется обращениями к регистрам PnP. Обращения к регистрам PnP представляют собой операции записи или чтения портов ввода-вывода по адресам
Каждая карта имеет стандартный набор регистров PnP, причем часть из них относится к карте в целом, а часть — к каждому логическому устройству, входящему в карту. Архитектура PnP поддерживает концепцию многофункциональности, согласно которой каждая карта может включать в себя несколько логических устройств. В любой момент времени в индексном пространстве регистров PnP отображаются стандартные регистры управления картой (см. ниже) и регистры только одного логического устройства (рис. 6.6). Выбор логического устройства, с которым производится общение, осуществляется записью в регистр
Рис. 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 | Чтение этого регистра в состоянии Isolation приводит к побитному анализу идентификатора |
Config Control | 02h, WO | Бит [2] — сброс CSN в 0. Бит [1] — возвращение в состояние Wait for Key. Бит [0] — сброс всех логических устройств и перевод конфигурационных регистров в состояние включения питания, но с сохранением номера CSN. Биты не запоминаются, так что необходимости в их программном сбросе нет |
Wake[CSN] | 03h, WO | Запись в этот регистр приведет карту, у которой номер CSN совпадает с записываемым байтом, к переходу из состояния Sleep в состояние Config (если данные не нулевые). Запись нулевого байта переводит все карты с неназначенным номером CSN в состояние Isolation. Указатель последовательно считываемых байт сбрасывается |
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 | Используются по усмотрению производителя |
Конфигурирование карты начинается с команды
Доступ к регистрам PnP через ключ возможен в любое время функционирования, однако запись в них должна производиться в полной уверенности о знании последствий. Возможно даже переназначение
Стандартные регистры управления логическим устройством (табл. 6.9) используются для активации карт и проверки отсутствия конфликтов на шине ISA в выбранном диапазоне адресов ввода-вывода. Когда включен режим проверки конфликтов, на чтение по любому адресу установленного диапазона портов ввода-вывода логическое устройство отвечает байтом 55h или AAh в зависимости от состояния бита 0 регистра проверки. Естественно, что в рабочем режиме этот «автоответчик» должен быть отключен.
Таблица 6.9. Стандартные регистры управления логическим устройством PnP
Имя | Индекс и тип | Назначение |
---|---|---|
Activate | 30h, RW | Регистр активации. Бит [0] единичным значением разрешает активность логического устройства на шине ISA. Биты [7:1] зарезервированы, при чтении должны возвращать нули. Перед активацией должна быть запрещена проверка диапазона адресов ввода-вывода |
I/O Range Check | 31h, RW | Регистр проверки диапазона адресов ввода-вывода. Биты [7:2] зарезервированы, при чтении должны возвращать нули. Бит [1] — разрешение режима проверки. Бит [0] — управление диагностическим ответом: 0 — ответ AAh, 1 — ответ 55h |
Logical Device Control Резерв | 32h-37h | Зарезервированы на будущее |
Logical Device Control Vendor Defined | 38h-3Fh | Используются по усмотрению производителя |
Оперативные данные конфигурирования доступны через регистры логических устройств. Каждое логическое устройство имеет собственные дескрипторы используемых системных ресурсов.
♦ Обычные 24-битные (4) или 32-битные (4) дескрипторы памяти. Для неиспользуемого дескриптора памяти его поля базового адреса и длины должны быть нулевыми. Одна карта не может одновременно задействовать обычные (24-битные) и 32-битные дескрипторы памяти.
♦ Дескрипторы областей портов ввода-вывода (8). Для неиспользуемого дескриптора портов ввода-вывода его поле базового адреса должно быть нулевым. Размер области адресов определяется в блоке данных, считанном из регистра
♦ Дескрипторы запросов прерываний (2). Неиспользуемый селектор запроса прерывания должен быть нулевым (поскольку нулевой номер запроса недопустим — занят системным таймером). Для линии
♦ Дескрипторы каналов прямого доступа к памяти. Неиспользуемый дескриптор канала прямого доступа должен иметь значение 4 (этот канал недоступен, по скольку задействован для каскадирования контроллеров).
Назначение регистров дескрипторов и их положение в индексном пространстве PnP раскрывает табл. 6.10.
Таблица 6.10. Регистры дескрипторов системных ресурсов логических устройств PnP
Индекс и тип | Назначение |
---|---|
40h-5Fh — обычные (24-битные) дескрипторы памяти | |
40h, RW | Дескриптор памяти 0: базовый адрес памяти, биты [23:16] |
41h, RW | Дескриптор памяти 0: базовый адрес памяти, биты [15:8] |
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 | Дескриптор памяти 1 (аналогично предыдущему) |
4Dh-4Fh | Заполнитель (зарезервировано) |
50h-54h | Дескриптор памяти 2 (аналогично предыдущему) |
55h-57h | Заполнитель (зарезервировано) |
58h-5Ch | Дескриптор памяти 3 (аналогично предыдущему) |
5Dh-5Fh | Заполнитель (зарезервировано) |
60h-6Fh — дескрипторы пространства ввода-вывода | |
60h, RW | Дескриптор портов 0: базовый адрес, биты [15:8]. Если логическое устройство использует только 10-битное декодирование адреса, биты [15:10] могут игнорироваться |
61h, 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 0 |
71h, RW | Тип сигнала запроса прерывания 0. Бит[1] — активный уровень: 1 — высокий, 0 — низкий. Бит[0] — тип: 1 — уровень, 0 — перепад. Если карта поддерживает только один тип сигнала, регистр может быть типа RO |
72h, 73h RW | Селектор и тип запроса прерывания 1 (аналогично предыдущему) |
74h-75h — дескрипторы каналов прямого доступа | |
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-битный дескриптор памяти 0: базовый адрес памяти, биты [7:0] |
7Ah, RW | 32-битный дескриптор памяти 0: управление. Биты [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 |