Проблема изоляции устройств решается по разному на разных системных интерфейсах, которые работают в рамках карты PnP. Что такое проблема изоляции? Когда у вас есть несколько однотипных контролеров или несколько контроллеров, доступ к которым возможен с использованием одних и тех же ресурсов. Так вот эти устройства изначально в момент включения питания могут использовать те же самые ресурсы, которые установлены по умолчанию, что приводит к непредсказуемым последствиям, поэтому необходимо до работы с устройством их изолировать друг от друга.
Как эта разводка устройств осуществляется? Алгоритм следующий:
1. Отключить все устройства или перевести в пассивное состояние т.е. у устройства доступны на интерфейсе PCI только лишь конфигурационные регистры (СИ PCI сделан в соответствии со спецификацией PnP). Это отключение производится 2-мя способами: а) по нажатию кнопки ‘Reset’ – этот сигнал заводится на все устройства б) путем выдачи у-ву специального ключа сброса. Каким образом этот соответствующий идентификационный ключ сброса выдается у-ву? Понятно, что для этого необходимо использовать некий регистр в АП памяти или ввода/вывода, причем этот регистр должен быть общим для всех возможных устройств. Этот регистр был выбран и имеет адрес 0279h на СИ PCI. Это регистр статуса порта принтера. Понятно, что этот регистр используется только для чтения. Поэтому этот регистр можно использовать для записи. Этот регистр принадлежит всем остальным у-вам, работающим по спецификации PnP. Мы сюда должны выдать четко оговоренную последовательность из 32-х байт: 6AB5DAEDF6EB…39, после этого все у-ва отключатся. Почему такая длинная последовательность? Чтобы ошибки какого-то программного продукта не вызвали отключение у-в.
2. Необходимо узнать какие сейчас у-ва есть. Выполняется процедура: Алгоритм изоляции. Этот алгоритм очень интересен. Для того чтобы разобраться с алгоритмом изоляции карты нам необходимо нарисовать 2 рисунка.
На СИ PCI конфигурационные регистры сразу видны. На других интерфейсах эти регистры не видны и они должны быть как бы видны, но где взять эту обл. памяти, чтобы их отобразить никто не знает (все у-ва отключены: ничего нет).
Имеется 2 доп. регистра – это регистр адреса, имеется регистр ключа (тот регистр, на который подавая посл-ть байт отключаются у-ва на СИ).
Дешифратор адреса (Адресный селектор) – воспринимает адрес СИ и в случае совпадения этого адреса с тем адресом, который находит контроллер запускает те или иные схемы, которые начинают работать в этом контроллере и обеспечивают взаимодействие с СИ. Адресный селектор выдает 3 сигнала. Первый сигнал — чтение данных (Read Data) поступает в обл. конфигурационных регистров. Этот же сигнал разрешает шинный приемопередатчик на которые через мультиплексор выдаются данные из конфигурационного АП, которые недоступны на интерфейсе, из регистра , номер которого записан в регистре адреса. Второй сигнал – запись данных (Write Data) поступает так же в регистровый файл и используется при записи данных в конфигурационное АП. Третий сигнал – адрес (Address) заводится на регистр ключа и регистр адреса. Регистр ключа может блокировать формирование сигналов Read Data и Write Data и только разрешает формирование сигнала Address. Понятно, что в адресный селектор поступает на интерфейсе ISA 12 разрядов с шины адреса.
В рамках этой стр-ры контролера получается следующее: для того, чтобы перевести контроллер в пассивное состояние надо по адресу 0279h выдать посл-ть 32-х байт данных. В этом случае как бы весь контроллер отключается от СИ и конфиг. АП становится недоступным ни для чтения ни для записи. Спрашивается: да, этот адрес универсальный и общий для всех, но мы должны предусмотреть еще 2 адресе для чтения и записи данных в КАП. В связи с этим нарисуем табличку дополнительных адресов, которые используются для конфигурации или изоляции устройств.
