Для облегчения взаимодействия с устройствами PCI имеются дополнительные функции BIOS, доступные как из реального, так и защищенного режима работы процессора.
Важной частью спецификации PCI является классификация устройств и указание кода класса в его конфигурационном пространстве (3 байта Class Code). Старший байт определяет базовый класс, средний - подкласс, младший - программный интерфейс (если он стандартизован). Код класса позволяет идентифицировать наличие определенных устройств в системе, это может быть сделано с помощью PCI BIOS. Для стандартизованных устройств (например, 01:01:80 - контроллер IDE или 07:00:01 - последовательный порт 16450) «заинтересованная» программа может найти требуемое устройство и выбрать подходящий вариант драйвера. Классификатор определяет организация PCI SIG, он регулярно обновляется на сайте www.pcisig.com. Нулевые значения полей, как правило, дают самые неопределенные описания. Значение подкласса 80h относится к «иным устройствам».
В стандарт заложены возможности автоматического конфигурирования системных ресурсов (пространств памяти и ввода-вывода и линий запроса прерываний).
Поскольку конфигурационное пространство PCI обособлено, в главный мост приходится вводить специальный механизм доступа к нему командами процессора, который «умеет» обращаться только к памяти или вводу-выводу.
Для соединения шины PCI с другими шинами и между собой применяются специальные аппаратные средства-мосты PCI (PCIBridge). Главный мост (Host Bridge) используется для подключения PCI к системной шине (системной памяти и процессору), одноранговый мост (Peer-to-PeerBridge) - для соединения двух шин PCI.
Шина PCI имеет и другие конструктивные исполнения; их спецификации доступны на сайте www.pcisig.org (правда, только для членов данной организации либо за деньги).
Для работы на шине PCI используются микросхемы КМОП (CMOS), причем имеются две спецификации: с напряжениями питания интерфейсных схем 5 и 3,3 В.
Как было сказано выше, шина PCI не предоставляет возможности прямого доступа к памяти с использованием централизованного контроллера в стиле 8237А (как для шины ISA). Для разгрузки центрального процессора от рутинных перекачек данных предлагается прямое управление шиной со стороны устройств, называемых ведущими устройствами шины (PCI Bus Master). Степень интеллектуальности ведущего устройства может быть различной. В простейшем варианте ведущее устройство обеспечивает пересылку блоков данных между устройством и системной памятью (или памятью других устройств) по указанию от CPU. Здесь CPU командами обращения к определенным регистрам ведущего устройства задает начальный адрес, длину блока, направление пересылки и разрешает запуск передачи. После этого пересылка выполняется по готовности (или инициативе) устрой* ства, без отвлечения CPU. Таким образом выполняется прямой доступ к памяти (DMA). Более сложный контроллер DMA может организовывать сцепку буферов при чтении, разбросанную запись и т. п. - возможности, знакомые еще по «продвинутым» контроллерам DMA для ISA/EISA. Более интеллектуальное ведущее устройство, как правило, обладающее собственным микроконтроллером, не ограничивается такой простой работой по указке CPU - оно выполняет обмены уже по программе своего контроллера.
Для совместимости устройств PCI со старым PC-ориентированным ПО и упрощения устройств PCI фирма Intel разработала специальный протокол PC/PCI DMA, изменяющий назначение пары сигналов REQi# и GNTi# для заранее выбранного агента шины, являющегося «проводником» DMA. Этот агент имеет внешние (по отношению к шине PCI) пары сигналов DRQx# и DACKx# с логикой, аналогичной одноименным сигналам ISA (см. п. 6.1), а линии REQi# и GNTi# в процессе запроса управления шиной использует особым образом. Когда агент получает запрос DRQx (один или несколько), он по линии REQi# передает в последовательном коде номера активных линий запросов DRQx, с синхронизацией по линии CLK. В первом такте CLK передается старт-бит - низкий уровень REQi#, во втором - активность запроса DRQO, затем DRQ1 и так далее до DRQ7, после чего сохраняется низкий уровень REQ#. На это сообщение арбитр ответит по линии GNTi# посыл-кой, также начинающейся со старт-бита, за которой последуют три бита кода номера канала, которому дается подтверждение DACK* для передачи данных в этой транзакции. Агент должен сообщать арбитру обо всех изменениях линий запроса, в том числе и о снятии сигналов запроса. Механизм PC/PCI DMA может быть реализован только в чипсете системной платы.
В PC-совместимых компьютерах прерывания от устройств PCI обслуживаются с помощью традиционной связки пары контроллеров 8259А, расположенных на системной плате
Шина PCI является самой высокоскоростной шиной расширения современных ПК, однако и ее реальная пропускная способность, увы, не так уж и высока.
В каждой команде шины указывается адрес данных, передаваемых в первой фазе данных пакета. Адрес для каждой последующей фазы данных пакета увеличивается на 4 (следующее двойное слово), но в командах обращения к памяти порядок может быть иным (см. ниже).
Работа шины контролируется несколькими таймерами, не позволяющими попусту расходовать такты шины и планировать распределение полосы пропускания.
В каждой транзакции (обмене по шине) участвуют два устройства - инициатор (initiator) обмена, он же ведущее (master) устройство, и целевое (target) устройство (ЦУ), оно же ведомое (slave). Шина PCI все транзакции трактует как пакетные: каждая транзакция начинается фазой адреса, за которой может следовать одна или несколько фаз данных. Состав и назначение интерфейсных сигналов шины приведены в табл. 6.11.
Для шины PCI принята иерархия понятий адресации: шина, устройство, функция. Эти понятия фигурируют только при обращении к регистрам конфигурационного пространства (см. п. 6.2.12). К этим регистрам обращаются на этапе конфигурирования - переучета обнаруженных устройств, выделения им непересекающихся ресурсов (областей памяти и пространства ввода-вывода) и назначения номеров аппаратных прерываний. При дальнейшей регулярной работе устройства будут отзываться на обращения по назначенным им адресам памяти и ввода-вывода, доведенным до сведения связанных с ними модулей ПО.
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 или МСА), а также локальная 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). Драйвер также может определить и номер запроса прерывания, который используется устройством.
Аппаратно-программную спецификацию «Plug and Play ISA Specification» выпустили компании Intel и Microsoft в 1994 г. Она обеспечивает решение задач изоляции карт ISA, программного распределения системных ресурсов, конфигурирования и передачи параметров операционной системе и прикладному ПО. Вышеперечисленные задачи решаются для карт PnP, которые могут работать и в окружении так называемых традиционных карт {Legacy Cards). Поскольку описание программной части этой спецификации достаточно объемно и выходит за рамки данной книги, рассмотрим принципы реализации PnP в основном с точки зрения аппаратных средств. Конфигурирование в системе PnP состоит из следующих шагов.