Шины PCI, USB и FireWire
Шрифт:
Дополнительный модуль ROM BIOS должен иметь заголовок, выровненный по границе 2-килобайтной страницы памяти, формат заголовка ПЗУ иллюстрирует табл. 5.3.
В традиционном заголовке присутствовали только первые три поля, указатели на структуры PCI и ISA PnP ввели позже. Корректным считается модуль, начинающийся с признака AA55h (значения 16$битного слова с учетом порядка байтов) и нулевой суммой (по модулю 256) всех байтов в объявленной области (реальная длина модуля может превышать объявленную, но байт контрольной суммы, естественно, должен входить в объявленную область).
В случае обнаружения корректного модуля POST дальним вызовом (Call Far) вызывает процедуру инициализации модуля, начинающуюся с 3-го адреса заголовка модуля. Ответственность за ее корректность полностью ложится на разработчика. Процедура может переопределять векторы прерываний, обслуживаемых BIOS. Переопределив на себя вектор Bootstrap (Int 19h), можно получить управление при загрузке, что и используется, например, для удаленной загрузки компьютеров через
Процедура инициализации и программная поддержка устройства в ПЗУ должны быть написаны таким образом, чтобы им были безразличны абсолютные адреса, по которым они размещаются в пространстве памяти. На картах расширения, как правило, имеются средства изменения базового адреса, а иногда и размера ПЗУ (джамперы или программно$управляемые переключатели). Это позволяет бесконфликтно разместить модули ПЗУ нескольких установленных карт.
Для содержимого ПЗУ расширения BIOS, установленных на картах PCI, принят стандарт, несколько отличающийся от традиционных дополнительных модулей ROM BIOS. Заголовок ПЗУ соответствует традиционному, но дополнительно имеет указатель на структуру данных PCI (табл. 5.4). Идентификаторы производителя и устройства, а также код класса совпадают с описанными в конфигурационном пространстве устройства PCI. Поскольку шина PCI используется не только в PC, в ПЗУ карты может храниться несколько программных модулей. Каждый модуль начинается со структуры данных, сам модуль следует сразу за структурой.
За ним начинается структура для следующего модуля (если у предыдущего не установлен признак последнего модуля) и т. д. Тип платформы (процессора) указывается в заголовке модуля и при инициализации BIOS активизируется только нужный. Такой механизм позволяет, например, один и тот же графический адаптер устанавливать и в IBM PC, и в Power PC.
Резерв[16]
Применительно к дополнительному ПЗУ карты PCI имеется три параметра, относящихся к размерам областей памяти. Размер ПЗУ определяется чтением конфигурационного пространства. Размер, указанный в байте 2 заголовка, указывает на длину модуля на этапе инициализации. Этот модуль POST загружает в ОЗУ перед тем, как вызвать процедуру инициализации (точка входа со смещением 3). Контрольная сумма, расположенная обычно в конце модуля, обеспечивает нулевую сумму всех байтов. Длина рабочего образа, указанная в структуре данных PCI (слово со смещением 10h), описывает размер области, которая должна постоянно оставаться в памяти в режиме нормального функционирования (она может быть меньше указанной в байте 2 заголовка, поскольку код процедуры инициализации уже не требуется). Эта область также защищается контрольной суммой.
Работа с модулями ПЗУ для карт PCI выполняется в соответствии с моделью DDIM (Device Driver Initialization Model – модель инициализации драйвера устройств). POST определяет наличие ПЗУ по полю Expansion ROM Base Address в конфигурационном пространстве устройства, обнаруженного на карте, и назначает ему адрес в свободном пространстве памяти. После этого программированием регистра команд данного устройства разрешается считывание ПЗУ и в нем ищется сигнатура заголовка AA55h. Когда сигнатура найдена, POST ищет подходящий образ (по типу программного кода и совпадающий по идентификаторам с обнаруженными устройствами PCI) и копирует его в ОЗУ (в область C0000-DFFFFh), оставляя разрешенной запись в эту область. Далее чтение ПЗУ запрещается (записью в поле Expansion ROM Base Address) и вызывается процедура инициализации модуля (по адресу 3). При вызове процедуры POST сообщает номер шины (в регистре AH), номер устройства (AL[7:3]) и номер функции (AL[2:0]), благодаря чему процедура узнает точные координаты (идентификатор на шине PCI) аппаратных средств, которые ей предстоит инициализировать. После отработки инициализации определяется размер области, которую следует оставить в памяти (по байту 2, который может быть модифицирован процедурой инициализации), и для этой области запрещается запись. Если процедура инициализации «урезает» занимаемую память, она должна позаботиться о достоверности контрольной суммы области, описанной байтом 2. Если память освобождается полностью (процедура обнуляет байт 2), то контрольная сумма, естественно, не нужна. Расширение для VGA (определяется по коду класса) обрабатывается особым образом – загружается по адресу C0000h. Процедура инициализации может определить наличие PnP BIOS в системе, проверив значение контрольной структуры PnP по адресу, указанному ей программой POST в регистрах ES: DI, и исполняться в зависимости от обнаруженного системного окружения.
Для более эффективной работы во время инициализации драйвера устройства желательно использовать не только стандартную, но и расширенную память (за пределами первого мегабайта), в то время как POST работает в реальном режиме процессора. Решить эту проблему помогает режим «Big Real Mode», который поддерживают все 32-разрядные процессоры. Специально для предоставления доступа ко всей памяти процедурами инициализации фирмы Phoenics и Intel разработали спецификацию PMM (POST Memory Manager Specification),
ГЛАВА 6Электрический интерфейс и конструктивы для шин PCI и PCI–X
Электрический интерфейс
Для работы на шине PCI используются микросхемы КМОП (CMOS), причем имеются две спецификации: с напряжениями питания интерфейсных схем 5 и 3,3 В. Для них применимы параметры сигналов по постоянному току, приведенные в табл. 6.1. Однако мощность интерфейсных элементов (транзисторов для вентилей) выбрана меньшей, чем требовалось бы для переключения сигналов на высокой частоте (33 или 66 МГц). Здесь используется эффект отражения сигналов, формируемых микросхемами на проводниках шины, от несогласованных концов этих проводников, являющихся для таких высоких частот длинными линиями. На концах проводников шины нет терминаторов, поэтому от них приходящая волна сигнала отражается с тем же знаком и с той же амплитудой. Складываясь с прямым сигналом, обратная волна и обеспечивает нужный приемнику уровень сигнала. Таким образом, передатчик генерирует сигнал, уровень которого до прихода отраженного сигнала находится между уровнями переключения, и достигает требуемого уровня только после прихода отраженной волны. Это накладывает ограничение на физическую протяженность шины: сигнал должен успеть обернуться (дойти до конца и вернуться отраженным) за время, составляющее менее трети периода синхронизации (то есть 10 нс при 33 МГц, 5 нс при 66 МГц).
Линии управляющих сигналов FRAME#, TRDY#, IRDY#, DEVSEL#, STOP#, SERR#, PERR#, LOCK#, INTA#, INTB#, INTC#, INTD#, REQ64# и ACK64# на системной плате подтягиваются к шине питания резисторами (типичные номиналы: 2,7 кОм для версии 5 В и 8,2 кОм для 3,3 В), чтобы не было ложных срабатываний при пассивности всех агентов шины.
Электрические спецификации рассчитаны на два типовых варианта нагрузки одной шины: 2 устройства PCI на системной плате плюс 4 слота или 6 устройств плюс 2 слота. При этом подразумевается, что одно устройство на каждую линию шины PCI дает только единичную КМОП-нагрузку. В слоты могут устанавливаться карты, также дающие только единичную нагрузку. При использовании компонентов и трассировки плат с характеристиками, превосходящими требования спецификации, возможны и иные сочетания числа слотов и устройств. Так, например, часто встречаются системные платы и с пятью слотами на одной физической шине. На длину проводников, а также на топологию расположения элементов и проводников для карт расширения накладываются жесткие ограничения. Длина сигнальных проводников не должна превышать 1,5 дюйма (3,8 см). Из вышесказанного понятно, что изготовление самодельных карт расширения на логических микросхемах средней степени интеграции, как это можно было делать для шин ISA, для PCI невозможно.
Тактовая частота шины определяется по возможностям всех абонентов шины, включая и мосты (и главный мост, входящий в чипсет системной платы). Высокая частота шины PCI 66 МГц может устанавливаться тактовым генератором только при высоком уровне на линии M66EN. Таким образом, установка любой карты, не поддерживающей 66 МГц (с заземленным контактом этой линии), приведет к понижению частоты шины до 33 МГц. Серверные системные платы, на которых имеется несколько шин PCI, позволяют использовать на разных шинах разные частоты (66 и 33 МГц). Так, например, можно на 64-битных слотах использовать частоту 66 МГц, а на 32-битных – 33. Разгон нормальной частоты 33 МГц до 40–50 МГц аппаратно не контролируется, но может приводить к ошибкам работы карт расширения.
Согласно спецификации PCI, устройства должны нормально работать при снижении частоты от номинальной (33 МГц) до нуля. Изменение частоты во время работы устройств допустимо при условии, чтобы все время соблюдались ограничения по минимальной длительности высокого и низкого уровней сигнала CLK. Останавливаться сигнал CLK должен только на низком уровне. После возобновления подачи импульсов CLK устройства должны продолжить работу, как будто остановки синхронизации и не было.
При работе с частотой 66 МГц и выше для снижения электромагнитных помех (EMI) от сигнала фиксированной частоты может применяться расширение спектра сигнала CLK (spread spectrum): неглубокая частотная модуляция с частотой модуляции 30–33 кГц. Если в устройствах для синхронизации используются схемы с ФАПЧ (PLL), то их быстродействие должно быть достаточным для отработки этой модуляции. В спецификации PCI–X диапазоны допустимых изменений тактовой частоты зависят от режима шины (см. табл. 6.5).