NexxDigital - компьютеры и операционные системы

POST карты не первое десятилетие используются для диагностики «железных» неисправностей компьютеров и материнских плат всевозможных форм-факторов. На данный момент этих карт создано очень много, практически для всех возможных ситуаций. Статья рассказывает о том, что такое POST карты и для чего их используют, как они работают, какие бывают и чем друг от друга отличаются.

POST

После нажатия кнопки включения компьютера BIOS проводит поэтапную проверку и инициализацию всех элементов аппаратной части компьютера. Называется этот процесс: POST (англ. Power-On Self-Test – самотестирование после включения). Не только компьютеры, но и большинство современных электронных устройств имеют схожие системы.

BIOS сообщает статус (или результат) прохождения POST несколькими способами:

1. Вывод сообщений на экран . Самый дружественный и информативный способ. По сути, доступен только после успешного или почти успешного прохождения самотестирования. Отсутствие какой-либо информации на экране говорит о серьезных неисправностях базовых компонентов (материнская плата, процессор, память, видеоадаптер и т.д.). Диагностика ошибок возможна в основном только для периферийных устройств (накопители, клава и др.).

2. Звуковые сигналы . Наверное, все слышали короткий «биип» при включении компьютера – в большинстве BIOS это означает прохождение теста без ошибок и готовность к загрузке ОС. Другие варианты сигналов могут говорить об определенных проблемах с железом. Эти коды «азбуки Морзе» различаются у разных производителей и даже разных версий BIOS. Найти их обычно можно в книжке к материнке или соответствующих онлайн справочниках.

3. POST коды . В ходе каждого этапа процесса самотестирования BIOS отправляет текущий код на порт 80h (иногда 81h или другие), и если возникает ошибка, там остается или код операции, на которой произошел сбой, или код последней успешной операции. Считав этот код, можно определить на каком этапе произошла ошибка, и что могло ее вызвать. Это единственный из всех перечисленных способов, который позволяет идентифицировать проблемы на материнской плате, которая не подает видимых признаков жизни. По этой причине, он обычно используется для диагностики и ремонта непосредственно материнских плат.

Если первые два способа диагностики не требуют специального оборудования, разве что монитор и подключенный к материнской плате динамик (бывает, что его там нет), то для третьего способа вам понадобиться собственно POST карта.

Где смотреть значения POST кодов и звуковых сигналов?

    Наиболее подробно для всех распространенных версий BIOS на русском и с расшифровкой они описаны на сайте IC Book . Но информации столько, что немудрено заблудиться, удобней скачать оттуда готовый PDF документ со списком кодов (щелкнув в нем по нужному коду попадаешь на страницу с подробной расшифровкой).

  1. Также рекомендую англоязычный ресурс PostCodeMaster – там собрано еще больше POST кодов и звуковых сигналов BIOS разных производителей (есть довольно редкие, плюс немного по конкретным материнкам, в том числе серверным).

POST карты

Основная задача любой POST карты – это считать и отобразить текущий POST код. Считать его можно несколькими способами: по шинам ISA, PCI, LPC или через LPT порт. Есть и другие, более экзотические варианты (о них чуть позже). Кроме, собственно, отображения кода, хорошие POST карты имеют дополнительные диагностические возможности (индикаторы, режимы тестирования, встречаются даже со встроенным видеоадаптером).

Некоторые материнские платы (обычно Premium сегмента) имеют встроенный индикатор POST кодов.


Раньше POST карты многие умельцы делали вручную, но сейчас этим совершенно нет смысла заниматься, за текстолит и компоненты больше отдадите, чем стоит обычная карточка. Если только очень хочется…

ISA

Первыми POST картами были карты для шины ISA , существовавшей с 1981 по 199х годы. Используется она даже сейчас (хоть и весьма редко), в основном в промышленном и военном секторе – там, где осталось оборудование для этой шины. Продаются и POST карты для нее, как в отдельном исполнении (только ISA), так и комбайны ISA + PCI.


Если вы не занимаетесь ремонтом 486, то иметь POST карту ISA совершенно не обязательно.

PCI

Следующей массовой компьютерной шиной стала PCI . Сейчас это самая распространенная шина для настольных компьютеров. Естественно, для нее есть и POST карты всех возможных форм, размеров и функций. Самую простейшую , с обычным сегментным индикатором, можно купить за 2-3 бакса на любом Ebay, Ali и им подобным.


В принципе, такая карта со своей базовой задачей вполне справляется – POST код вы узнаете. Но для профессиональной работы этого мало. Полезно иметь индикаторы основных напряжений (обычно: +5, +3.3, +12, -12, +3.3 Standby) и индикаторы сигналов шины (из самых базовых: CLK, RST#, FRAME#, IRDY#). Важно иметь возможность переключения порта, на котором карта «слушает» коды POST (не только стандартный 80h). Бывают и другие «фишки», отсюда и такой «навороченный» вид у продвинутых карточек.


Обычно POST карты устанавливаются на заведомо неисправные материнские платы (собственно, для этого они и предназначены), и не исключены случаи выхода из строя самой POST карты в ходе тестирования. Поэтому неплохо иметь простенькую дешевую карту для первичной диагностики.

Еще один удобный вариант – это выносной индикатор. Он позволяет со всеми удобствами производить диагностику материнских плат, не вынимая их из системника. С одной стороны, если дело дошло до POST карты, то скорей всего материнку все же придется извлечь для ремонта, но с другой стороны – не всегда, да и POST карты просто удобный способ общей диагностики. На фото Sintech ST8679 , китайская карточка с выносным многострочным LCD дисплеем.


LPT

Существуют POST карты для LPT порта – довольно простой и удобный способ диагностики для любого компьютера или ноутбука, имеющего этот самый LPT порт. Из-за технических особенностей, они не имеют возможностей, присущих картам для PCI , но это компенсируется простотой и доступностью. Требуют питание по USB (для этого и наличие порта на плате).


Однако LPT изживает свой век, и на современных компьютерах их уже почти не встретишь, соответственно, доживают свои дни и эти карты.

PCI-E

Служивший нам верой и правдой много лет PCI , постепенно вытесняет более современная PCI- Express . Немалое количество современных материнских плат вообще не имеют слота PCI (хотя и могут иметь саму шину). Могу вас обрадовать – POST карты для PCI-E существуют . Например, американская компания Ultra-X предлагает такую (цены у них обычно дикие, но тут ни цен, ни даже информации), в интернет можно встретить фото инженерных PCI-E карточек от Gigabyte (по всей видимости, только для внутреннего использования).


Есть и китайская версия PCI- E POST карты под названием KQCPET6-H . Производит ее китайская компания QiGuan Electronics , специализирующаяся на производстве разного рода диагностических карт (и довольно интересных). Их официальный сайт (www.qiguaninc.com), к сожалению, давно не обновлялся, и информации об этой карточке там нет, зато ее спокойно можно купить за 20 +/- баков на Ali.


Но с PCI-E не все так просто. Во-первых, сама диагностика с помощью PCI-E на данный момент вещь мутная, хотя бы, из-за отсутствия адекватной информации. Во-вторых, с PCI-E все зависит от конкретного изготовителя – нет гарантии, что коды будут выводиться; если и выводятся, то нет гарантии, что по стандартному порту и в стандартном виде…

Как же получить POST коды с платы без PCI, если нет под рукой PCI-E карты? Однозначный ответ на этот вопрос дать не получится. Если на вашей материнке есть встроенный индикатор – считайте, что вам крупно повезло. Можно использовать LPT , если он есть, конечно. Ну и последний вариант – использовать шину LP C , на некоторых материнских платах есть готовые коннекторы (LPC_DEBUG и т.п.). Даже если их нет, сама шина всегда присутствует, но придется «подпаиваться»…


USB

Одним из самых перспективных способов диагностики на сегодняшний день является USB . И главная тому причина – повсеместная распространенность этого интерфейса. Как мы уже выяснили, отсутствие того или иного разъема на материнской плате может стать преткновением для диагностики. И эту проблему как раз решает USB – парочку портов имеют буквально все компьютеры и ноутбуки, выпущенные за последние 15 лет.

Для такой диагностики необходимо наличие в системе USB Debug Port – это своего рода расширение USB, позволяющее передавать диагностическую информацию. В USB 3.0 реализация Debug Port получилась сподручней (подробней о Debug Port можно прочитать по ссылке). Кроме передачи POST кодов, Debug Port позволяет производить полноценную отладку кода BIOS и UEFI .

Было даже выпущено разными компаниями. NET20DC от Ajays (компания почти тут же обанкротилась, так как поставщики отказались поставлять им компоненты для сборки девайса). Insyde H 2 O DDT от Insyde Software (выпущен, вроде, в 2008 году, но информация об этом девайсе канула в лету даже на официальном сайте). Оба этих устройства скорее отладчики, хотя и имеют возможность захвата POST кодов.


Наиболее продвинутым и полноценным средством диагностики является AMIDebug Rx от AMI : позволяет выводить POST коды с описанием, полноценно работает с UEFI, ведет лог процесса POST, можно подключать к ПК для настройки и считывания кодов, имеет функции отладчика. Самое интересно – выпущено это чудо еще в 2009 году! Понятное дело, что предназначен девайс для родного AMIBIOS , работает ли он с другими BIOS – мне неизвестно.


За 6-7 лет с момента появления этих USB устройств, ни одно из них популярности не получило, купить сейчас можно только AMIDebug Rx, и то, только напрямую от производителя по индивидуальному запросу . Цена девайса не разглашается. Так что, повсеместного перехода на USB диагностику пока не ожидается.

Диагностика ноутбуков

С ноутбуками все немного сложней. Наиболее распространенные разъемы, которые можно использовать для диагностики – это mini PCI или Mini PCI-E (у более современных).


Mini PCI-E (как и PCI-E) не обязан выводить POST коды, все зависит от того, заложил ли эту возможность производитель или нет.

Опять же, есть вариант использования шины LPC . На материнских платах порта для подключения к этой шине вполне может не быть, поэтому придется напрямую подпаиваться к плате или контролеру.


Отдельные производители имеют свои способы диагностики, тут уж действительно «кто во что горазд». К сожалению, эта информация обычно является достоянием лишь производителя и его внутренних сервисных центров, поэтому все существующие варианты POST карт в общем доступе вряд ли найдутся. Наиболее исчерпывающий комбайн «все в одном флаконе» для диагностики ноутбуков – это POST карта Sintech ST8675 , которую несложно найти у китайских продавцов за 20-30$ с доставкой.


Из интересных решений, российская компания BVG-Group предлагает заглушку на VGA для ноутбуков Samsung, и карты в виде модуля памяти для ноутбуков ASUS. Это, наверное, наиболее «экзотические» варианты POST карт, что я знаю. Хотя овации скорее следует отдать производителям ноутбуков, придумавшим именно такой способ диагностики для своей продукции.


Тех, кто ждал конкретных примеров я, возможно, разочарую – POST карта это один из инструментов диагностики, который в большинстве случаев лишь помогает понять «куда копать», а уж как копать и какой лопатой зависит сугубо от вас. Иногда для постановки «диагноза» может хватить только ее одной, а может потребоваться помощь мультиметра и осциллографа в комплекте с умением ими пользоваться. Если это вызывает у вас затруднения, то лучше отнесите вашу материнскую плату специалистам, пока из нерабочей она не стала не подлежащей восстановлению.

PS

Такое вот у POST карт интересное прошлое и насыщенное настоящее. Что их ждет в будущем? Поживем – увидим. Но реалии таковы, что в нынешнюю эпоху потребительства от девайсов зачастую избавляются раньше, чем они успевают сломаться. А если и ломаются, то оказываются в сервисных мастерских производителя, где уж явно должно быть подходящее диагностическое оборудование. Все это, на мой взгляд, и является основной причиной образовавшегося «POST вакуума».

В начале транзакции активное устройство активизирует линию FRAME#. По шине AD передает адрес, а по линиям C/BE# – команду. Адресованное пассивное устройство отзывается сигналом DEVSEL#.

Активное устройство показывает готовность к обмену сигналом IRDY#. Данные передаются только при одновременной активации сигналов IRDY# и TRDY#, причем TRDY# формируется тогда, когда пассивное устройство готово к обмену.

За адресной частью следует фаза пересылки данных. Количество передаваемых слов в пакете не указывается, но перед последним словом данных устройство снимает сигнал FRAME#. В частном случае передается одно слово.

Каждое ведомое устройство должно довольно быстро отвечать на транзакцию. Ожидание может составлять несколько тактов, но не может превышать 8 тактов.

Если устройство не успевает, то формируется сигнал STOP#.

8. Команды шины pci.

PCI поддерживает 16 различных операций на шине; из них реализовано только 12, а остальные зарезервированы. Тип операции зависит от команды, передается по линиям C/BE# (количество линий – 4). Тип операции передается в течение фазы адреса.

Используются следующие операции:

0000 – подтверждение прерывания;

0001 – специальный цикл (в данном цикле ЭВМ передает устройствам различные сообщения);

0010 – чтение порта ввода-вывода;

0011 – запись в порт ввода-вывода;

0100 – резерв;

0101 – резерв;

0110 – чтение памяти;

0111 – запись в память;

1000 – резерв;

1001 – резерв;

1010 – чтение конфигурации;

1011 – запись конфигурации;32

1100 – циклическое (многократное) чтение памяти (используется при обращении к строкам кэш памяти);

1101 – цикл с 64-разрядным адресом (двухадресный цикл, позволяет по 32-битной шине обращаться к устройствам с 64-битной адресацией);

1110 – чтение строк памяти (чтение до конца строки кэша);

1111 – запись в память с инвалидацией (отменой достоверности).

В фазе данных линии C/BE# указывают на информационные байты.

При этом линии выбирают следующие байты:

C/BE# 0 -> AD7 – AD0,

C/BE# 1 -> AD15 – AD8,

C/BE# 2 ->AD23 – AD16,

C/BE# 3 -> AD31 – AD24

Количество адресуемых байт может быть 1, 2, 3 или 4.

9 Прерывание и захват шины pci, конфигурация устройств.

Прерывание организуется с помощью линий подачей сигнала низкого уровня на одну из линий INTA#,INTB#,INTC#,INTD#. Этот сигнал должен удерживаться до тех пор, пока драйвер, вызванный по прерыванию, не сбросит запрос прерывания, обратившись по шине к данному устройству. Драйвер определяет адрес устройства чтением конфигурационного регистра. Это происходит, когда на шинеC/BE# выставлена команда 0000. Приоритеты устройств определяются программированием арбитра

процессора ЭВМ. Подтверждение прерываний надо снимать с линий C/BE. Драйвер, работающий с устройствомPCI, определяет вектор прерывания, доставшийся устройству, чтением конфигурационного регистра.

Захват шины осуществляется с подачей сигнала запроса захвата на линию REQ#. Ответный сигнал подтверждения захвата передается арбитром процессора по линииGNT#. В режиме захвата устройство становится активным и управляет шиной по своему усмотрению. В частном случае

реализуется режим прямого доступа в память (DMA).

Шина PCIимеют возможность электронной конфигурации, подключенных к ней устройств. Это позволяет автоматически перераспределять ресурсы компьютера (диапазоны адресов памяти и портов ввода-вывода, линии прерывания и др.) между устройствами. Эта технология называетсяPlug&Play.33

Координационные средства по распределению ресурсов между устройствами выполняют специальные конфигурационные программы.

В шине PCIдля осуществления конфигурации устройств есть две команды: чтение и запись конфигурации. С их помощью происходит определение типа устройств с их шиной, потребности ресурсов и предоставление им этих ресурсов.

Информация о конфигурации записывается и хранится в 256 байтах. Доступ к ним производится при активации сигнала на линии IDSEL, подключенной индивидуально к каждому устройству (слоту расширения). Конфигурационное обращение идет поочередно. Всем устройствамPCIприсваивается индивидуальный адрес, который определяется схемотехникой системы.

Так, если в слот-расширение вставлена видеокарта, то ее конфигурационное пространство доступно по адресу этого слота. При переустановке его в другой слот она будет иметь уже другой адрес.

Формат данных конфигурации включает следующие сведения: идентификатор производителя; идентификатор устройства; статус; идентификатор версии; класс, код; размер кэш-линии; максимальное время захвата шины; регистры базовых адресов; базовый адрес ПЗУ; регистр команды;

Спецификацией определены несколько механизмов доступа к конфигурационному пространству, но в простых системах он осуществляется через специальные регистры моста центрального процессора – регистры адреса и данных конфигурации.

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 .

Устройством PCI называется микросхема или карта расширения, подключенная к одной из шин PCI и использующая для идентификации выделенную ей линию IDSEL , принадлежащую этой шине. Устройство может быть многофункциональным, то есть состоять из множества (от 1 до 8) так называемых функций . Каждой функции отводится конфигурационное пространство в 256 байт (см. п. 6.2.12). Многофункциональные устройства должны отзываться только на конфигурационные циклы с номерами функций, для которых имеется конфигурационное пространство. При этом функция с номером 0 должна быть обязательно, номера остальных функций назначаются разработчиком устройства произвольно (в диапазоне 1–7). Простые (однофункциональные) устройства, в зависимости от реализации, могут отзываться либо на любой номер функции, либо только на номер функции 0.

Шина PCI - набор сигнальных линий (см. п. 6.2.2), непосредственно соединяющих интерфейсные выводы группы устройств (слотов, микросхем на системной плате). В системе может присутствовать несколько шин PCI, соединенных мостами PCI (см. п. 6.2.10). Мосты электрически отделяют интерфейсные сигналы одной шины от другой, соединяя их логически; главный мост соединяет главную шину с ядром системы (процессором и памятью). Каждая шина имеет свой номер шины (PCI bus number). Шины нумеруются последовательно; главная шина имеет нулевой номер.

С точки зрения конфигурирования, минимальной адресуемой единицей этой иерархии является функция; ее полный адрес состоит из трех частей: номера шины, номера устройства и номера функции. Короткая форма идентификации вида PCI0:1:2 (например, в сообщениях ОС Unix) означает функцию 2 устройства 1, подключенного к главной (0) шине PCI.

В шине PCI принята географическая адресация - номер устройства определяется местом его подключения. Номер устройства (device number или dev) определяется той линией шины AD, к которой подключена линия сигнала IDSEL данного слота: к AD11 - dev0 (мост), AD12 - dev1 … AD31 - dev20. В соседних слотах PCI, как правило, задействуются соседние номера устройств; их нумерация определяется разработчиком системной платы (или пассивной кросс-платы в промышленных компьютерах). Часто для слотов используются убывающие номера устройств, начиная с 20. Группы соседних слотов могут подключаться к разным шинам; на каждой шине PCI нумерация устройств независимая (могут быть и устройства с совпадающими номерами dev, но разными номерами шин). Устройства PCI, интегрированные в системную плату, используют ту же систему адресации. Их номера «запаяны намертво», в то время как адреса карт расширения можно изменять перестановкой их в разные слоты.

Одна карта PCI может содержать только одно устройство шины, к которой она подключается, поскольку ей в слоте выделяется только одна линия IDSEL . Если на карте размещают несколько устройств (например, 4-портовая карта Ethernet), то на ней приходится устанавливать мост - тоже устройство PCI, к которому и обращаются по линии IDSEL , выделенной данной карте. Этот мост организует на карте дополнительную шину PCI, к которой можно подключить множество устройств.

С точки зрения обращения к пространствам памяти и ввода-вывода, географический адрес (номер шины и устройства) безразличен (не принимая во внимание разницу в производительности, связанную с подключением устройств к разным шинам PCI). Однако номер устройства определяет номер линии запроса прерывания, которой может пользоваться устройство. Подробнее об этом см. в п. 6.2.6, здесь же отметим, что на одной шине устройства с номерами, отличающимися друг от друга на 4, будут использовать одну и ту же линию прерывания. Возможность развести их по разным линиям прерывания может появиться лишь, если они находятся на разных шинах (это зависит от системной платы).

Разобраться с нумерацией устройств и полученных ими линий прерываний на конкретной плате можно просто: устанавливать одну карту PCI поочередно в каждый из слотов (отключая питание) и смотреть на сообщения об обнаруженных устройствах PCI, выводимых на дисплей в конце теста POST. В этих сообщениях будут фигурировать и устройства PCI, установленные непосредственно на системной плате (и не отключенные параметрами CMOS Setup).

Но чтобы не было иллюзий простоты и прозрачности, отметим, что «особо умные» операционные системы (Windows) не довольствуются полученными назначениями номеров прерывании и изменяют их по своему усмотрению (что никак не может отразиться на разделяемости линий).

6.2.2. Протокол шины PCI

В каждой транзакции (обмене по шине) участвуют два устройства - инициатор (initiator) обмена, он же ведущее (master) устройство, и целевое (target) устройство (ЦУ), оно же ведомое (slave). Шина PCI все транзакции трактует как пакетные: каждая транзакция начинается фазой адреса, за которой может следовать одна или несколько фаз данных. Состав и назначение интерфейсных сигналов шины приведены в табл. 6.11.

Таблица 6.11 . Сигналы шины PCI

Сигнал Назначение
AD Address/Data - мультиплексированная шина адреса/данных. В начале транзакции передается адрес, в последующих тактах - данные
C/BE# Command/Byte Enable - команда/разрешение обращения к байтам. Команда, определяющая тип очередного цикла шины, задается четырехбитным кодом в фазе адреса
FRAME# Кадр. Введением сигнала отмечается начало транзакции (фаза адреса), снятие сигнала указывает на то, что последующий цикл передачи данных является последним в транзакции
DEVSEL# Device Select - устройство выбрано (ответ ЦУ на адресованную к нему транзакцию)
IRDY# Initiator Ready - готовность ведущего устройства к обмену данными
TRDY# Target Ready - готовность ЦУ к обмену данными
STOP# Запрос ЦУ к ведущему устройству на остановку текущей транзакции
LOCK# Сигнал захвата шины для обеспечения целостного выполнения операции. Используется мостом, которому для выполнения одной операции требуется выполнить несколько транзакций PCI
REQ# Request - запрос от ведущего устройства на захват шины
GNT# Grant - предоставление ведущему устройству управления шиной
PAR Parity - общий бит паритета для линий AD и C/BE#
PERR# Parity Error - сигнал об ошибке паритета (для всех циклов, кроме специальных). Вырабатывается любым устройством, обнаружившим ошибку
PME# Power Management Event - сигнал о событиях, вызывающих изменение режима потребления (дополнительный сигнал, введенный в PCI 2.2)
CLKRUN# Clock running - шина работает на номинальной частоте синхронизации. Снятие сигнала означает замедление или остановку синхронизации с целью снижения потребления (для мобильных применений)
PRSNT# Present - индикаторы присутствия платы, кодирующие запрос потребляемой мощности. На карте расширения одна или две линии индикаторов соединяются с шиной GND, что воспринимается системной платой
RST# Reset - сброс всех регистров в начальное состояние
IDSEL Initialization Device Select - выбор устройства в циклах конфигурационного считывания и записи
SERR# System Error - системная ошибка. Ошибка паритета адреса данных в специальном цикле или иная катастрофическая ошибка, обнаруженная устройством. Активизируется любым устройством PCI и вызывает NMI
REQ64# Request 64 bit - запрос на 64-битный обмен. Сигнал вводится 64-битным инициатором, по времени он совпадает с сигналом FRAME#. Во время окончания сброса (сигналом RST#) сигнализирует 64-битному устройству о том, что оно подключено к 64-битной шине. Если 64-битное устройство не обнаружит этого сигнала, оно должно переконфигурироваться на 32-битный режим, отключив буферные схемы старших байтов
ACK64# Подтверждение 64-битного обмена. Сигнал вводится 64-битным ЦУ, опознавшим свой адрес, одновременно с DEVSEL#. Отсутствие этого подтверждения заставит инициатор выполнять обмен с 32-битной разрядностью
INTA#, INTB#, INTC#, INTD# Interrupt А, В, С, D - линии запросов прерывания, чувствительность к уровню, активный уровень - низкий, что допускает разделяемость (совместное использование) линий
CLK Clock - тактовая частота шины. Должна лежать в пределах 20–33 МГц, в PCI2.1 - до 66 МГц
M66EN 66MHz Enable - разрешение частоты синхронизации до 66 МГц
SDONE Snoop Done - сигнал завершенности цикла слежения для текущей транзакции. Низкий уровень указывает на незавершенность цикла слежения за когерентностью памяти и кэша. Необязательный сигнал, используется только устройствами шины с кэшируемой памятью
SBO# Snoop Backoff - попадание текущего обращения к памяти абонента шины в модифицированную строку кэша. Необязательный сигнал, используется только абонентами шины с кэшируемой памятью при алгоритме обратной записи
TCK Test Clock - синхронизация тестового интерфейса JTAG
TDI Test Data Input - входные данные тестового интерфейса JTAG
TDO Test Data Output - выходные данные тестового интерфейса JTAG
TMS Test Mode Select - выбор режима для тестового интерфейса JTAG
TRST Test Logic Reset - сброс тестовой логики

В каждый момент времени шиной может управлять только одно ведущее устройство, получившее на это право от арбитра. Каждое ведущее устройство имеет пару сигналов - REQ# для запроса на управление шиной и GNT# для подтверждения предоставления управления шиной. Устройство может начинать транзакцию (устанавливать сигнал FRAME#) только при активном полученном сигнале GNT# . Снятие сигнала GNT# не позволяет устройству начать следующую транзакцию, а при определенных условиях (см. ниже) заставляет прекратить начатую транзакцию. Арбитражем запросов на использование шины занимается специальный узел, входящий в чипсет системной платы. Схема приоритетов (фиксированный, циклический, комбинированный) определяется программированием арбитра.

Для адреса и данных используются общие мультиплексированные линии AD . Четыре мультиплексированные линии С/BE обеспечивают кодирование команд в фазе адреса и разрешения байт в фазе данных. В начале транзакции ведущее устройство активизирует сигнал FRAME# , по шине AD передает целевой адрес, а по линиям С/BE# - информацию о типе транзакции (команде). Адресованное ЦУ отзывается сигналом DEVSEL# . Ведущее устройство указывает на свою готовность к обмену данными сигналом IRDY# , эта готовность может быть выставлена и раньше получения DEVSEL#. Когда к обмену данными будет готово и ЦУ, оно установит сигнал TRDY# . Данные по шине AD передаются только при одновременном наличии сигналов IRDY# и TRDY# . С помощью этих сигналов ведущее устройство и ЦУ согласуют свои скорости, вводя такты ожидания. На рис. 6.7 приведена временная диаграмма обмена, в которой и ведущее устройство, и ЦУ вводят такты ожидания. Если бы они оба ввели сигналы готовности в конце фазы адреса и не снимали их до конца обмена, то в каждом такте после фазы адреса передавались бы по 32 бита данных, что обеспечило бы выход на предельную производительность обмена.

Рис. 6.7 . Цикл обмена на шине PCI

Количество фаз данных в пакете явно не указывается, но перед последней фазой данных ведущее устройство при введенном сигнале IRDY# снимает сигнал FRAME# . В одиночных транзакциях сигнал FRAME# активен лишь один такт. Если устройство не поддерживает пакетные транзакции в ведомом режиме, то оно должно потребовать прекращения пакетной транзакции во время первой фазы данных (введя сигнал STOP# одновременно с TRDY#). В ответ на это ведущее устройство завершит данную транзакцию и продолжит обмен последующей транзакцией с новым значением адреса. После последней фазы данных ведущее устройство снимает сигнал IRDY# , и шина переходит в состояние покоя (PCI Idle ) - оба сигнала FRAME# и IRDY# находятся в пассивном состоянии. Инициатор может начать следующую транзакцию и без такта покоя, введя FRAME# одновременно со снятием IRDY# . Такие быстрые смежные транзакции (Fast Back-to-Back) могут быть обращены как к одному, так и к разным ЦУ. Первый тип поддерживается всеми устройствами PCI, выступающими в роли ЦУ. На поддержку второго типа (она необязательна) указывает бит 7 регистра состояния (см. п. 6.2.12). Инициатору разрешают (если он умеет) использовать быстрые смежные транзакции с разными устройствами (битом 9 регистра команд), только если все агенты шины допускают быстрые обращения.

Шина позволяет уменьшить мощность (ток), потребляемую устройствами, ценой снижения производительности, применяя пошаговое переключение линий AD и PAR (address/data stepping). Здесь возможны два варианта.

Плавный шаг (continuous stepping) - начало формирования сигналов слабо точными формирователями за несколько тактов до введения сигнала-квалификатора действительной информации (FRAME# в фазе адреса, IRDY# или TRDY# в фазе данных). За эти несколько тактов сигналы «доползут» до требуемого значения при меньшем токе.

Дискретный шаг (diskrete stepping) - нормальные формирователи срабатывают не все сразу, а группами (например, побайтно), в каждом такте по группе. При этом снижаются броски тока, поскольку одновременно переключается меньше формирователей.

Устройство само может и не пользоваться этими возможностями (см. бит 7 регистра команд), но должно «понимать» такие циклы. Задерживая сигнал FRAME# , устройство рискует потерять право доступа к шине, если арбитр получит запрос от более приоритетного устройства.

Протокол квитирования обеспечивает надежность обмена - ведущее устройство всегда получает информацию об отработке транзакции ЦУ. Средством повышения надежности (достоверности) является применение контроля паритета: линии AD и С/BE# и в фазе адреса, и в фазе данных защищены битом паритета PAR (количество единичных бит этих линий, включая PAR , должно быть четным). Действительное значение PAR появляется на шине с задержкой в один такт относительно линий AD и С/BE# . При обнаружении ошибки ЦУ вырабатывается сигнал PERR# (со сдвигом на такт после действительности бита паритета). В подсчете паритета при передаче данных учитываются все байты, включая и недействительные (отмеченные высоким уровнем сигнала С/ВЕх#). Состояние бит, даже и в недействительных байтах данных, во время фазы данных должно оставаться стабильным.

Каждая транзакция на шине должна быть завершена планово или прекращена, при этом шина должна перейти в состояние покоя (сигналы FRAME# и IRDY# пассивны). Завершение транзакции выполняется либо по инициативе ведущего устройства, либо по инициативе ПУ.

Ведущее устройство может завершить транзакцию одним из следующих способов.

Нормальное завершение (Completion ) выполняется по окончании обмена данными.

Завершение по тайм-ауту (Time-out ) происходит, когда во время транзакции у ведущего устройства отбирают право на управление шиной (снятием сигнала GNT#) и истекает время, указанное в его таймере Latency Timer. Это может случиться, если адресованное ЦУ оказалось непредвиденно медленным или запланирована слишком длинная транзакция. Короткие транзакции (с одной-двумя фазами данных) даже в случае снятия сигнала GNT# и срабатывания таймера завершаются нормально.

Транзакция отвергается (Master-Abort ), когда в течение заданного времени ведущее устройство не получает ответа ЦУ (DEVSEL#).

Транзакция может быть прекращена по инициативе ЦУ ; для этого оно может ввести сигнал STOP# . Возможны три типа прекращения.

Повтор (Retry ) - сигнал STOP# вводится при пассивном сигнале TRDY# до первой фазы данных. Эта ситуация возникает, когда ЦУ из-за внутренней занятости не успевает выдать первые данные в положенный срок (16 тактов). Повтор является указанием ведущему устройству на необходимость нового запуска той же транзакции.

Отключение (Disconnect ) - сигнал STOP# вводится во время или после первой фазы данных. Если сигнал STOP# введен при активном сигнале TRDY# очередной фазы данных, то эти данные передаются и на том транзакция завершается. Если сигнал STOP# введен при пассивном сигнале TRDY# , то транзакция завершается без передачи данных очередной фазы. Отключение производится, когда ЦУ неспособно своевременно выдать или принять очередную порцию данных пакета.

Отказ (Target-Abor t) - сигнал STOP# вводится одновременно со снятием сигнала DEVSEL# (в предыдущих случаях во время появление сигнала STOP# сигнал DEVSEL# был активен). После этого данные уже не передаются. Отказ вводится, когда ЦУ обнаруживает фатальную ошибку или иные условия, по которым оно уже никак не сможет обслужить данный запрос.

Использование трех типов прекращения вовсе не обязательно для всех ЦУ, однако любое ведущее устройство должно быть готово к завершению транзакций по любой из этих причин.

6.2.3. Команды шины, адресация памяти и ввода-вывода

Работа шины контролируется несколькими таймерами, не позволяющими попусту расходовать такты шины и планировать распределение полосы пропускания.

Каждое ЦУ должно достаточно быстро отвечать на адресованную ему транзакцию. Задержка первой фазы данных (target initial latency), то есть задержка появления сигнала TRDY# относительно FRAME# , не должна превышать 16 тактов шины. Если устройство по своей природе иногда может не успевать уложиться в этот интервал, оно должно формировать сигнал STOP# , прекращая транзакцию. Это заставит ведущее устройство повторить транзакцию, и с большой вероятностью эта попытка окажется успешной. Если устройство медленное и часто не укладывается в 16 тактов, то оно должно откладывать транзакцию (Delayed Transaction). Кроме того, ЦУ имеет инкрементный механизм слежения за длительностью циклов (Incremental Latency Mechanism), который не позволяет интервалу между соседними фазами данных в пакете (target subsequent latency) превышать 8 тактов шины. Если ЦУ не успевает работать в таком темпе, оно обязано остановить транзакцию. Желательно, чтобы устройство сообщало о своем «неуспевании» как можно раньше, не выжидая предельных 16 или 8 тактов, - это экономит полосу пропускания шины.

Инициатор тоже не должен задерживать поток - допустимая задержка от начала FRAME# до сигнала IRDY# (master data latency) и между фазами данных не должна превышать 8 тактов. Если ЦУ время от времени отвергает операцию записи в память с запросом повтора (это, к примеру, может происходить при записи в видеопамять), то есть «предел терпения» для завершения операции. Таймер максимального времени исполнения (maximum complete time) имеет порог 10 мкс - 334 такта при 33 МГц или 668 тактов на 66 МГц, за которое инициатор должен иметь возможность «протолкнуть» хоть одну фазу данных. Таймер начинает отсчет с момента запроса повтора операции записи в память и сбрасывается при последующем завершении транзакции записи в память, отличном от запроса повтора. Устройства, не способные выдерживать ограничение на максимальное время исполнения записи в память, должны предоставлять драйверу возможность определять их состояние, в котором достаточно быстрая запись в память невозможна. Драйвер, естественно, должен учитывать это состояние и не «напрягать» шину и устройство бесплодными попытками записи.

Каждое ведущее устройство, способное сформировать пакет с более чем двумя фазами данных, должно иметь собственный программируемый таймер задержки (Latency Timer), регулирующий поведение ведущего устройства, когда у него отбирают право управления шиной. Таймер запускается по каждому сигналу FRAME# , введенному этим ведущим устройством. Поведение ведущего устройства по достижении порога зависит от типа команды и состояния сигналов FRAME# и GNT# на момент срабатывания таймера.

Если ведущее устройство снимает сигнал FRAME# до срабатывания таймера, транзакция завершается нормально.

Если сигнал GNT# снят и исполняемая команда не является записью памяти с инвалидацией, то инициатор обязан сократить транзакцию, сняв сигнал FRAME# . При этом ему позволяется завершить текущую и выполнить еще одну фазу данных.

Если сигнал GNT# снят и исполняется запись в память с инвалидацией, то инициатор должен завершить транзакцию по концу текущей (если передается непоследнее двойное слово строки) или следующей (если двойное слово - последнее) строки кэша.

Задержка арбитража (arbitration latency ) определяется как число тактов от подачи инициатором запроса REQ# до получения права управления шиной GNT# . Эта задержка зависит от активности других инициаторов, быстродействия устройств (чем меньше они вводят тактов ожидания, тем лучше) и «проворности» собственно арбитра. В зависимости от исполняемой команды и состояния сигналов ведущее устройство должно либо сократить транзакцию, либо продолжать ее до запланированного завершения.

При конфигурировании ведущие устройства сообщают свои потребности, указывая максимально допустимую задержку предоставления доступа к шине (Max_Lat) и минимальное время, на которое им должно предоставляться управление шиной (Min_GNT). Эти потребности определяются присущим устройству темпом передачи данных и его организацией.

Для максимального использования возможностей шины устройства должны иметь буферы, чтобы накапливать в них данные для пакетных транзакций. Рекомендуется для устройств со скоростью передачи данных до 5 Мбайт/с иметь буфер, по крайней мере, на 4 двойных слова. Для более высоких скоростей рекомендуется буфер на 32 двойных слова. Для обмена с системной памятью наиболее эффективны транзакции, работающие с целыми строками кэша, что тоже учитывают при определении размера буфера. Однако увеличение размера буфера может вызвать трудности при обработке ошибок, а также вести к увеличению задержек доставки данных (пока устройство не заполнит определенный объем буфера, оно не начнет передачу этих данных по шине, и их потребители будут ожидать).

В спецификации приводится пример организации карты Fast Ethernet (скорость передачи - 10 Мбайт/с), у которой для каждого направления передачи имеется 64-байтный буфер, поделенный на две половины. Когда адаптер заполняет одну половину буфера приходящим кадром, он выводит в память накопленное содержимое другой половины, после чего они меняются местами. Каждая половина выводится в память за 8 фаз данных (около 0,25 мкс на частоте 33 МГц), что соответствует установке MIN_GNT =1. При скорости прихода данных 10 Мбайт/с каждая половина заполняется за 3,2 мкс, что соответствует установке МAX_LАТ =12 (здесь время задается в интервалах по 0,25 мкс).

6.2.4. Таймеры, задержки и буферы

В каждой команде шины указывается адрес данных, передаваемых в первой фазе данных пакета. Адрес для каждой последующей фазы данных пакета увеличивается на 4 (следующее двойное слово), но в командах обращения к памяти порядок может быть иным (см. ниже). Байты шины AD , несущие действительную информацию, выбираются сигналами С/BE# в фазах данных. Внутри пакета эти сигналы могут менять состояние от фазы к фазе произвольным образом. Разрешенные байты могут быть разрозненными; возможны фазы данных, в которых не разрешено ни одного байта. В отличие от шины ISA, на PCI нет динамического изменения разрядности - все устройства должны подключаться к шине 32-разрядным способом. Если в устройстве PCI применяются функциональные схемы иной разрядности (к примеру, нужно подключить микросхему 8255, имеющую 8-битную шину данных и четыре регистра), то приходится принимать схемотехнические методы преобразования, отображающие все регистры на 32-разрядную шину AD .

Адресация памяти, портов и конфигурационных регистров различна.

В циклах обращения к памяти адрес, выровненный по границе двойного слова, передается по линиям AD ; линии AD задают порядок адресов в пакете:

00 - линейное инкрементирование; адрес последующей фазы отличается от предыдущего на число байтов шины (4 для 32-битной и 8 для 64-битной шины).

10 - Cache line Wrap mode, сворачивание адресов с учетом длины строки кэш-памяти. В транзакции адрес для очередной фазы увеличивается до достижения границы строки кэша, после чего переходит на начало этой строки и увеличивается до адреса, предшествующего начальному. Если транзакция длиннее строки кэша, то она продолжится в следующей строке с того же смещения, что и началась. Так, при длине строки 16 байт и 32-битной шине транзакция, начавшаяся с адреса xxxxxx08h, будет иметь последующие фазы данных, относящиеся к адресам xxxxxx0Ch, xxxxxx00h, xxxxxx04h; и далее к xxxxxx18h, xxxxxx1Ch, xxxxxx10h, xxxxxx14h. Длина строки кэша прописывается в конфигурационном пространстве устройства (см. п. 6.2.12). Если устройства не имеет регистра Cache Line Size , то оно должно прекратить транзакцию после первой фазы данных;

01 и 11 - зарезервировано, может использоваться как указание на отключение (Disconnect) после первой фазы данных.

В циклах обращения к портам ввода-вывода для адресации любого байта используются все линии AD . При этом биты адреса AD указывают на адрес двойного слова, к которому принадлежат передаваемые данные, а младшие биты адреса AD должны соответствовать байтам, которые могут быть разрешены сигналами С/BE# . При AD =00 допустимо С/BE# =xxx0 или 1111, при AD =01 - С/BE# =xx01 или 1111, при AD =10 - С/BE# =х011 или 1111, при AD =11 - С/BE# =0111 (передается лишь байт 3) или 1111 (ни один байт не разрешен). Эти циклы тоже могут быть пакетными, хотя на практике эта возможность используется редко.

В циклах конфигурационной записи/считывания устройство (карта расширения) выбирается индивидуальным сигналом IDSEL ; функция адресуется битами AD , а конфигурационные регистры (только двойные слова) адресуются битами AD , при этом AD =00.

Команды шины PCI определяются значениями бит С/BE# в фазе адреса (табл. 6.12).

? Команда подтверждения прерывания предназначена для чтения вектора прерываний. По протоколу она выглядит как команда чтения, неявно адресованная к системному контроллеру прерываний. Здесь в фазе адреса по шине AD полезная информация не передается, но ее инициатор (главный мост) должен обеспечить стабильность сигналов и корректность паритета. В PC 8-битный вектор передается в байте 0 по готовности контроллера прерываний (по сигналу TRDY#). Подтверждение прерываний выполняется за один цикл (первый холостой цикл, который процессоры х86 делают в дань совместимости со стариной, мостом подавляется).

? Специальный цикл отличается от всех других тем, что является широковещательным. Однако ни один агент на него не отвечает, а главный мост или иное устройство, вводящее этот цикл, всегда завершает его способом Master Abort (на него требуется 6 тактов шины). Специальный цикл предназначен для генерации широковещательных сообщений - их могут читать любые «заинтересованные» агенты шины. Тип сообщения декодируется содержимым линий AD , на линиях AD могут помещаться данные, передаваемые в сообщении. Фаза адреса в этом цикле для обычных устройств отсутствует, но мосты используют ее информацию для управления распространением сообщения. Сообщения с кодами 0000h, 0001h и 0002h требуются для указания на отключение (Shutdown), остановку (Halt) процессора или специфические функции процессора x86, связанные с кэшем и трассировкой. Коды 0003-FFFFh зарезервированы. Специальный цикл может генерироваться тем же аппаратно-программным механизмом, что и конфигурационные циклы (см. п. 6.2.11), но со специфическим значением адреса.

? Команды чтения и записи ввода-вывода служат для обращения к пространству портов. Линии AD содержат адрес байта, причем декодированию подлежат и биты AD0 и AD1 (несмотря на то, что имеются сигналы ВЕх#). Порты PCI могут быть 16- или 32-битными. Для адресации портов на шине PCI доступны все 32 бита адреса, но процессоры х86 могут использовать только младшие 16 бит.

? Команды обращения к памяти , кроме обычного чтения и записи, включают чтение строк кэш-памяти, множественное чтение (нескольких строк), запись с инвалидацией.

? Команды конфигурационного чтения и записи адресуются к конфигурационному пространству устройств (см. п. 6.2.12). Обращение производится только двойными словами. Структура содержит идентификатор устройства и производите для, состояние и команду, информацию о занимаемых ресурсах и ограничения на использование шины. Для генерации данных команд требуется специальный аппаратно-программный механизм (см. п. 6.2.11).

? Чтение строк памяти применяется, когда в транзакции планируется более двух 32-битных передач (обычно это чтение до конца строки кэша).

? Множественное чтение памяти используется для транзакций, пересекающих границы строк кэш-памяти.

? Запись с инвалидацией применяется к целым строкам кэша и позволяет оптимизировать циклы обратной записи «грязных» строк кэша.

? Двухадресный цикл позволяет по 32-битной шине обращаться к устройствам с 64-битной адресацией. В этом случае младшие 32 бита адреса передаются в цикле данного типа, а за ним следует обычный цикл, определяющий тип обмена и несущий старшие 32 бита адреса. Шина PCI допускает 64-битную адресацию портов ввода-вывода (для х86 это бесполезно, но PCI существует и на других платформах).

Таблица 6.12 . Декодирование команд шины PCI

С/BE Тип команды
0000 Interrupt Acknowledge - подтверждение прерывания
0001 Special Cycle - специальный цикл
0010 I/O Read - чтение порта ввода-вывода
0011 I/O Write - запись в порт ввода-вывода
0100 Зарезервировано
0101 Зарезервировано
0110 Memory Read - чтение памяти
0111 Memory Write - запись в память
1000 Зарезервировано
1001 Зарезервировано
1010 Configuration Read - конфигурационное считывание
1011 Configuration Write - конфигурационная запись
1100 Multiple Memory Read - множественное чтение памяти
1101 Dual Address Cycle (DAC) - двухадресный цикл
1110 Memory-Read Line - чтение строки памяти
1111 Memory Write and Invalidate - запись с инвалидацией

6.2.5. Пропускная способность шины

Шина PCI является самой высокоскоростной шиной расширения современных ПК, однако и ее реальная пропускная способность, увы, не так уж и высока. Рассмотрим наиболее распространенный вариант: разрядность 32 бита, частота 33 МГц. Как указывалось выше, пиковая скорость передачи данных внутри пакетного цикла составляет 132 Мбайт/с, то есть за каждый такт шины передаются 4 байта данных (33?4=132). Однако пакетные циклы выполняются далеко не всегда. Процессор общается с устройствами PCI инструкциями обращения к памяти или вводу-выводу через главный мост, который шинные транзакции процессора транслирует в транзакции шины PCI. Поскольку у процессоров х86 основные регистры 32-разрядные, то одна инструкция порождает транзакцию с устройством PCI, в которой передается не более 4 байт данных, что соответствует одиночной передаче. Если же адрес передаваемого (двойного) слова не выровнен по соответствующей границе, то будут порождены два одиночных цикла или один пакетный с двумя фазами данных, но в любом случае это обращение будет выполняться дольше, чем при выровненном адресе.

Однако при записи массива данных в устройство PCI (передача с последовательно нарастающим адресом) мост может пытаться организовать пакетные циклы. У современных процессоров (начиная с Pentium) шина данных 64-битная и применяется буферизация записи, так что два последовательных 32-битных запроса записи объединятся в один 64-битный. Этот запрос, если он адресован к 32-битному устройству, мост попытается передать пакетом с двумя фазами данных. «Продвинутый» мост может пытаться собирать в пакет и последовательные запросы, что может породить пакет существенной длины. Пакетные циклы записи можно наблюдать, например, передавая массив данных из ОЗУ в устройство PCI строковой инструкцией MOVSD , используя префикс повтора REP . Тот же эффект даст и цикл последовательных операций LODSW , STOSW (и иных инструкциях обращения к памяти). Поскольку у современных процессоров ядро исполняет инструкции гораздо быстрее, чем шина способна вывести их результаты, между инструкциями, порождающими объединяемые записи, процессор может успеть выполнить еще несколько операций. Однако если пересылка данных организуется директивой языка высокого уровня, которая ради универсальности работает гораздо сложнее вышеприведенных ассемблерных примитивов, транзакции, скорее всего, будут уже одиночными (у буферов записи процессора не хватит «терпения» придержать один 32-битный запрос до появления следующего, или же произойдет принудительная выгрузка буферов записи процессора или моста по запросу чтения, см. п. 6.2.10).

Что касается чтения из устройства PCI, то здесь пакетный режим организовать сложнее. Буферизации чтения у процессора, естественно, нет (операцию чтения можно считать выполненной лишь по получению реальных данных), и даже строковые инструкции будут порождать одиночные циклы. Однако у современных процессоров имеются возможности генерации запросов чтения более 4 байт. Для этого можно использовать инструкции загрузки данных в регистры MMX (8 байт) или XMM (16 байт), а из них уже выгружать данные в ОЗУ (которое работает много быстрее устройств PCI).

Строковые инструкции ввода-вывода (INSW , OUTSW с префиксом повторения REP), используемые для программированного ввода-вывода блоков данных (PIO), порождают серии одиночных транзакций, поскольку все данные блока относятся к одному адресу PCI.

Посмотреть, каким образом происходит обращение к устройству, несложно при наличии осциллографа: в одиночных транзакциях сигнал FRAME# активен всего 1 такт, в пакетных он длиннее. Число фаз данных в пакете соответствует числу тактов, во время которых активны оба сигнала IRDY# и TRDY# .

Стремиться к пакетизации транзакций записи стоит только в том случае, если устройство PCI поддерживает пакетные передачи в ведомом (target) режиме. Если это не так, то попытка пакетизации приведет даже к небольшой потере производительности, поскольку транзакция будет завершаться по инициативе ведомого устройства (сигналом STOP#), а не инициатора обмена, на чем теряется один такт шины. Так, к примеру, можно наблюдать, как при записи массива в память PCI, выполняемой директивой языка высокого уровня, устройство среднего быстродействия (вводящее лишь 3 такта ожидания готовности) принимает данные каждые 7 тактов, что при частоте 33 МГц и разрядности 32 бита дает скорость 33?4/7=18,8 Мбайт/с. Здесь 4 такта занимает активная часть транзакции (от сигнала FRAME# до снятия сигнала IRDY#) и 3 такта паузы. То же устройство по инструкции MOVSD принимает данные каждые 8 тактов шины (33?4/8=16,5 Мбайт/с). Эти данные - результат наблюдения работы PCI-ядра, выполненного на основе микросхемы FPGA фирмы Altera, не поддерживающего пакетные транзакции в ведомом режиме. То же самое устройство при чтении памяти PCI работает существенно медленнее - инструкцией REP MOVSW с него удалось получать данные каждые 19–21 тактов шины (скорость 33?4/20=6,6 Мбайт/с). Здесь сказывается и большая задержка устройства (оно выдает данные лишь в 8 такте после появления сигнала FRAME#), и то, что процессор начинает следующую пересылку лишь дождавшись данных от предыдущей. Трюк с использованием регистра XMM здесь дает положительный эффект, несмотря на потерю такта (на прекращение транзакции непакетным устройством), поскольку каждый 64-битный запрос процессора выполняется парой смежных транзакций PCI, между которыми пауза всего в пару тактов.

Для определения теоретического предела пропускной способности вернемся к рис. 6.7, чтобы определить минимальное время (число тактов) транзакций чтения и записи. В транзакции чтения после подачи команды и адреса инициатором (такт 1) меняется текущий «владелец» шины AD . На этот «разворот», или «пируэт» (turnaround), уходит такт 2, что обусловливается задержкой сигнала TRDY# целевым устройством. Далее может следовать фаза данных (такт 3), если целевое устройство достаточно расторопно. После последней фазы данных требуется еще 1 такт на обратный «пируэт» шины AD (в нашем случае это такт 4). Таким образом, чтение одного слова (4 байта) занимает минимум 4 такта по 30 не (33 МГц). Если эти транзакции следуют непосредственно друг за другом (если на такое способен инициатор и у него не отбирают право на управление шиной), то можно говорить о максимальной скорости чтения в 33 Мбайт/с при одиночных транзакциях. В транзакциях записи шиной AD все время управляет инициатор, так что здесь нет потери тактов на «пируэт». При расторопном целевом устройстве, не вносящем дополнительных тактов ожидания, скорость записи может достигать 66 Мбайт/с.

Скорость, соизмеримую с максимальной пиковой, можно получить только при пакетных передачах, когда имеют место дополнительные 3 такта при чтении и 1 при записи. Так, для чтения пакета с числом фаз данных 4 требуется 7 тактов (V= 16/(7?30) байт/нс = 76 Мбайт/с), а для записи - 5 (V= 16/(5?30) байт/нс = 106,6 Мбайт/с). При числе фаз данных в 16 скорость чтения может достигать 112 Мбайт/с, а записи - 125 Мбайт/с.

В этих выкладках не учитывались потери времени, связанны со сменой инициатора. Инициатор может начинать транзакцию по получении сигнала GNT# , только убедившись в том, что шина находится в покое (сигналы FRAME# и IRDY# пассивны); на фиксацию покоя уходит один такт. Как видно, захватывать для одного инициатора большую часть пропускной способности шины можно, увеличивая длину пакета. Однако при этом возрастет задержка получения управления шиной для других устройств, что не всегда допустимо. Отметим также, что далеко не все устройства способны отвечать на транзакции без тактов ожидания, так что реальные цифры будут скромнее.

Итак, для выхода на максимальную производительность обмена устройства PCI сами должны быть ведущими устройствами шины, причем способными генерировать пакетные циклы. Поддержку пакетного режима имеют далеко не все устройства PCI, а у имеющих, как правило, есть существенные ограничения на максимальную длину пакета. Радикально повысить пропускную способность позволяет переход на частоту 66 МГц и разрядность 64 бита, что обходится недешево. Для того, чтобы на шине могли нормально работать устройства, критичные к времени доставки данных (сетевые адаптеры, устройства, участвующие в записи и воспроизведении аудио-видеоданных и др.), не следует пытаться выжать из шины ее декларированную полосу пропускания полностью. Перегрузка шины может привести, например, к потере пакетов из-за несвоевременности доставки данных. Заметим, что адаптер Fast Ethernet (100 Мбит/с) в полудуплексном режиме занимает полосу около 13 Мбайт/с (10 % декларируемой полосы обычной шины), а в полнодуплексном - уже 26 Мбайт/с. Адаптер Gigabit Ethernet даже в полудуплексном режиме вписывается в полосу шины уже с натяжкой (он «выживает» лишь за счет больших внутренних буферов), для него больше подходит 64 бит/66 МГц.

6.2.6. Прерывания

В PC-совместимых компьютерах прерывания от устройств PCI обслуживаются с помощью традиционной связки пары контроллеров 8259А, расположенных на системной плате (см. п. 12.4), к которым обращается команда «подтверждение прерывания». Прерывания на шине PCI свободны от одной из нелепостей системы прерываний ISA. Устройство PCI вводит сигнал прерывания низким уровнем (выходом с открытым коллектором или стоком) на выбранную линию INTA# , INTB# , INTC# или INTD# . Этот сигнал должен удерживаться до тех пор, пока программный драйвер, вызванный по прерыванию, не сбросит запрос прерывания, обратившись по шине к данному устройству. Если после этого контроллер прерываний снова обнаруживает низкий уровень на линии запроса, это означает, что запрос на ту же линию ввело другое устройство, разделяющее данную линию с первым, и оно тоже требует обслуживания. Линии запросов от слотов PCI и PCI-устройств системной платы коммутируются на входы контроллеров прерываний относительно произвольно. Конфигурационное ПО может определить и указать занятые линии запросов и номер входа контроллера прерываний обращением к конфигурационному пространству устройства (см. п. 6.2.12). Программный драйвер, прочитав конфигурационные регистры, тоже может определить эти параметры для того, чтобы установить обработчик прерываний на нужный вектор и при обслуживании сбрасывать запрос с требуемой линии. К сожалению, в конфигурационных регистрах не нашлось стандартного места для бита, индицирующего введение запроса прерывания данным устройством, - тогда бы в прерываниях для PCI не было бы проблем с унификацией поддержки разделяемых прерываний.

Каждая функция устройства PCI может задействовать свою линию запроса прерывания, но должно быть готовым к ее разделению (совместному использованию) с другими устройствами. Если устройству требуется только одна линия запроса, то оно должно занимать линию INTA# , если две - INTA# и INTB# , и так далее. С учетом циклического сдвига линий запроса это правило позволяет установить в 4 соседних слота 4 простых устройства, и каждое из них будет занимать отдельную линию запроса прерывания. Если какой-то карте требуется две линии, то для монопольного использования прерываний нужно оставить соседний слот свободным. PCI-устройства системной платы тоже задействуют прерывания с той же закономерностью (кроме контроллера IDE, который, к счастью, держится особняком).

Назначение прерываний устройствам (функциям) выполняет процедура POST, и этот процесс управляем лишь частично. Параметрами CMOS Setup (PCI/PNP Configuration) пользователь определяет номера запросов прерываний, доступных шине PCI. В зависимости от версии BIOS это может выглядеть по- разному; либо каждой линии INTA# … INTD# явно назначается свой номер, либо ряд номеров отдается «на откуп» устройствам PCI вместе с устройствами ISA PnP (в противоположность устройствам «Legacy ISA»). В итоге POST определяет соответствие линий INTA# … INTD# номерам запросов контроллера и соответствующим образом программирует коммутатор запросов. По воле пользователя может оказаться так, что не каждой линии запроса шины PCI достается отдельный вход контроллера прерываний. Тогда коммутатор организует объединение нескольких линий запросов PCI на один вход контроллера, то есть разделяемые прерывания. В самом худшем случае устройствам PCI не достанется ни одного входа контроллера прерываний. Заметим, что BIOS вряд ли отдаст шине PCI прерывания 14 и 15 (их забирает контроллер IDE, если он не отключен), а также 3 и 4 (СОМ-порты).

Драйвер (или иное ПО), работающий с устройством PCI, определяет вектор прерывания, доставшийся устройству (точнее, функции), чтением конфигурационного регистра Interrupt Line . В этом регистре указывается номер входа контроллера прерывания (255 - номер не назначен), и по нему определяется вектор (см. п. 12.4). Номер входа каждому устройству заносит тест POST. Для этого он считывает регистр Interrupt Pin каждой обнаруженной функции и по адресу устройства (!) определяет, какая из линий (PCI_1…PCI_4) используется. Заметим, что правила, по которым на системной плате определяется соответствие между Interrupt Pin и входными линиями коммутатора запросов в зависимости от номера устройства, строго не регламентированы (деление номера устройства на 4 - это всего лишь рекомендация), но их твердо знает версия BIOS данной системной платы. К этому моменту тест POST уже определил таблицу соответствия этих линий номерам входов; пользуясь этой таблицей, он записывает нужное значение в конфигурационный регистр Interrupt Line . Определить, есть ли еще претенденты на тот же номер прерывания, можно, лишь просмотрев конфигурационные регистры функций всех устройств, обнаруженных на шине (это не так уж сложно сделать, пользуясь функциями PCI BIOS). «Прелести» разделяемых прерываний обсуждаются в п. 12.4.1.

Спасением от бед «разделяемости» может быть перестановка карт в подходящий слот. Однако попадаются «подарки разработчиков» интегрированных плат, у которых из нескольких слотов PCI неразделяемая линия прерывания есть только у одного (а то и нет вообще). Такие недуги без скальпеля и паяльника, как правило, не лечатся.

На шине PCI имеется и иной механизм оповещения об асинхронных событиях, основанный на передаче сообщений (PCI Message-Based Interrupts). Для сигнализации запроса прерывания устройство запрашивает управление шиной и, получив его, выполняет запись номера прерывания по заранее оговоренному адресу.

Этот механизм может использоваться на системных платах, имеющих «продвинутый» контроллер прерываний APIC. Запись номера запроса производится в соответствующий регистр APIC. Для системных плат на чипсете с хабом ICH2 82801 этот регистр находится по адресу памяти FEC00020h, а номер прерывания может быть в диапазоне 0-23h. Однако одновременно оба механизма работать не могут; если разрешена работа APIC, то логика контроллеров 8259 не используется, и наоборот.

6.2.7. Прямой доступ к памяти, эмуляция ISA DMA (PC/PCI)

Как было сказано выше, шина 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# , во втором - активность запроса DRQ0 , затем DRQ1 и так далее до DRQ7 , после чего сохраняется низкий уровень REQ# . На это сообщение арбитр ответит по линии GNTi# посылкой, также начинающейся со старт-бита, за которой последуют три бита кода номера канала, которому дается подтверждение DACK# для передачи данных в этой транзакции. Агент должен сообщать арбитру обо всех изменениях линий запроса, в том числе и о снятии сигналов запроса. Механизм PC/PCI DMA может быть реализован только в чипсете системной платы.

6.2.8. Электрический интерфейс, слоты и карты PCI

Для работы на шине PCI используются микросхемы КМОП (CMOS), причем имеются две спецификации: с напряжениями питания интерфейсных схем 5 и 3,3 В. Для них применимы параметры сигналов на постоянном токе, приведенные в табл. 6.13. Однако мощность интерфейсных элементов (транзисторов для вентилей) выбрана меньшей, чем требовалось бы для переключения сигналов на высокой частоте (33 или 66 МГц). Здесь используется эффект отражения сигналов, формируемых микросхемами на проводниках шины, от несогласованных концов этих проводников, являющихся для таких высоких частот длинными линиями. На концах проводников шины нет терминаторов, поэтому от них приходящая волна сигнала отражается с тем же знаком и с той же амплитудой. Складываясь с прямым сигналом, обратная волна и обеспечивает нужный приемнику уровень сигнала. Таким образом, передатчик генерирует сигнал, который до прихода отраженного находится между уровнями переключения.

Таблица 6.13 . Параметры интерфейсных сигналов на постоянном токе

Параметр 5 В 3,3 В
Входное напряжение низкого уровня, В –0,5 –0,5
Входное напряжение высокого уровня, В 2?U IH ?V CC +0,5 V CC /2?U IH ?V CC +0,5
Выходное напряжение низкого уровня, В U IL ?0,55 U OL ?0,1?V CC
Выходное напряжение высокого уровня, В U OH ?0,8 U OH ?0,9?V CC
Напряжение питания V CC , В 4,75?U CC ?5,25 3,3?U CC ?3,6

Линии управляющих сигналов FRAME# , TRDY# , IRDY# , DEVSEL# , STOP# , SERR# , PERR# , LOCK# , INTA# , INTB# , INTC# , INTD# , REQ64# и ACK64# на системной плате подтягиваются к шине питания резисторами (типично 2,7 кОм для версии 5 В и 8,2 кОм для 3,3 В), чтобы не было ложных срабатываний при пассивности всех агентов шины.

Электрическая спецификация рассчитана на два предельных варианта нагрузки одной шины: 2 устройства PCI на системной плате плюс 4 слота или 4 устройства и 2 слота. При этом подразумевается, что одно устройство на каждую линию шины PCI дает только единичную КМОП-нагрузку. В слоты могут устанавливаться карты, тоже дающие только единичную нагрузку. На длину проводников, а также топологию расположения элементов и проводников на картах расширения накладываются жесткие ограничения. Из-за этого изготовление самодельных карт PCI на логических микросхемах средней степени интеграции становится проблематичным.

Слоты PCI представляют собой щелевые разъемы, имеющие контакты с шагом 0,05 дюйма. Слоты расположены несколько дальше от задней панели, чем ISA/EISA или MCA. Компоненты карт PCI расположены на левой поверхности плат. По этой причине крайний PCI-слот обычно совместно использует посадочное место адаптера (прорезь на задней стенке корпуса) с соседним ISA-слотом. Такой слот называют разделяемым (shared slot), в него может устанавливаться либо карта ISA, либо PCI.

Карты PCI могут предназначаться для уровня интерфейсных сигналов 5 В и 3,3 В, а также быть универсальными. Слоты PCI имеют уровни сигналов, соответствующие питанию микросхем PCI-устройств системной платы: либо 5 В, либо 3,3 В. Во избежании ошибочного подключения слоты имеют ключи, определяющие номинал напряжения. Ключами являются пропущенные ряды контактов 12,13 и 50, 51. Для слота на 5 В ключ расположен на месте контактов 50, 51; для 3,3 В - 12, 13. На краевых разъемах карт PCI имеются ответные прорези на месте контактов 50,51 (5 В) и 12,13 (3,3 В); на универсальной карте имеется оба ключа. Ключи не позволяют установить карту в слот с неподходящим напряжением питания. Карты и слоты различаются лишь питанием буферных схем, которое поступает с линий +V I/O:

На слоте «5 В» на линии +V I/O подается +5 В;

На слоте «3,3 В» на линии +V I/O подается +(3,3–3,6) В;

На карте «5 В» буферные микросхемы рассчитаны только на питание +5 В;

На карте «3,3 В» буферные микросхемы рассчитаны только на питание +(3,3–3,6) В;

На универсальной карте буферные микросхемы допускают оба варианта питания и будут нормально формировать и воспринимать сигналы по спецификациям 5 или 3,3 В, в зависимости от типа слота, в который установлена карта.

На слотах обоих типов присутствуют питающие напряжения +3,3, +5, +12 и -12В на одноименных линиях. В PCI 2.2 определена дополнительная линия 3.3Vaux - «дежурное» питание +3,3 В для устройств, формирующих сигнал РМЕ# при отключенном основном питании.

На системных платах чаще всего встречаются 5-вольтовые 32-битные слоты, заканчивающиеся контактами А62/В62; 64-битные слоты встречаются реже, они длиннее и заканчиваются контактами А94/В94. Конструкция разъемов и протокол позволяют устанавливать 64-битные карты и в 32-битные разъемы, и наоборот, но при этом, естественно, обмен будет в 32-битном режиме.

Тактовая частота шины определяется по возможностям чипсета и всех абонентов шины. Высокая частота 66 МГц может устанавливаться тактовым генератором только при высоком уровне на линии M66EN . Таким образом, установка любой карты, не поддерживающей 66 МГц (с заземленным контактом B49), приведет к понижению частоты, шины до 33 МГц. Серверные системные платы, на которых имеется несколько шин PCI, позволяют использовать на разных шинах разные частоты (66 и 33 МГц). Так, например, можно на 64-битных слотах использовать частоту 66 МГц, а на 32-битных - 33. Разгон нормальной частоты 33 МГц до 40–50 МГц аппаратно не контролируется, но может приводить к ошибкам работы карт расширения.

На рис. 6.8 изображена 32-битная карта максимального размера (Long Card), длина короткой платы (Short Card) - 175 мм, но многие карты имеют и меньшие размеры. Карта имеет обрамление (скобку), стандартное для конструктива ISA (раньше встречались карты и с обрамлением в стиле MCA IBM PS/2). Назначение выводов универсального разъема приведено в табл. 6.14.

Рис. 6.8 . Карта расширения для шины PCI

Таблица 6.14 . Разъемы шины PCI

Ряд В Ряд A Ряд В Ряд A
-12В 1 TRST# GND/M66EN? 49 AD9
TCK 2 +12В GND/Ключ 5 В 50 GND/Ключ 5 В
GND 3 TMS GND/Ключ 5 В 51 GND/Ключ 5 В
TDO 4 TDI AD 8 52 С/ВЕ0#
+5 8 5 +5 В AD 7 53 +3,3 В
+5 В 6 INTA# +3,38 54 AD 6
INTB# 7 INTC# AD 5 55 AD 4
INTD# 8 +5 В AD 3 56 GND
PRSNT1# 9 Резерв GND 57 AD 2
Резерв 10 +V I/O AD 1 58 AD 0
PRSNT2# 11 Резерв +V I/O 59 +V I/O
GND/Ключ 3,3 В 12 GND/Ключ 3,3В ACK64# 60 REQ64#
GND/Ключ 3,3 В 13 GND/Ключ 3,3 В +5 В 61 +5 В
Резерв 14 3.3Vaux? +5 В 62 +5 В
GND 15 RST# Конец 32-битного разъема
CLK 16 +V I/O Резерв 63
GND 17 GNT# GND 64 C/BE7#
REQ# 18 GND С/ВЕ6# 65 C/BE5#
+V I/O 19 PME#? С/BE4# 66 +V I/O
AD 31 20 AD 30 GND 67 PAR64
AD 29 21 +3,3 В AD 63 68 AD 62
GND 22 AD 28 AD 61 69 GND
AD 27 23 AD 26 +V I/O 70 AD 60
AD 25 24 GND AD 59 71 AD 58
+3,3 В 25 AD 24 AD 57 72 GND
C/BE3# 26 IDSEL GND 73 AD 56
AD 23 27 +3,3 8 AD 55 74 AD 54
GND 28 AD 22 AD 53 75 +V I/O
AD 21 29 AD 20 GND 76 AD 52
AD 19 30 GND AD 51 77 AD 50
+3.3 В 31 AD 18 AD 49 78 GND
AD 17 32 AD 16 +V I/O 79 AD 48
С/BE2# 33 +3,3 В AD 47 80 AD 46
GND 34 FRAME# AD 45 81 GND
IRDY# 35 GND GND 82 AD 44
+3,3 В 36 TRDY# AD 43 83 AD 42
DEVSEL# 37 GND AD 41 84 +V I/O
GND 38 STOP# GND 85 AD 40
LOCK# 39 +3,3 В AD 39 86 AD 38
PERR# 40 (SDONE#)? AD 37 87 GND
+3,3 В 41 (SBOFF#)? +V I/O 88 AD 36
SERR# 42 GND AD 35 89 AD 34
+3,3 В 43 PAR AD 33 90 GND
C/BE1# 44 AD 15 GND 91 AD 32
AD 14 45 +3,3 В Резерв 92 Резерв
GND 46 AD 13 Резерв 93 GND
AD 12 47 AD 11 GND 94 Резерв
AD 10 48 GND Конец 64-битного разъема

Сигнал M66EN определен в PCI 2.1 только для слотов на 3,3 В.

Сигнал введен в PCI 2.2 (прежде был резерв).

Сигналы упразднены в PCI 2.2 (для совместимости на системной плате подтягиваются к высокому уровню резисторами 5 кОм).

На слотах PCI имеются контакты для тестирования адаптеров по интерфейсу JTAG (сигналы TCK , TDI , TDO , TMS и TRST#). На системной плате эти сигналы задействованы не всегда, но они могут и организовывать логическую цепочку тестируемых адаптеров, к которой можно подключить внешнее тестовое оборудование. Для непрерывности цепочки на карте, не использующей JTAG, должна быть связь TDI - TDO .

На некоторых старых системных платах позади одного из слотов PCI имеется разъем Media Bus, на который выводятся сигналы ISA. Он предназначен для размещения на графическом адаптере PCI звукового чипсета, предназначенного для шины ISA.

6.2.9. Иные конструктивы с шиной PCI

Шина PCI имеет и другие конструктивные исполнения; их спецификации доступны на сайте www.pcisig.org (правда, только для членов данной организации либо за деньги).

Low-Profile PCI - низкопрофильный вариант карты PCI с обычным разъемом, но измененной крепежной скобкой. Эти карты можно устанавливать вертикально (без переходника riser card) даже в низкопрофильные корпуса (например, 19" формата высотой 2U). Для этих карт предусматривается напряжение питания интерфейсных схем только 3,3 В (но шина питания 5 В сохраняется).

Small PCI (SPCI ) - спецификация PCI в миниатюрном исполнении, прежде называвшаяся SFF PCI (Small Form-Factor). Эта спецификация, предназначенная, в основном, для портативных компьютеров, логически совпадает с обычной шиной PCI. Шина 32-битная, 64-битное расширение не предусматривается, и при частоте 33 МГц обеспечивается пропускная способность 132 Мбайт/с. Как и на всех шинах PCI/здесь поддерживается прямое управление (bus mastering). В дополнение к обычному набору сигналов появился новый - CLKRUN , с помощью которого хост и устройства могут управлять частотой синхронизации в интересах энергосбережения. По размерам карта SPCI совпадает с PC Card и Card Bus, но специальные ключи предотвращают ошибки подключения. Для подключения карт SPCI на системной плате устанавливается двухрядный 108-контактный штырьковый разъем с шагом контактов 2 мм. Карта расширения может подключаться к нему непосредственно, но также может использоваться переходник с двусторонними ленточными контактами с шагом 0,8 мм. Шина SPCI является внутренней (карты расширения находятся под крышкой корпуса и устанавливаются изготовителем при выключенном питании) и поэтому не нацелена на замену Card BUS (шина для внешних подключений с возможностью горячей замены). Карты SPCI могут быть трех видов: с питанием 5 В, 3,3 В и универсальные 5/3,3 В. Благодаря уменьшению размеров (длины проводников) понижены требования к мощности сигналов. Карты SPCI позволяют использовать преимущества модульных решений (можно разгрузить системную плату), обеспечивая высокую производительность обмена (чего не обеспечивает Card Bus).

Mini PCI Specification - малогабаритный вариант карт PCI (2,75"?1,81"?0,22"). Логически и электрически соответствует PCI (32 бит), дополнительно используя сигнал CLKRUN для снижения энергопотребления и без сигналов JTAG. Имеет дополнительные сигналы для аудио- и видеоприменений.

PCI–X - спецификация шины с высокой пропускной способностью, достигающей 1 Гбайт/с: тактовая частота 133 МГц и разрядность 64 бит. Разработана с учетом совместимости шины со старыми устройствами и новыми устройствами с обычной шиной PCI, для чего при наличии в системе хоть одного из «тихоходных» компонентов частота понижается до обычных 66 или 33 МГц. Кроме повышения тактовой частоты, имеются нововведения в протоколе шины (например, расщепленные транзакции), повышающие эффективность ее использования.

Для устройств промышленного назначения в начале 1995 года был принят стандарт Compact PCI . Шина Compact PCI (cPCI) разрабатывалась на основе спецификации PCI 2.1. Этот стандарт принят организацией производителей промышленных компьютеров PCIMG (PCI Industrial Computer Manufacturers Group). Шина отличается большим количеством поддерживаемых слотов: 8 против 4. Появились новые 4 пары сигналов запросов и предоставления управления шиной.

Шина поддерживает 32-битный и 64-битный обмен (с индивидуальным разрешением байт). При частоте шины 33 МГц максимальная пропускная способность составляет 133 Мбайт/с для 32 бит и 266 Мбайт/с для 64 бит (в середине пакетного цикла). Возможна работа на частоте 66 МГц. Шина поддерживает спецификацию PnP. Кроме того, в шине возможно применение географической адресации, при этом адрес модуля (на который он отзывается при программном обращении) определяется его положением в каркасе. Для этого на коннекторе J1 имеются контакты GA0…GA4, коммутацией которых на «землю» для каждого слота задается его двоичный адрес. Географическая адресация позволяет переставлять однотипные модули, не заботясь о конфигурировании их адресов (хорошая альтернатива системе PnP - модуль «встанет» всегда в одни и те же адреса, которые без физического вмешательства больше не изменятся). Конструктивно платы Compact PCI представляют собой еврокарты высотой 3U (100?160 мм) с одним коннектором (J1) или 6U (233?160 мм) с двумя коннекторами (J1 и J2). Коннекторы - 7-рядные штырьковые разъемы с шагом 2 мм между контактами, на кросс-плате - вилка, на модулях - розетки. Контакты коннекторов имеют разную длину: более длинные контакты цепей питания при установке модуля соединяются раньше, а при вынимании разъединяются позже, чем сигнальные. Такое решение позволяет производить «горячую» замену модулей. Собственно шина использует только один коннектор (J1), причем в 32-битном варианте не полностью - часть контактов может задействовать пользователь. 64-битная шина использует коннектор полностью. Одно посадочное место на кросс-плате резервируется под контроллер шины, на который возлагаются функции арбитража и синхронизации. На его коннекторе шиной используется большее число контактов, чем на остальных. У больших плат коннектор J2 предоставляется пользователю, а между коннекторами J1 и J2 может устанавливаться 95-контактный коннектор J3. Конструкция коннекторов позволяет для J2 применять специфические модификации (например, с разделяющим экраном и механическими ключами). В шине предусматривается наличие независимых источников питания +5 В, +3,3 В и ±12 В.

На базе шины Compact PCI фирмой National Instruments разработана спецификация PXI (PCI extensions for Instrumentation - расширение PCI для инструментальных систем) в тех же конструктивах. В шине PXI часть контактов, определенных в Compact PCI как свободные, предназначаются для дополнительных шин. Шина Trigger Bus (8 линий) звездообразно соединяет слот своего контроллера (первый после системного контроллера PCI) с остальными слотами. Шина позволяет осуществлять синхронизацию разных модулей, что зачастую требуется в измерительных системах. Для прецизионной синхронизации имеется сигнал опорной частоты 10 МГц PXI_CLK , который звездообразно (с одинаковыми задержками распространения сигнала) разводится по слотам. В PXI определены локальные шины, предназначенные для связи соседних пар слотов. Каждая локальная шина имеет 13 линий, которые могут использоваться как для цифровых, так и аналоговых (до 48 В) сигналов. Локальные шины объединяют смежные слоты попарно (исключая слот системного контроллера), образуя цепочку. Кроме механических и электрических характеристик PXI определяет ПО модулей: основной ОС считается Windows NT/95, и модули должны поставляться с соответствующими драйверами. Это экономит время, необходимое для системной интеграции. Модули PXI совместимы с шиной Compact PCI, и модули Compact PCI - с шиной PXI. Однако все преимущества спецификации реализуются только при установке модулей PXI в шину PXI.

6.2.10. Мосты PCI

Для соединения шины PCI с другими шинами и между собой применяются специальные аппаратные средства - мосты PCI (PCI Bridge ). Главный мост (Host Bridge ) используется для подключения PCI к системной шине (системной памяти и процессору), одноранговый мост (Peer-to-Peer Bridge ) - для соединения двух шин PCI.

Соединения нескольких шин PCI характерно для серверов - таким образом увеличивают число подключаемых устройств. Мосты образуют иерархию шин, на вершине которой находится главная шина с нулевым номером. Главный мост чипсета системной платы может соединять центр (процессор и память) с несколькими равноранговыми шинами PCI, из которых условно главной будет шина с нулевым номером. Для подключения шин PCMCIA, CardBus, MCA, ISA/EISA, X-Bus и LPC используются специальные мосты, входящие в чипсеты системных плат или же являющиеся отдельными устройствами PCI (микросхемами). Мосты выполняют преобразование интерфейсов соединяемых ими шин, синхронизацию и буферизацию обменов данных. Мосты (включая и мосты PCI-PCI) допускают различие частот синхронизации на соединяемых ими шинах.

Каждый мост программируется - ему указываются диапазоны адресов в пространствах памяти и ввода-вывода, отведенные устройствам его шин. Если адрес ЦУ текущей транзакции на одной шине (стороне) моста относится к шине противоположной стороны, мост перенаправляет транзакцию на соответствующую шину и обеспечивает согласование протоколов шин. Таким образом, совокупность мостов PCI выполняет маршрутизацию (routing) обращений по связанным шинам. Считается, что устройство с конкретным адресом может присутствовать только на одной из шин, а на какой именно, «знают» запрограммированные мосты. Решать задачу маршрутизации призван также сигнал DEVSEL# . Обращения, не востребованные абонентами PCI, могут быть перенаправлены, например, на шину ISA/EISA.

С мостами связаны понятия позитивного и субтрактивного декодирования адресов. Рядовые агенты PCI (устройства и мосты) отзываются только на обращения по адресам, принадлежащим областям, описанным в их конфигурационном пространстве (через базовые адреса и диапазоны памяти или ввода-вывода). Такой способ декодирования называется позитивным. Мост с позитивным декодированием (positive decoding ) пропускает через себя только обращения, принадлежащие определенному списку, заданному в его конфигурационных регистрах. Мост с субтрактивным декодированием (subtractive decoding ) пропускает через себя обращения, не относящиеся к другим устройствам. Его области прозрачности формируются вычитанием (откуда и название) из общего пространства областей, описанных списком. Возможность субтрактивного декодирования имеется только у мостов определенного типа, и она является дополнением к позитивному декодированию.

Позитивное и субтрактивное декодирование относится только к обращениям, направленным в пространства памяти и ввода-вывода. Конфигурационные обращения маршрутизируются с помощью номера шины, передаваемого в циклах типа 1 (см. п. 6.2.11): каждый мост «знает» номера всех шин, его окружающих.

На каждой шине PCI должно присутствовать центральное устройство, выполняющее следующие функции:

Централизованный арбитраж - прием сигналов запроса REQx# от ведущих устройств шины и предоставление им права на управление шиной сигналами GNTx# ;

? «подтягивание» управляющих сигналов к высокому уровню;

Субтрактивное декодирование адресов;

Генерация конфигурационных и специальных циклов по командам процессора (с формированием индивидуальных сигналов IDSEL к адресуемому устройству PCI);

Формирование сигнала REQ64# в момент окончания сброса в качестве признака 64-битной шины (если она таковая).

Эти функции, как правило, возлагаются на мост, соединяющий данную шину с более высокими уровнями иерархии шин PCI. Кроме выполнения этих функций, обслуживающих конкретную шину, мосты решают задачи оптимизации передачи данных между подсистемами компьютера, и от качества решения этих задач существенно зависит общая производительность системы.

Одной из особенностей применения шины PCI с ее мостовыми соединениями является возможность действительно одновременного выполнения более одного обмена данными по непересекающимся путям - Concurrent PCI Transferring или PCI Concurrency. Например, во время взаимодействия процессора с памятью ведущее устройство шины PCI может обмениваться данными с другим устройством PCI. Этот пример одновременности обмена скорее теоретический, поскольку ведущее устройство шины PCI, как правило, обменивается данными с системной памятью. Более интересный случай - обмен графического адаптера, подключенного к порту AGP (родственнику PCI, см. п. 6.3), с памятью одновременно с обменом процессора с устройством PCI или, наоборот, загрузка данных процессором в графический адаптер одновременно с обменом между ведущим устройством шины PCI и системной памятью. Одновременность требует довольно сложной логики централизованного арбитража запросов всех агентов системы и различных ухищрений в буферизации данных. Одновременность реализуется не всеми чипсетами (в описаниях она всегда специально подчеркивается) и может быть запрещена настройками CMOS Setup.

Для экономии полосы пропускания шины (уменьшения числа бесполезно занятых тактов) при обращениях к устройствам медленных шин (например, ISA) мост может выполнять отложенные транзакции (delayed transaction ). Работает этот механизм следующим образом. Инициатор, расположенный на «быстрой» шине (это может быть и главный мост), обращается к ЦУ на медленной шине, выставляя адрес и команду, а в командах записи еще и данные. Мост сохраняет эту информацию в своих внутренних регистрах и «от имени ЦУ» вводит сигнал STOP# (прекращение типа «повтор»), что вынуждает инициатор быстро освободить шину. Тем временем мост выполняет транзакцию с настоящим ЦУ и сохраняет у себя результат ее выполнения (для команд чтения это будут данные). Инициатор, получивший ответ «повтор», вынужден снова начать точно ту же транзакцию, и теперь на нее мост быстро ответит истинным результатом, полученным от ЦУ. В то время как мост выполняет длительную операцию обмена с медленным устройством, быстрая шина остается свободной для обслуживания других инициаторов. Если по каким-либо причинам ведущее устройство «забудет» выполнить повтор транзакции, мост должен аннулировать полученные результаты. Аннулирование выполняется по таймеру (discard timer), отсчитывающему время от начала отложенной транзакции до ее повтора. Отложенные транзакции применимы к командам обращения к портам, конфигурационному пространству, подтверждению прерывания и к обычным обращениям к памяти.

Выделение специальных циклов чтения строк, множественного чтения и записи с инвалидацией позволяет контроллеру памяти предпринять определенные меры для оптимизации данных передач. Однако эти инструкции применяют только для обращений к памяти в «чистом виде» (имеющей свойство Prefetchable). Когда инициатор обращается к источнику данных, отделенному мостом, командами чтения строки или множественного чтения, мост может считать из источника данных больше, чем инициатор заберет от него в данной транзакции. Однако в конце транзакции лишние данные в буфере моста проще всего аннулировать, поскольку до возможного последующего востребования в их реальном источнике они могут быть уже модифицированы. Более сложный мост может отслеживать и эти изменения, аннулируя лишь модифицированные данные. Обращения командами обычного чтения памяти разрешают мосту считать только точно затребованное количество данных. При этом возможности ускорения передач меньше, но не возникнет побочных эффектов от лишних чтений (чтение управляющих регистров, отображенных на память, может изменять их состояние).

Мосты, инициированные на одной стороне и обращающиеся к целевому устройству на другой стороне, могут выполнять задержку передачи записи в память (posted write ). При этом данные принимаются в буферы моста, и для инициатора транзакция завершится раньше, чем данные дойдут до реального получателя. Мост начнет транзакцию их доставки в удобное для другой стороны время. Порядок и количество байт, переданных получателем, обязательно должны совпадать с соответствующими данными инициатора обмена. Кроме того, сохраняется очередность операций записи и чтения. Обращение по чтению через мост вызывает принудительное освобождение буферов отложенной записи. Таким образом, инициатор имеет возможность принудительно вызвать доставку задержанных данных записи, выполняя операцию чтения «из-за моста». Записи в порты ввода-вывода откладывать имеет право только главный мост, но только для транзакций, инициированных центральным процессором. Операции чтения, естественно, выполняются сразу, поскольку без получения данных они бессмысленны.

Мосты могут преобразовывать транслируемые ими транзакции записи в память с целью оптимизации пропускной способности шины. Так, несколько последовательных транзакций записи могут объединяться в одну пакетную, в которой лишние записи могут блокироваться с помощью сигналов разрешения байтов. Например, последовательность одиночных записей двойных слов по адресам 0, 4, Ch может быть скомбинирована (write combining ) в один пакет с начальным адресом 0, а во время третьей фазы данных (когда предполагается не требуемый адрес 8) все сигналы С/BE# пассивны. Записи отдельных байтов в определенных случаях могут быть объединены (byte merging) в одну транзакцию. Так, например, последовательность записей байтов по адресам 3, 1, 0 и 2 может быть объединена в одну запись двойного слова, поскольку эти байты принадлежат одному адресуемому двойному слову. Комбинирование и объединение могут работать независимо (объединенные транзакции могут комбинироваться), однако эти преобразования не изменяют порядок следования физических записей в устройства. Наличие этих возможностей не обязательно - оно зависит от «ловкости» мостов. Цель преобразований - сократить число отдельных транзакций (каждая имеет по крайней мере одну «лишнюю» фазу адреса) и, по возможности, фаз данных. Устройства PCI должны нормально отрабатывать комбинирование записей - если устройство не допускает комбинирования, оно неправильно спроектировано. Если устройство не допускает объединения байтов, то оно в описании своей памяти должно иметь обнуленным бит Prefetchable .

С мостами PCI связано понятие VGA Palette Snooping - слежение за записью в палитры VGA, являющееся исключением из правила однозначной маршрутизации обращений к памяти и вводу-выводу. Графическая карта в компьютере с шиной PCI обычно устанавливается в эту шину или в порт AGP, что логически эквивалентно установке в шину PCI. На VGA-карте имеются регистры палитр (Palette Registers), традиционно приписанные к пространству ввода-вывода. Если графическая система содержит еще и карту смешения сигналов графического адаптера с сигналом «живого видео», перехватывая двоичную информацию о цвете текущего пиксела по шине VESA Feature Connector (снимаемую до регистра палитр), цветовая гамма будет определяться регистром палитр, размещенным на этой дополнительной карте. Возникает ситуация, когда операция записи в регистр палитр должна отрабатываться одновременно и в графическом адаптере (на шине PCI или AGP), и в карте видеорасширения, которая может размещаться даже на другой шине (в том числе и ISA). В CMOS Setup может присутствовать параметр PCI VGA Palette Snoop . При его включении запись в порты ввода-вывода по адресу регистра палитр будет вызывать транзакцию не только на той шине, на которой установлен графический адаптер, но и на других шинах. Чтение же по этим адресам будет выполняться только с самим графическим адаптером. Реализация может возлагаться на графическую карту PCI. Для этого она во время записи в регистр палитр фиксирует данные, но сигналы квитирования DEVSEL# и TRDY# не вырабатывает, в результате мост распространяет этот неопознанный запрос на шину ISA. В других реализациях мосту явно указывают на данное исключение, и он сам распространяет запись в регистры палитр на другие шины.

6.2.11. Программный доступ к конфигурационному пространству и генерация специальных циклов

Поскольку конфигурационное пространство PCI обособлено, в главный мост приходится вводить специальный механизм доступа к нему командами процессора, который «умеет» обращаться только к памяти или вводу-выводу. Этот же механизм используется и для генерации специальных циклов. Для PC-совместимых компьютеров предусмотрено два механизма, из которых в спецификации 2.2 оставлен только первый (Configuration Mechanism #1). Номер механизма, которым пользуется конкретная системная плата, можно узнать путем вызова PCI BIOS.

Конфигурационные циклы адресуются к конкретному устройству (микросхеме PCI), для которого должен быть сформирован сигнал выборки IDSEL (единичное значение). Номер функции и адрес регистра декодируется самим устройством. Поскольку сигнал IDSEL воспринимается устройством только в фазе адреса, для него используют позиционное кодирование в линиях старших битов шины AD (конфигурационное пространство всех устройств занимает лишь малую часть пространства с 32-битной адресацией). На этих линиях в фазе адреса конфигурационного обращения может быть лишь один единичный бит, остальные - нулевые. Таким образом, только одно устройство будет выбрано сигналом IDSEL .

Для работы механизма № 1 в пространстве ввода-вывода зарезервированы 32-битные порты с адресами 0CF8H и 0CFCh, входящие в главный мост. Для обращения к конфигурационному пространству в порт CONFIG_ADDRESS (RW, адрес CF8h) заносят 32-разрядный адрес, декодируемый в соответствии с рис. 6.9, а . После занесения адреса обращением к порту CONFIG_DATA (RW, адрес CFCh) можно прочитать или записать содержимое требуемого конфигурационного регистра. В регистре CONFIG_ADDRESS бит 31 является разрешением формирования конфигурационных и специальных циклов. В зависимости от номера шины, указанного в этом регистре, главный мост генерирует конфигурационные циклы одного из двух типов.

Для обращения к устройству, находящемуся на нулевой шине (подключенной к главному мосту), используется цикл типа 0 (биты 1:0=00). Главный мост декодирует поле номера устройства в позиционный код, помещаемый на линии AD ; номер адресуемой функции, адрес регистра и биты 1:0=00 передаются на шину прозрачно (рис. 6.9, б ). Устройству 0 соответствует бит AD11, устройству 1 - AD12, устройству 20 - AD31. Поскольку нулевым устройством является главный мост, который и осуществляет декодирование, на шину единичное значение AD11 в цикле типа 0 не выводится. Устройства PCI, расположенные в микросхеме главного моста, могут использовать номера 21–31, для которых линий AD уже не хватает. На системной плате вход IDSEL каждого слота или микросхемы PCI-устройства соединяется со своей линией адреса. Как правило, слоты подключаются, начиная с линии AD31 (и «вниз»), микросхемы устройств PCI, расположенные на системной плате, подключаются, начиная с AD12 (и «вверх»), но может быть и иной порядок. Цикл типа 0 игнорируется всеми другими мостами, подключенными к нулевой шине.

Для обращения к устройству, находящемуся на ненулевой шине, используется цикл типа 1 . Здесь главный мост передает адресную часть регистра CONFIG_ADDRESS на главную шину PCI, обнуляя старшие биты (31:24) и устанавливая в битах 1:0 признак типа «01» (рис. 6.9, в ). Мост, опознавший номер подключаемой им шины, передает транзакцию на эту шину, декодируя поле номера устройства в позиционный код (как это делал главный мост для своей шины) и обнуляя биты AD .

Рис. 6.9 . Адресация конфигурационных циклов: а - формат регистра CONFIG_ADDRESS , б - формат адреса на шине в цикле типа 0, в - формат адреса на шине в цикле типа 1

Если конфигурационный цикл не воспринимается ни одним из устройств, мосты могут эту ситуацию отрабатывать двояко: фиксировать отсутствие устройства (сработает Master Abort ) или же выполнять операции вхолостую. Однако в любом случае чтение конфигурационного регистра несуществующего устройства (функции) должно возвращать значение FFFFFFFFh (это будет безопасной информацией, поскольку даст недопустимое значение идентификатора устройства).

Если главный мост подключает несколько равноранговых шин (peer buses), то одна из них назначается условно главной, так что вышеописанная логика сохраняется. Чтобы не заботиться об изучении реальной топологии шин, для конфигурационных обращений программам удобно использовать вызовы PCI BIOS, которые имеются для всех режимов процессора (оптимизировать быстродействие здесь не приходится, поскольку эти обращения выполняются не так уж и часто).

Специальный цикл генерируется при записи в CONFIG_DATA , когда в регистре CONFIG_ADDRESS все биты единичные, нулевые, номер шины, на которой формируется цикл, задается битами . В специальном цикле адресная информация не передается (он широковещательный), но путем задания номера шины можно управлять его распространением. Если хост генерирует специальный цикл с нулевым адресом шины, то на главную шину этот цикл выйдет как цикл типа 0 и всеми остальными мостами распространяться не будет. Если требуется полная широковещательность, то хост должен записать ненулевой адрес шины; тогда на главную шину специальный цикл выйдет с типом 1, и все остальные мосты пропустят его на свои шины. Специальный цикл, генерируемый ведущим устройством шины, действует только на шине этого устройства и не распространяется через мосты. Если требуется полная широковещательность, это ведущее устройство должно генерировать специальный цикл посредством записей в регистры CONFIG_ADDRESS и CONFIG_DATA , задавая ненулевой номер шины.

Для работы механизма № 2 в пространстве ввода-вывода зарезервированы два 8-битных порта с адресами 0CF8H и 0CFAh, входящие в главный мост. Этот механизм использует отображение конфигурационного пространства устройств PCI на область C000-CFFF пространства ввода-вывода. Поскольку этой области (4 К портов) недостаточно для отображения конфигурационного пространства всех устройств всех шин PCI, формирование адреса выполняется весьма замысловатым образом. В регистре CSE (Configuration Space Enable) с адресом 0CFSh биты 7:4 являются ключом разрешения отображения: при нулевом ключе область С000-CFFFh остается нормальной частью пространства ввода-вывода, а при ненулевом - отображается на конфигурационное пространство. Биты несут номер функции, к пространству которой адресуются обращения. Единичное значение бита 1 вызывает формирование специального цикла (Special Cycle Enable, SCE). При обращении к конфигурационному пространству устройств нулевой шины чтение или запись двойного слова в порт по адресу C000-CFFCh генерирует конфигурационный цикл, в котором из адреса порта биты поступают на шину AD как индекс регистра конфигурационного пространства, а биты декодируются в позиционный код выбора устройства (линии IDSEL) на линиях AD. Номер функции на линии AD поступает из регистра CSE, линии AD нулевые. Для обращения к устройствам ненулевой шины служит регистр перенаправления (Forward Register) с адресом 0CFAh, в который помещают номер шины (по сбросу этот регистр обнуляется). Если номер шины ненулевой, то генерируется цикл типа 1 (см. рис. 6.9, в), в котором номер функции поступает из регистра CSE, младшие 4 бита номера устройства поступают с битов адреса (AD15=0), а номер шины - из регистра перенаправления (биты AD=01 и AD=0 формируются аппаратно).

Для генерации специального цикла по этому механизму в регистре CSE устанавливается ненулевой ключ, номер функции 111 и SCE=1, после чего выполняется запись по адресу порта CF00h. В зависимости от содержимого регистра перенаправления будет сгенерирован специальный цикл типа 0 или типа 1 (см. выше).

6.2.12. Конфигурирование устройств

В стандарт заложены возможности автоматического конфигурирования системных ресурсов (пространств памяти и ввода-вывода и линий запроса прерываний). Автоматическое конфигурирование устройств (выбор адресов и прерываний) поддерживается средствами BIOS и ориентировано на технологию PnP. Стандарт PCI определяет для каждого слота конфигурационное пространство размером до 256 регистров (8-битных), не приписанных ни к пространству памяти, ни к пространству ввода-вывода. Доступ к ним осуществляется по специальным циклам шины Configuration Read и Configuration Write , вырабатываемым с помощью одного из вышеописанных механизмов. В этом пространстве есть области, обязательные для всех устройств, и специфические. Конкретное устройство может иметь регистры не во всех адресах, но должно поддерживать нормальное завершение для адресуемых к ним операций. При этом чтение несуществующих регистров должно возвращать нули, а запись выполняться как холостая операция. После аппаратного сброса (или при включении питания) устройства PCI не отвечают на обращения к пространству памяти и ввода- вывода, они доступны только для операций конфигурационного считывания и записи. В этих операциях устройства выбираются по индивидуальным сигналам IDSEL и сообщают о потребностях в ресурсах и возможных вариантах конфигурирования. После распределения ресурсов, выполняемого программой конфигурирования (во время теста POST), в конфигурационные регистры устройства записываются параметры конфигурирования. Только после этого к устройствам становится возможным доступ по командам обращения к памяти и портам ввода-вывода. Для того чтобы всегда можно было найти работоспособную конфигурацию, все ресурсы, занимаемые картами, должны быть перемещаемыми в своих пространствах. Для многофункциональных карт каждая функция должна иметь собственное конфигурационное пространство.

Конфигурационное пространство устройства начинается со стандартного заголовка, в котором содержатся идентификаторы производителя, устройства и его класса, а также описание требуемых и занимаемых системных ресурсов. После заголовка могут располагаться регистры, специфичные для устройства; они могут занимать адреса конфигурационного пространства в пределах 40-FFh.

Формат заголовка приведен на рис. 6.10. Серым цветом здесь выделены поля, обязательные для всех устройств.

Рис. 6.10 . Формат заголовка конфигурационного пространства устройства PCI

Перечисленные ниже поля идентификации допускают только чтение.

Deviсе ID - идентификатор устройства, назначаемый производителем.

Vendor ID - идентификатор производителя микросхемы PCI, назначенный PCI SIG. Идентификатор FFFFh является недопустимым; это значение должно возвращаться при чтении конфигурационного пространства несуществующего устройства.

Revision ID - версия продукта, назначенная производителем. Используется как расширение поля Device ID .

Header Type - тип заголовка (биты 6:0), определяющий формат ячеек в диапазоне 10-3Fh и несущий признак многофункционального устройства (если бит 7=1). На рисунке приведен формат заголовка типа 0, относящийся именно к устройствам PCI. Тип 01 относится к мостам PCI-PCI; тип 02 относится к мостам для CardBus.

Class Code - код класса, определяющий основную функцию устройства, а иногда и его программный интерфейс (см. п. 6.2.13). Старший байт (адрес 0Bh) определяет базовый класс, средний - подкласс, младший - программный интерфейс (если он стандартизован).

Остальные поля заголовка являются регистрами устройств , допускающими как запись, так и чтение.

Command (RW) - регистр команд, управляющий поведением устройства на шине PCI. Регистр допускает как запись, так и чтение. После аппаратного сброса все биты регистра (кроме специально оговоренных исключений) обнулены. Назначение бит регистра команд:

Бит 0 - IO Space - разрешение ответа на обращения к пространству ввода-вывода;

Бит 1 - Memory Space - разрешение ответа на обращения к пространству памяти;

Бит 2 - Bus Master - разрешение работы инициатором (в режиме управления шиной);

Бит 3 - Special Cycles - разрешение реакции на специальные циклы;

Бит 4 - Memory Write and Invalidate enable - разрешение использовать команды «запись с инвалидацией» при работе инициатором (если бит обнулен, то вместо этих команд должна использоваться обычная запись в память);

Бит 5 - VGA palette snoop - разрешение слежения за записью в регистр палитр;

Бит 6 - Parity Error Response - разрешение нормальной реакции (вырабатывать сигнал PERR#) на обнаруженную ошибку паритета (если бит обнулен, то устройство должно только фиксировать ошибку в регистре состояния, в то время как генерация бита паритета устройством выполняется всегда);

Бит 7 - Stepping Control - возможность пошагового переключения (address/data stepping) линий (если устройство никогда этого не делает, бит регистра «запаян» в «0», если делает всегда - в «1», устройство с такой возможностью по сбросу устанавливает этот бит в «1»);

Бит 8 - SERR# Enable - разрешение генерации сигнала ошибки SERR# (ошибка паритета адреса сообщается, когда этот бит и бит 6=1);

Бит 9 - Fast Back-to-Back Enable (необязательный) - разрешение ведущему устройству использовать быстрые смежные обращения к разным устройствам (если бит обнулен, быстрые обращения допустимы лишь для транзакций с одним агентом);

Биты 10–15 - резерв.

Status - регистр состояния, допускающий кроме чтения еще и запись. Однако запись выполняется специфично - с ее помощью можно только обнулять биты, но не устанавливать. Биты, помеченные как RO, допускают только считывание. При записи в позиции обнуляемых бит устанавливаются единичные значения. Назначение бит регистра состояния:

Биты 0–3 - резерв;

Бит 4 - Capability List (RO, необязательный) - указание на наличие указателя новых возможностей (смещение 34h в заголовке);

Бит 5 - 66 MHz Capable (RO, необязательный) - поддержка частоты 66 МГц;

Бит 6 - резерв;

Бит 7 - Fast Back-to-Back Capable (RO, необязательный) - поддержка быстрых смежных транзакций (fast back-to-back) с разными устройствами;

Бит 8 - Master Data Parity Error (только для устройств с прямым управлением) - устанавливается, когда устройство с установленным битом 6 в регистре команд, являясь инициатором, само ввело (при чтении) или обнаружило (при записи) сигнал PERR# ;

Биты 10:9 - DEVSEL Timing - скорость выборки: 00 - быстрая, 01 - средняя, 10 - низкая (определяет самую медленную реакцию DEVSEL# на все команды, кроме Configuration Read и Configuration Write);

Бит 11 - Signaled Target Abort -устанавливается целевым устройством, когда оно отвергает транзакцию;

Бит 12 - Received Target Abort - устанавливается инициатором, когда он обнаруживает отвергнутую транзакцию;

Бит 13 - Received Master Abort - устанавливается ведущим устройством, когда оно отвергает транзакцию (кроме специального цикла);

Бит 14 - Signaled System Error - устанавливается устройством, подавшим сигнал SERR#;

Бит 15 - Detected Parity Error - устанавливается устройством, обнаружившим ошибку паритета.

Cache Line Size (RW) - размер строки кэша (0-128, допустимые значения 2 n , иные трактуются как 0). По этому параметру инициатор определяет, какой командой чтения воспользоваться (обычное чтение, чтение строки или множественное чтение). Ведомое устройство использует этот параметр для поддержки пересечения границ строк при пакетных обращениях к памяти. По сбросу регистр обнуляется.

Latency Timer (RW) - значение таймера задержки (см. п. 6.2.4) в тактах шины. Часть битов может не допускать изменения (обычно младшие три бита неизменны, так что таймер программируется с дискретностью в 8 тактов).

BIST (RW) - регистр управления встроенным самотестированием. Назначение бит регистра:

Бит 7 - возможность BIST;

Бит 6 - запуск теста: запись единицы инициирует тест, по окончании устройство сбрасывает бит (тест должен быть завершен не более чем за 2 с);

Биты 5:4 - резерв (0);

Биты 3:0 - код завершения теста: 0 - тест прошел успешно.

Card Bus CIS Pointer (необязательный) - указатель на структуру описателя Card Bus для комбинированного устройства PCI+Card Bus.

Interrupt Line (RW) - номер входа контроллера прерывания для используемой линии запроса (0-15 - IRQ0-IRQ15, 255 - неизвестный или не используется).

Interrupt Pin (RO) - контакт, используемый для запроса прерывания: 0 - не используется, 1 - INTA# , 2 - INTB# , 3 - INTC# , 4 - INTD# , 5-FFh - резерв.

Min_GNT (RO) - минимальное время, на которое ведущему устройству должно предоставляться управление шиной из расчета на частоту 33 МГц, в интервалах по 0,25 мкс.

Max_Lat (RO) - максимально допустимая задержка предоставления ведущему устройству доступа к шине, в интервалах по 0,25 мкс (0 - нет специальных требований).

Subsystem ID (задается производителем) и Subsystem Vendor ID (производитель получает в PCI SIG) - идентификаторы, позволяющие точно идентифицировать карты и устройства (в системе могут быть установлены несколько карт с совпадающими идентификаторами устройства и производителя Deviсе ID и Vendor ID). В поле 2Ch ставится идентификатор производителя карты PCI (может совпадать со значением в поле 0, если фирма выпускает и микросхемы, и карты).

Capability Pointer (CAP_PTR) - указатель на список возможностей (свойств), описанных в конфигурационном пространстве (биты 1:0=00). Каждый элемент списка начинается с байта идентификатора типа элемента (CAP_ID , определенного PCI SIG), за которым следует указатель на следующий элемент списка (нулевой указатель является признаком конца списка), после чего расположены байты описаний самих свойств. Все элементы выравниваются по границе двойного слова.

Base Address Registers - базовые адреса областей памяти и портов ввода-вывода. Для областей памяти бит 0=0. Биты 2:1 - тип: 00 - располагаются в 32-битном адресном пространстве, 10 - в 64-битном (в этом случае регистр расширяется следующим за ним 4-байтным словом), 01 и 11 - резерв (01 в прежних версиях предназначались для памяти в пределах первого мегабайта). Бит 3 (Prefetchable) устанавливается, если чтение памяти не приводит к побочным эффектам, все байты считываются независимо от сигналов BE# и отдельные записи мостом могут быть объединены (то есть это память в чистом виде); в иных случаях бит обнулен. Биты 31:4 - базовый адрес памяти. Для портов бит 0=1; бит 1=0 (резерв); биты 31:2 - базовый адрес блока портов. Конфигурирующая программа может определить размеры требуемых областей. Для этого после аппаратного сброса она должна считать и сохранить значения базовых адресов (это будут адреса по умолчанию), записать в каждый регистр FFFFFFFFh и снова считать их значение. В полученных словах нужно обнулить биты декодирования типа (биты 3:0 для памяти и биты 1:0 для ввода-вывода), инвертировать и инкрементировать полученное 32-битное слово - результатом будет длина области (для портов биты 31:16 игнорировать). Метод подразумевает, что длина области выражается числом 2 n и область выровнена естественным образом.

Expansion ROM Base Address - базовый адрес ПЗУ программной поддержки карты. Бит 0 - разрешение использования ПЗУ; биты 1-10 - резерв; биты 11–31 - базовый адрес. Размер ПЗУ определяется так же, как и в регистрах базовых адресов (см. выше). Обращение к ПЗУ возможно лишь при разрешенном использовании памяти (бит 1 в регистре команд).

6.2.13. Классы устройств PCI

Важной частью спецификации PCI является классификация устройств и указание кода класса в его конфигурационном пространстве (3 байта Class Code). Старший байт определяет базовый класс , средний - подкласс , младший - программный интерфейс (если он стандартизован). Код класса позволяет идентифицировать наличие определенных устройств в системе, это может быть сделано с помощью PCI BIOS. Для стандартизованных устройств (например, 01:01:80 - контроллер IDE или 07:00:01 - последовательный порт 16450) «заинтересованная» программа может найти требуемое устройство и выбрать подходящий вариант драйвера. Классификатор определяет организация PCI SIG, он регулярно обновляется на сайте www.pcisig.com. Нулевые значения полей, как правило, дают самые неопределенные описания. Значение подкласса 80h относится к «иным устройствам».

6.2.14. PCI BIOS

Для облегчения взаимодействия с устройствами PCI имеются дополнительные функции BIOS, доступные как из реального, так и защищенного режима работы процессора. Эти функции, предназначенные для работы с конфигурационным пространством и генерации специальных циклов PCI, приходится поддерживать потому, что циклы конфигурационных обращений, как и специальный цикл, выполняются специфическим образом (см. выше). Остальные функции взаимодействия с устройствами через их пространства памяти и ввода-вывода, а также обработка прерываний, в поддержке со стороны BIOS не нуждаются, поскольку выполняются непосредственно командами процессора. Функция проверки наличия PCI BIOS позволяет определить доступные механизмы генерации этих особых циклов, и, зная их работу, программа в дальнейшем может и не пользоваться вызовами PCI BIOS.

Программы с помощью функций PCI BIOS могут искать интересующие их устройства по идентификаторам или кодам класса. Если стоит задача «переучета» установленных устройств, то она решается чтением конфигурационной информации по всем функциям всех устройств всех шин - это быстрее, чем перебирать все возможные сочетания идентификаторов или классов кодов. Для найденных устройств программы должны определять реальные настройки чтением регистров конфигурационного пространства, учитывая возможность перемещения ресурсов по всему пространству и даже между пространствами памяти и ввода-вывода.

Функции PCI BIOS для 16-битного интерфейса реального режима, V86 и 16-битного защищенного режима, вызываются через прерывание Int 1Ah . Номер функции задается при вызове в регистре АХ. Возможна и программная имитация прерывания дальним вызовом по физическому адресу 000FFE6EH (стандартная точка входа в обработчик Int 1Ah) с предварительным занесением в стек регистра флагов. Для 32-разрядных вызовов защищенного режима все эти же функции вызываются через точку входа, найденную через каталог 32-разрядных сервисов, при этом назначение входных и выходных регистров и флага CF сохраняется. До использования 32-разрядного интерфейса следует сначала найти его каталог и убедиться в наличии сервисов PCI. Вызовы требуют глубокого стека (до 1024 байт).

Функции PCI BIOS:

АХ = B101h - проверка присутствия PCI BIOS;

АХ = B102h - поиск устройства по идентификатору;

АХ = B103h - поиск устройства по коду класса;

АХ = В106h - генерация специального цикла PCI;

АХ = B108, B109 и B10Ah - чтение байта, слова и двойного слова конфигурационного пространства устройства PCI;

АХ = Brahe, B10C, B10Dh - запись байта, слова и двойного слова конфигурационного пространства устройства PCI.

6.2.15. Разработка собственных устройств PCI

При рассмотрении протокола PCI становится ясно, что разработка собственных PCI-устройств на логике малой и средней степени интеграции - занятие неблагодарное. Собственно протокол шины не так уж и сложен, но реализация требований к конфигурационным регистрам проблематична. Серийные устройства PCI, как правило, являются однокристальными - в одной микросхеме размещается и интерфейсная, и функциональная части устройства. Разработка таких микросхем весьма дорогостояща и имеет смысл лишь с перспективами массового выпуска. Для создания отладочных образцов и мелкосерийных изделий ряд фирм выпускают интерфейсные микросхемы PCI различного назначения. Со стороны PCI практически все эти микросхемы поддерживают одиночные целевые транзакции (target transactions), совершенные модели допускают и пакетные циклы. Более сложные микросхемы выполняют и функции ведущего устройства шины, организуя каналы DMA для обмена с системной памятью. Обмены по этим каналам могут инициироваться как программно со стороны хоста (host initiated DMA), так и с периферийной стороны микросхемы (target initiated DMA), в зависимости от возможностей микросхем. С периферийной стороны встречаются интерфейсы для подключения периферийных микросхем, микроконтроллеров и распространенных семейств микропроцессоров, универсальных и сигнальных. Довольно широкий выбор микросхем представлен на сайте www.plxtech.com, этой темой занимаются и иные фирмы.

Интересно решение построения интерфейса PCI на конфигурируемой логике FPGA (Field Programmable Gate Array - программируемый массив вентилей). Здесь PCI-ядро, а также функции целевого и ведущего устройств занимают 10–15 тысяч вентилей в зависимости от требуемых функций (см. www.xilink.com, www.altera.com). Микросхемы FPGA выпускаются на 20, 30 и 40 тысяч вентилей - оставшаяся часть может быть использована для реализации функциональной части устройства, буферов FIFO и т.п.

Быстро перевести разработки с шиной ISA на PCI можно с помощью микросхем-мостов PCI–ISA (см., например, www.iss-us.com).

Любой ремонтник компьютеров знает, что POST Card PCI применяется для диагностики неисправностей при ремонте и модернизации компьютеров типа IBM PC (или совместимых с ним).

Такие карты в России и СНГ производит несколько компаний: Мастер Кит (Москва), e-KIT Post Cards, ACE Lab (Н.Новгород), BVG Group (Москва), ЕПОС: PCI TESTCARD (Украина), IC Book: IC80 (Украина), Jelezo: Jpost Full (Украина), VL Comp: PC Analyzer (Белорусия). Есть и зарубежные решения, но у нас их не найти в свободной продаже.

POST Card PCI представляет собой плату расширения компьютера, которая может быть установлена в любой свободный PCI слот (33 МГц) и предназначена для отображения POST кодов, генерируемых BIOS"ом компьютера, в удобном для пользователя виде.

Условно все POST-карты можно разделит на серийные и внесерийные (комплекты для самостоятельной сборки).

Обзор существующих POST-карт

Рассмотрим недостатки POST-карт различных производителей.

Родоначальником производства PCI POST-карт в России считается компания ACE Lab, которая имеет большой опsn в производстве программно-аппаратных комплексов для диагностики и реионта компьютеров.

Мастер Кит POST Card PCI NM9221 (набор для самостоятельной сборки)/BM9221 (готовая плата). Один недостаток — семисегментный индикатор смотрит «мордой вниз».

Достоинства данной POST Card: собрана на ПЛИС серии EPM3XXX, поддерживающей Hot-socketing (более надежна, так как меньше вероятность сжечь POST Card) и работающей на 3.3V (лучше совместимость с современными спецификациями PCI2.3 и PCI3.0), поддержка новых и старых чипсетов благодаря сменным прошивкам.

e-Kit_02 Недостатки данной POST Card: собрана на ПЛИС устаревшей серии EPM7XXX, не поддерживающей Hot-socketing (менее надежна, так как больше вероятность сжечь POST Card) и работающей на 5.0V (могут быть проблемы с современными PCI2.3 и PCI3.0).

ACE Lab PC-POST PCI-2 . Не удобно, что индикатор смотрит вниз, зато есть возможность выбрать один из 4х возможных портов, откуда будет считываться информация.

ACE Lab PC POWER PCI-2 — полнофункциональный программно — аппаратный комплекс, который позволяет выполнять ряд диагностических тестов, запускаемых из установленного на плате ПЗУ, ориентированных на выявление системных ошибок и конфликтов оборудования.

BVG Group Dual POST . Достоинства: простая и дешевая ПОСТ-карточка. Сделана на базе ПЛИС Altera EPM3032ALC44-10. Несет на себе пять светодиодов (питание на PCI — -12V, +12V, +3.3V, +5V, и сигнал RESET) и два семисегментных индикатора с обоих сторон платы. Индикатор может показывать одну цифру — это значит, что на PCI слот, в который вставлена эта ПОСТка, тактирование не приходит.

Характерным недостатком данной карточки из-за её урезанности является снятие тактирования со слота PCI, в который установлена эта карточка после этапа POST, на котором происходит инициализация генератора (для Award BIOS — 26h), в результате чего посткоды перестают отображаться. Методы «борьбы» с этой болезнью следующие:

  • Если в BIOS Setup присутствует пункт Detect DIMM/PCI Clock — перевод оного в Disable не даст генератору снять частоту с неиспользуемых слотов, в результате чего Dual POST будет работать «как нормальная» ;) , показывая все «полагающиеся» посткоды.
  • Если проверяемая плата имеет Sharing PCI Slots (обычно — дальние от процессора два разъема, у которых одно прерывание «на двоих»), то можно в один из них вставить любое «нормальное» PCI-устройство (видео, звуковую, сетевую и т.п.), а в другой — посткарточку. При инициализации генератор, увидев «полноценное» PCI-устройство на Sharing PCI Slots — часто (зависит от конкретной платы-биоса) не снимает тактирование с обоих, чем с успехом «воспользуется» Dual POST.

BVG Group POST Pro. Вместо семисегментников используется ЖК-дисплей с бегущей строкой, но стоимость карты при этом около 300 у.е., что неоправданно высоко.

ЕПОС: PCI TESTCARD. Продвинутая серия «Master» из полезных «наворотов» по большому счету позволяет дополнительно лишь выбирать переключателями на плате диагностический порт в диапазоне 0-3FFh, который используется для вывода POST-кодов. Недостатки данной POST Card: собрана на ПЛИС устаревшей серии EPM7XXX, не поддерживающей Hot-socketing (менее надежна, так как больше вероятность сжечь POST Card) и работающей на 5.0V (могут быть проблемы с современными PCI2.3 и PCI3.0). Имеется также информация о выводе неверных POST кодов на некоторых материнских платах.

IC Book: IC80 . Известный представитель «взрослых» посткарточек, отличительной особенностью которого является присутствие не только «наворотов» в области мониторинга, но также и уникальные (не имеющие аналогов) возможности по отладке системы в пошаговом режиме. Плата имеет несколько отличительных особенностей:

  • Выбор адресов, используемых в целях диагностики: 80h/81h и 84h/85h, 378h, 1080h
  • Вывод диагностических кодов выполняется на два индикатора
  • Вывод информации на внешний индикатор
  • Индикация напряжения Stand-By 3.3V
  • Поддержка четности на шине PCI
  • Поддержка серверных вариантов шины PCI

Небольшой недостаток: не совсем корректно работает пошаговый режим на новых платах.

Jelezo: Jpost Full. Зависает на некоторых материнках (в основном GIGABYTE) в чёрный экран после первой перезагрузки.

VL Comp: PC Analyzer . Простенький и дешевый пост-контроллер, изюминкой которого является совмещение в одном конструктиве сразу двух типов посткарточек — для ISA и для PCI.

POST Card PCI BM9222 с ЖК-диплеем

Сегодня мы рассмотрим PCI POST-карту нового поколения POST Card PCI BM9222 производства московской компании Маскер Кит.

Технические характеристики

  • Напряжение питания: +5 В.
  • Ток потребления, не более: 100 мА.
  • Частота шины PCI: 33 МГц.
  • Адрес диагностического порта: 0080h
  • Индикация POST кодов: на ЖК-дисплее в две строки по 16 символов (первая строка – POST-код в шестнадцатеричном виде и через тире — тип БИОСа, вторая строка – описание ошибки в виде бегущей строки).
  • Индикация сигналов PCI шины: светодиоды на лицевой стороне платы — RST (сигнал сброса PCI) и
  • CLK (тактовый сигнал PCI).
  • Индикаторы наличия напряжений питания PCI шины: +5V, +12V, -12V, +3,3V.
  • Совместимость с материнскими платами чип-сетах: Intel, VIA, SIS.
  • Размер печатной платы: 95.5 x 73.6 мм.

Конструкция

Конструктивно POST Card PCI выполнен на двусторонней печатной плате из фольгированного стеклотекстолита с размерами 95.5 x 73.6 мм. В целях улучшения электропроводности контактов устройства, ламели покрыты никелем.

Принцип работы POST Card PCI

При каждом включении питания компьютера, совместимого с IBM PC, и до начала загрузки операционной системы процессор компьютера выполняет процедуру BIOS под названием «Самотест по включению питания» — POST (Power On Self Test). Эта же процедура выполняется также при нажатии на кнопку RESET или при программной перезагрузке компьютера. Во избежание недоразумений здесь следует отметить, что в некоторых особых случаях с целью сокращения времени загрузки компьютера процедура POST может быть несколько урезана, например, в режиме «Quick Boot» или при выходе из режима «сна» Hibernate.

Основной целью процедуры POST является проверка базовых функций и подсистем компьютера (таких как память, процессор, материнская плата, видеоконтроллер, клавиатура, гибкий и жесткий диски и т. д.) перед загрузкой операционной системы. Это в некоторой степени застраховывает пользователя от попытки работать на неисправной системе, что могло бы привести, например, к разрушению пользовательских данных на HDD. Перед началом каждого из тестов процедура POST генерирует так называемый POST код, который выводится по определенному адресу в пространстве адресов устройств ввода/вывода компьютера. В случае обнаружения неисправности в тестируемом устройстве процедура POST просто «зависает», а предварительно выведенный POST код однозначно определяет, на каком из тестов произошло «зависание». Таким образом, глубина и точность диагностики при помощи POST кодов полностью определяется глубиной и точностью тестов соответствующей процедуры POST BIOS"а компьютера.

Следует отметить, что таблицы POST кодов различны для различных производителей BIOS и, в связи с появлением новых тестируемых устройств и чипсетов, несколько отличаются даже для различных версий одного и того же производителя BIOS. Таблицы POST кодов можно найти на соответствующих сайтах производителей BIOS: для AMI это http://www.ami.com , для AWARD — http://www.award.com , иногда таблицы POST кодов приводятся в руководствах к материнским платам.

Для отображения POST кодов в удобном для пользователя виде служат устройства под названием POST Card. Предлагаемая POST Card для шины PCI — это плата расширения компьютера, вставляемая (при выключенном питании!) в любой свободный PCI слот (33 МГц) и имеющая текстовый индикатор для отображения POST кодов и текстовой информации о текущем коде. Из особенностей работы данной POST Card хочется отметить то, что после включения питания компьютера и до появления первого активного сигнала RESET PCI на индикатор POST Card выводится сообщение приветствия “BM9222 MASTERKIT POSTCARD”.

Кроме того, на POST Card имеются светодиоды, отражающие состояния сигналов CLK и RST шины PCI.

Поиск неисправностей при помощи POST Card PCI

Последовательность действий при ремонте компьютера с использованием POST Card выглядит следующим образом:

1. Выключаем питание неисправного компьютера.
2. Устанавливаем POST Card в любой свободный PCI слот материнской платы.
3. Включаем питание компьютера.
4. При необходимости подстраиваем контрастность (при установке LCD экрана, для PLED – подстройка не требуется) изображения путем нажатия на кнопки (дальняя от материнской платы кнопка увеличивает контрастность, ближняя — уменьшает) или изменяем тип отображаемого БИОСа – путем нажатия и удерживания одной из кнопок и нажатия на вторую (после отжатия кнопок смениться тип БИОСа, отображаемый в первой строке индикатора после кода ошибки). Все вышеперечисленные настройки сохраняются при отключении питания и загружаются при следующей подаче напряжения на POST Card.
5. Читаем информацию на индикаторе POST Card – это POST код, на котором «зависает» загрузка компьютера, и его описание во второй строке.
6. Осмысливаем вероятные причины.
7. При выключенном питании производим перестановки шлейфов, модулей памяти и других компонентов с целью устранить неисправность.
8. Повторяем пункты 3-7, добиваясь устойчивого прохождения процедуры POST и начала загрузки операционной системы.
9. При помощи программных утилит производим окончательное тестирование аппаратных компонентов, а в случае плавающих ошибок — осуществляем длительный прогон соответствующих программных тестов.

При ремонте компьютера без использования POST Сard пункты 3-6 этой последовательности просто опускают и со стороны ремонт компьютера выглядит просто как лихорадочная перестановка памяти, процессора, карт расширения, блока питания, и в довершение всего — материнской платы.

Если в крупных фирмах имеется большой запас исправных комплектующих, то для мелких фирм и частных лиц ремонт компьютера путем установки заведомо исправных компонентов превращается в сложную проблему.

Как же на практике осуществляется ремонт компьютера с использованием POST-Card?

Прежде всего, при включении питания перед началом работы процедуры POST должен произойти сброс системы сигналом RST (RESET), что индицируется на POST Card сменой сообщения приветствия на другие сообщения POST Card. Если смены не происходит в течение 2-4 секунд (время отображения приветствия примерно 0.7 сек) или появилось одно из сообщений “NO CODES” или “RESET” на более чем 1 сек, то в этом случае рекомендуется немедленно выключить компьютер, вытащить все платы и кабели, а также модули памяти из материнской платы. В системном блоке необходимо оставить подключенной к блоку питания материнскую плату с установленным процессором и плату POST Card. Если при последующем включении компьютера нормально проходит сброс системы и появляются первые POST коды, то, очевидно, проблема заключается во временно извлеченных компонентах компьютера; возможно также, в неправильно подключенных шлейфах. Вставляя последовательно память, видеоадаптер, а затем и другие карты, и наблюдая за POST кодами на индикаторе, обнаруживают неисправный модуль.

Вернемся теперь к случаю, когда даже не проходит начальный сброс системы (на индикаторе POST Card не происходит смена сообщения приветствия другими сообщениями). В этом случае либо неисправен блок питания компьютера, либо сама материнская плата (неисправны цепи формирования сигнала RESET) или процессор не стартует. Точную причину можно установить, подсоединив к материнской плате заведомо исправный блок питания.

Рассмотрим теперь случай, когда сигнал сброса проходит, но никакие POST коды на индикатор не выводятся (удерживается сообщение “NO CODES”); при этом, как было описано ранее, тестируется система, состоящая только из материнской платы, процессора, POST Card и блока питания. Если материнская плата совершенно новая, то причина может быть заключена в неправильно установленных джамперах материнской платы. Если все джамперы и процессор установлены правильно, а материнская плата все же не запускается, следует заменить процессор на заведомо исправный. Если же и это не помогает, то можно сделать вывод о неисправности материнской платы либо ее компонентов (например, причиной неисправности может являться повреждение информация в FLASH BIOS).

Главным достоинством POST Card является то, что она не требует для своей работы монитор. При этом тестирование компьютера при помощи POST Card возможно на ранних этапах процедуры POST, когда еще не доступна звуковая диагностика. Еще одна немаловажная особенность – отображение POST-кодов на всех типах БИОСов, выводящих коды по адресу 0×0080), но не описанных в ПЗУ.

PLED индикатор

Данное устройство проверки комплектуется индикатором с отображающим элементом типа PLED. Преимущества такого типа дисплея в том, что он обладает высокой контрастностью и широким углом обзора – это очень важно потому что часто POST-плату приходится устанавливать в компьютер в корпусе, когда в соседних слотах установлены другие платы (сетевые, звуковые и пр.).

Многоязыковая поддержка

POST-карта позволяет выводить коды для различных типов БИОСов на различных языках (английский и русский по умолчанию). Смена типа БИОСа осуществляется путем одновременного нажания сразу обеих кнопок. Данная пост карта расшифровывает 3 вида БИОСов в 2 языках (всего 6 типов). Русифицированный БИОС в названии содержит строку “RU”.

Сами строки с описанием кодов располагаются с микросхеме 24С256 — 32кБ SEEPROM. Эта микросхема установлена в панельку, и опытные пользователи могут извлечь её и перепрограммировать другой (более новой или с другим языком) версией в случае её появления на сайте www.masterkit.ru. Обновление происходит регулярно, с отслеживанием тенденций развития компьютерной техники.

В случае если данный код не дешифрируется в вашей версии, то следует воспользоваться Интернетом для оперативного поиска расшифровки типа теста, а так же написать в компанию МастерКит письмо с указанием данного случая, и в последующей версии данный код будет уже включен.

Для перепрограммирования можно воспользоваться набором NM9215 (программатор) совместно с переходником на данный тип микросхем NM9216/4.

Проверка системного блока РС тестером Post Card PCI на практике

Последовательность тестирования компонентов компьютера следующая:

1. Тестирование процессора.
2. Проверка контрольной суммы ROM BIOS.
3. Проверка и инициализация контроллеров DMA, IRQ и таймера 8254.
После этой стадии становится доступной звуковая диагностика.
4. Проверка операций регенерации памяти.
5. Тестирование первых 64 КБ памяти.
6. Загрузка векторов прерываний.
7. Инициализация видеоконтроллера.
После этого этапа диагностические сообщения выводятся на экран.
8. Тестирование полного объема ОЗУ.
9. Тестирование клавиатуры.
10. Тестирование CMOS памяти.
11. Инициализация COM и LPT портов.
12. Инициализация и тест контроллера FDD.
13. Инициализация и тест контроллера HDD.
14. Поиск дополнительных модулей ROM BIOS и их инициализация.
15. Вызов загрузчика операционной системы (INT 19h, Bootstrap), при невозможности загрузки операционной системы- попытка запуска ROM BASIC (INT 18h); при неудаче- останов системы (HALT).

Прохождение тестов

При прохождении каждого из тестов POST генерирует POST-код, который записывается в специальный диагностический регистр. Информация, содержащаяся в диагностическом регистре, становится доступной для наблюдения при установке в свободный слот компьютера диагностической платы POST Card и отображается на семисегментном индикаторе в виде двух шестнадцатиричных цифр. Адрес диагностического регистра зависит от типа компьютера, в более старых версиях это: ISA, EISA- 80h, ISA-Compaq- 84h, ISA-PS/2- 90h, MCA-PS/2- 680h, 80h, некоторые EISA- 300h.

Прежде всего, необходимо определить фирму-производителя BIOS материнской платы. Это можно сделать либо по наклейке на микросхеме BIOS, либо по надписям, которые выводятся на экран аналогичной исправной материнской платой. В России и СНГ наиболее распространенными являются BIOS фирм AMI и AWARD. С приобретением некоторого опыта уже по первым POST кодам можно с уверенностью назвать производителя BIOS.

Таблицы POST кодов различны для различных производителей BIOS и, в связи с появлением новых тестируемых устройств и чипсетов, отличаются даже для различных версий одного и того же производителя BIOS.

Исторически сложилось, что значения POST кодов в соответствующих таблицах производителей BIOSов даются в виде шестнадцатиричных чисел в диапазоне 00h- FFh (0- 255 в десятичной системе счисления), поэтому для удобства использования таких таблиц необходимо обеспечить отображение POST кодов в шестнадцатеричном виде.

Коды неисправностей

Award Software International, Inc.

AwardBIOS V4.51PG Elite

Динамично развивающаяся компания Award Software в 1995 году предложила новое на то время решение в области низкоуровневого программного обеспечения AwardBIOS «Elite», более известное как V4.50PG. Режим обслуживания контрольных точек не изменился ни в широко распространенной версии V4.51, ни в раритетном исполнении V4.60. Суффиксы P и G обозначают соответственно поддержку механизма PnP и обслуживание функций энергосбережения (Green Function).

Выполнение стартовых процедур POST из ROM

C0 Запрет External Cache. Запрет Internal Cache. Запрет Shadow RAM. Программирование контроллера DMA, контроллера прерываний, таймера, блока RTC

C1 Определение типа памяти, суммарного объем и размещение по строкам

C3 Проверка первых 256К DRAM для организации Temporary Area. Распаковка BIOS в Temporary Area

C5 Выполняемый код POST переносится в Shadow

C6 Определение присутствия, объема и типа External Cache

C8 Проверка целостности программ и таблиц BIOS

CF Определение типа процессора

Выполнение POST в Shadow RAM

03 Запрет NMI, PIE (Periodic Interrupt Enable), AIE (Alarm Interrupt Enable), UIE (Update Interrupt Enable). Запрет генерации программируемой частоты SQWV

04 Проверка формирования запросов на регенерацию DRAM

05 Проверка и инициализация контроллера клавиатуры

06 Тест области памяти, начинающейся с адреса F000h, где размещен BIOS

07 Проверка функционирования CMOS и батарейного питания

BE Программирование конфигурационных регистров Южного и Северного Мостов

09 Инициализация кэш-памяти L2 и регистров расширенного управления кэшированием процессора Cyrix

0A Генерация таблицы векторов прерываний. Настройка ресурсов Power Management и установка вектора SMI

0B Проверка контрольной суммы CMOS. Сканирование шины PCI устройств. Обновление микрокода процессора

Инициализация контроллера клавиатуры

0D Поиск и инициализация видеоадаптера. Настройка IOAPIC. Измерения тактовой частоты, установка FSB

0E Инициализация MPC. Тест видеопамяти. Вывод на экран Award Logo

0F Проверка первого контроллера DMA 8237. Определение клавиатуры и ее внутренний тест. Проверка контрольной суммы BIOS

10 Проверка второго контроллера DMA 8237

11 Проверка страничных регистров контроллеров DMA

14 Тест канала 2 системного таймера

15 Тест регистра маскирования запросов 1-го контроллера прерываний

16 Тест регистра маскирования запросов 2-го контроллера прерываний

19 Проверка пассивности запроса немаскируемого прерывания NMI

30 Определение объема Base Memory и Extended Memory. Настройка APIC. Программное управление режимом Write Allocation

Подготовка таблиц, массивов и структур для старта операционной системы

31 Основной отображаемый на экране тест оперативной памяти. Инициализация

32 Выводится заставка Plug and Play BIOS Extension. Настройка ресурсов Super I/O. Программируется Onboard Audio Device

39 Программирование тактового генератора по шине I2C

3C Установка программного флага разрешения входа в Setup

3D Инициализация PS/2 mouse

3E Инициализации контроллера External Cache и разрешения Cache

BF Настройка конфигурационных регистров чипсета

41 Инициализация подсистемы гибких дисков

42 Отключение IRQ12 если PS/2 mouse отсутствует. Выполняется программный сброс контроллера жестких дисков. Сканирование других IDE устройств

43 Инициализация последовательных и параллельных портов

45 Инициализация сопроцессора FPU

4E Индикация сообщений об ошибках

4F Запрос пароля

50 Восстановление ранее сохраненного в ОЗУ состояния CMOS

51 Разрешение 32 битного доступа к HDD. Настройка ресурсов ISA/PnP

52 Инициализация дополнительных BIOS. Установка значений конфигурационных регистров PIIX. Формирование NMI и SMI

53 Установка счетчика DOS Time в соответствии с Real Time Clock

60 Установка антивирусной защиты BOOT Sector

61 Завершающие действия по инициализации чипсета

62 Чтение идентификатора клавиатуры. Установка ее параметров

63 Коррекция блоков ESCD, DMI. Очистка ОЗУ

FF Передача управления загрузчику. BIOS выполняет команду INT 19h

Рассмотрим процедуру тестирования системного блока персонального компьютера. Установим тестер BM9222 в свободный PCI слот материнской платы. Включим питание. BIOS — программа загрузки компьютера, хранящаяся в ПЗУ материнской платы, производит последовательный опрос всех включенных в системный блок устройств (процессор, модули памяти, винчестер, видеокарта, контроллеры, оптический привод, внешняя периферия: клавиатура мышь и т.д.).

Если все периферийные устройства системного блока исправны, то после окончания загрузки на экране тестера загорится следующая надпись FFh.

«Введем неисправность» в системный блок. Выключим питание и удалим из системного блока модуль памяти.

После подачи питания и загрузки компьютера на экране тестера появляется код ошибки оперативной памяти 4Eh.

Тестер точно определил, что память в системном блоке «неисправна». После выключения питания и возвращения модуля памяти на свое место тестер показал исправность персонального компьютера.

Аналогично можно определить коды ошибок других периферийных устройств и быстро устранить неисправность, заменив неисправный блок на исправный.

Выводы

Адресация устройств PCI

Для шины PCI принята иерархия понятий адресации: шина, устройство, функция. Эти понятия фигурируют только при обращении к регистрам конфигурационного пространства. К этим регистрам обращаются на этапе конфигурирования - переучета обнаруженных устройств, выделения им непересекающихся ресурсов (областей памяти и пространства ввода-вывода) и назначения номеров аппаратных прерываний. При дальнейшей регулярной работе устройства будут отзываться на обращения по назначенным им адресам памяти и ввода-вывода, доведенным до сведения связанных с ними модулей ПО. Эти адреса принимаются с шины AD в начале каждой транзакции. Для доступа к конфигурационному пространству используются отдельные линии IDSEL

Устройством PCI называется микросхема или карта расширения, подключенная к одной из шин PCI и использующая для идентификации выделенную ей линию IDSEL, принадлежащую этой шине. Устройство может быть многофункциональным, то есть состоять из множества (от 1 до 8) так называемых функций. Каждой функции отводится конфигурационное пространство в 256 байт. Многофункциональные устройства должны отзываться только на конфигурационные циклы с номерами функций, для которых имеется конфигурационное пространство. При этом функция с номером 0 должна быть обязательно, номера остальных функций назначаются разработчиком устройства произвольно (в диапазоне 1-7). Простые (однофункциональные) устройства, в зависимости от реализации, могут отзываться либо на любой номер функции, либо только на номер функции 0.

Шина PCI - набор сигнальных линий, непосредственно соединяющих интерфейсные выводы группы устройств (слотов, микросхем на системной плате). В системе может присутствовать несколько шин PCI, соединенных мостами PCI. Мосты электрически отделяют интерфейсные сигналы одной шины от другой, соединяя их логически; главный мост соединяет главную шину с ядром системы (процессором и памятью). Каждая шина имеет свой номер шины (PCI bus number). Шины нумеруются последовательно; главная шина имеет нулевой номер.

С точки зрения конфигурирования, минимальной адресуемой единицей этой иерархии является функция; ее полный адрес состоит из трех частей: номера шины, номера устройства и номера функции. Короткая форма идентификации вида РСЮ:1:2 (например, в сообщениях ОС Unix) означает функцию 2 устройства 1, подключенного к главной (0) шине PCI.

В каждой транзакции (обмене по шине) участвуют два устройства - инициатор (initiator) обмена, он же ведущее (master) устройство, и целевое (target) устройство (ЦУ), оно же ведомое (slave). Шина PCI все транзакции трактует как пакетные: каждая транзакция начинается фазой адреса, за которой может следовать одна или несколько фаз данных. Состав и назначение интерфейсных сигналов шины приведены ниже/

AD Address/Data - мультиплексированная шина адреса/данных. В начале транзакции передается адрес, в последующих тактах -данные

С/ВЕ# Command/Byte Enable - команда/разрешение обращения к байтам. Команда, определяющая тип очередного цикла шины, задается четырехбитным кодом в фазе адреса „

FRAME* - Кадр. Введением сигнала отмечается начало транзакции (фаза адреса), снятие сигнала указывает на то, что последующий цикл передачи данных является последним в транзакции

DEVSEL* Device Select - устройство выбрано (ответ ЦУ на адресованную к нему транзакцию)

IRDY* Initiator Ready - готовность ведущего устройства к обмену данными

TRDY* Target Ready - готовность ЦУ к обмену данными

STOP* Запрос ЦУ к ведущему устройству на остановку текущей транзакции

LOCK* - Сигнал захвата шины для обеспечения целостного выполнения операции. Используется мостом, которому для выполнения одной операции требуется выполнить несколько транзакций PCI

REQ# Request - запрос от ведущего устройства на захват шины

GNT# Grant - предоставление ведущему устройству управления шиной

PAR Parity - общий бит паритета для линий AD и С/ВЕ#

PERR* - Parity Error - сигнал об ошибке паритета (для всех циклов, кроме специальных). Вырабатывается любым устройством, обнаружившим ошибку

РМЕ# Power Management Event - сигнал о событиях, вызывающих изменение режима

потребления (дополнительный сигнал, введенный в PCI 2.2)

CLKRUN* Clock running - шина работает на номинальной частоте синхронизации. Снятие сигнала означает замедление или остановку синхронизации с целью снижения потребления (для мобильных применений)

PRSNT# Present - индикаторы присутствия платы, кодирующие запрос потребляемой мощности. На карте расширения одна или две линии индикаторов соединяются с шиной GND, что воспринимается системной платой

RST# Reset - сброс всех регистров в начальное состояние

IDSEL Initialization Device Select - выбор устройства в циклах конфигурационного

считывания и записи

SERR# System Error - системная ошибка. Ошибка паритета адреса данных в специальном цикле или иная катастрофическая ошибка, обнаруженная устройством. Активизируется любым устройством PCI и вызывает NMI

REQ64* Request 64 bit - запрос на 64-битный обмен. Сигнал вводится 64-битным

инициатором, по времени он совпадает с сигналом FRAME*. Во время окончания сброса (сигналом RST*) сигнализирует 64-битному устройству о том, что оно подключено к 64-битной шине. Если 64-б.итное устройство не обнаружит этого сигнала, оно должно переконфигурироваться на 32-битный режим, отключив буферные схемы старших байтов

АСК64* - Подтверждение 64-битного обмена. Сигнал вводится 64-битным ЦУ, опознавшим свой адрес, одновременно с DEVSEL*. Отсутствие этого подтверждения заставит инициатор выполнять обмен с 32-битной разрядностью

INTA#, INTB*, Interrupt А, В, С, D - линии запросов прерывания, чувствительность к уровню, INTC#, INTD* активный уровень - низкий, что допускает разделяемость (совместное использование)линий

CLK Clock - тактовая частота шины. Должна лежать в пределах 20-33 МГц, в PCI2.1- до 66 МГц

M66EN 66MHz Enable - разрешение частоты синхронизации до 66 МГц

SDONE Snoop Done - сигнал завершенности цикла слежения для текущей транзакции. Низкий уровень указывает на незавершенность цикла слежения за когерентностью памяти и кэша. Необязательный сигнал, используется только устройствами шины с кэшируемой памятью

SBO# Snoop Backoff - попадание текущего обращения к памяти абонента шины

в модифицированную строку кэша. Необязательный сигнал, используется только абонентами шины с кэшируемой памятью при алгоритме обратной записи

ТСК Test Clock - синхронизация тестового интерфейса JTAG

TDI Test Data Input - входные данные тестового интерфейса JTAG

TOO Test Data Output - выходные данные тестового интерфейса JTAG

TMS Test Mode Select - выбор режима для тестового интерфейса JTAG

TRST Test Logic Reset - сброс тестовой логики

В каждый момент времени шиной может управлять только одно ведущее устройство, получившее на это право от арбитра. Каждое ведущее устройство имеет пару сигналов - REQ# для запроса на управление шиной и GNT* для подтверждения предоставления управления шиной. Устройство может начинать транзакцию (устанавливать сигнал FRAME*) только при активном полученном сигнале GNT*. Снятие сигнала GNT* не позволяет устройству начать следующую транзакцию, а при определенных условиях (см. ниже) заставляет прекратить начатую транзак¬цию. Арбитражем запросов на использование шины занимается специальный узел, входящий в чипсет системной платы. Схема приоритетов (фиксированный, циклический, комбинированный) определяется программированием арбитра.

Для адреса и данных используются общие мультиплексированные линии AD. Четыре мультиплексированные линии С/ВЕ обеспечивают кодирование команд в фазе адреса и разрешения байт в фазе данных. В начале транзакции ведущее устройство активизирует сигнал FRAME*, по шине AD передает целевой адрес, а по линиям С/ВЕ# - информацию о типе транзакции (команде). Адресованное ЦУ отзывается сигналом DEVSEL*. Ведущее устройство указывает на свою готовность к обмену данными сигналом IRDY#, эта готовность может быть выставлена и раньше получения DEVSEL*. Когда к обмену данными будет готово и ЦУ, оно установит сигнал TRDY*. Данные по шине AD передаются только при одновременном наличии сигналов IRDY# и TRDY*. С помощью этих сигналов ведущее устройство и ЦУ согласуют свои скорости, вводя такты ожидания. На рисунке приведена временная диаграмма обмена, в которой и ведущее устройство, и ЦУ вводят такты ожидания. Если бы они оба ввели сигналы готовности в конце фазы адреса и не снимали их до конца обмена, то в каждом такте после фазы адреса передавались бы по 32 бита данных, что обеспечило бы выход на предельную производительность обмена.

Количество фаз данных в пакете явно не указывается, но перед последней фазой данных ведущее устройство при введенном сигнале IRDY* снимает сигнал FRAME*. В одиночных транзакциях сигнал FRAME* активен лишь один такт. Если устройство не поддерживает пакетные транзакции в ведомом режиме, то оно должно потребовать прекращения пакетной транзакции во время первой фазы данных (введя сигнал STOP* одновременно с TRDY*). В ответ на это ведущее устройство завершит данную транзакцию и продолжит обмен последующей транзакцией с новым значением адреса. После последней фазы данных ведущее устройство снимает сигнал IRDY#, и шина переходит в состояние покоя (PCI Idle) - оба сигнала FRAME* и IRDY# находятся в пассивном состоянии. Инициатор может начать следующую транзакцию и без такта покоя, введя FRAME* одновременно со снятием IRDY#. Такие быстрые смежные транзакции (Fast Back-to-Back) могут быть обращены как к одному, так и к разным ЦУ. Первый тип поддерживается всеми устройствами PCI, выступающими в роли ЦУ. На поддержку второго типа (она необязательна) указывает бит 7 регистра состояния. Инициатору разрешают (если он умеет) использовать быстрые смежные транзакции с разными устройствами (битом 9 регистра команд), только если все агенты шины допускают быстрые обращения.

Рис. 29. Цикл обмена на шине PCI

Шина позволяет уменьшить мощность (ток), потребляемую устройствами, ценой снижения производительности, применяя пошаговое переключение линий AD и PAR (address/data stepping). Здесь возможны два варианта.

· Плавный шаг (continuous stepping) - начало

формирования сигналов слаботочными формирователями за несколько тактов до введения сигнала-квалификатора действительной информации (FRAME# в фазе адреса, IRDY# или TRDY# в фазе данных). За эти несколько тактов сигналы «доползут» до требуемого значения при меньшем токе.

· Дискретный шаг (diskrete stepping) - нормальные

формирователи срабатывают не все сразу, а группами (например, побайтно), в каждом такте по группе. При этом снижаются броски тока, поскольку одновременно переключается меньше формирователей.

Устройство само может и не пользоваться этими возможностями (см. бит 7 регистра команд), но должно «понимать» такие циклы. Задерживая сигнал FRAME*, устройство рискует потерять право доступа к шине, если арбитр получит запрос от более приоритетного устройства.

Протокол квитирования обеспечивает надежность обмена - ведущее устройство всегда получает информацию об отработке транзакции ЦУ. Средством повышения надежности (достоверности) является применение контроля паритета: линии AD и С/ВЕ# и в фазе адреса, и в фазе данных защищены битом паритета PAR (количество единичных бит этих линий, включая PAR, должно быть четным). Действительное значение PAR появляется на шине с задержкой в один такт относительно линий AD и С/ВЕ#. При обнаружении ошибки ЦУ вырабатывается сигнал PERR* (со сдвигом на такт после действительности бита паритета). В подсчете паритета при передаче данных учитываются все байты, включая и недействительные (отмеченные высоким уровнем сигнала С/ВЕх#). Состояние бит, даже и в недействительных байтах данных, во время фазы данных должно оставаться стабильным.

Каждая транзакция на шине должна быть завершена планово или прекращена, при этом шина должна перейти в состояние покоя (сигналы FRAME* и IRDY# пассивны). Завершение транзакции выполняется либо по инициативе ведущего устройства, либо по инициативе ПУ. Ведущее устройство может завершить транзакцию одним из следующих способов.

· Нормальное завершение (Camletiori) выполняется по

окончании обмена данными.

· Завершение по тайм-ауту (Time-out) происходит, когда

во время транзакции у ведущего устройства отбирают право на управление шиной (снятием сигнала GNT#) и истекает время, указанное в его таймере Latency Timer. Это может случиться, если адресованное ЦУ оказалось непредвиденно медленным или запланирована слишком длинная транзакция. Короткие транзакции (с одной - двумя фазами данных) даже в случае снятия сигнала GNT# и срабатывания таймера завершаются нормально. Транзакция отвергается (Master-Abort), когда в течение заданного времени ведущее устройство не получает ответа ЦУ (DEVSEL*).

Транзакция может быть прекращена по инициативе ЦУ; для этого оно может ввести сигнал STOP*. Возможны три типа прекращения.

· Повтор (Retry) - сигнал STOP* вводится при пассивном

сигнале TRDY* до первой фазы данных. Эта ситуация возникает, когда ЦУ из-за внутренней занятости не успевает выдать первые данные в положенный срок (16 тактов). Повтор является указанием ведущему устройству на необходимость нового запуска той же транзакции.

· Отключение (Disconnect) - сигнал STOP* вводится во

время или после первой фазы данных. Если сигнал STOP* введен при активном сигнале TRDY* очередной фазы данных, то эти данные передаются и на том транзакция завершается. Если сигнал STOP* введен при пассивном сигнале TRDY*, то транзакция завершается без передачи данных очередной фазы. Отключение производится, когда ЦУ неспособно своевременно выдать или принять очередную порцию данных пакета.

· Отказ (Target-Abort) - сигнал STOP* вводится

одновременно со снятием сигнала DEVSEL* (в предыдущих случаях во время появление сигнала STOP* сигнал DEVSEL* был активен). После этого данные уже не передаются. Отказ вводится, когда ЦУ обнаруживает фатальную ошибку или иные условия, по которым оно уже никак не сможет обслужить данный запрос.

Использование трех типов прекращения вовсе не обязательно для всех ЦУ, однако любое ведущее устройство должно быть готово к завершению транзакций по любой из этих причин. В шине PCI принята географическая адресация - номер устройства определяется местом его подключения. Номер устройства (device number или dev) определяется той линией шины AD, к которой подключена линия сигнала IDSEL данного слота: kADU -devO(MOCT),AD12-devl,...AD31 -dev20. В соседних слотах PCI, как правило, задействуются соседние номера устройств; их нумерация определяется разработчиком системной платы (или пассивной кросс-платы в промышленных компьютерах). Часто для слотов используются убывающие номера устройств, начиная с 20. Группы соседних слотов могут подключаться к разным шинам; на каждой шине PCI нумерация устройств независимая (могут быть и устройства с совпадающими номерами dev, но разными номерами шин). Устройства PCI, интегрированные в системную плату, используют ту же систему адресации. Их номера «запаяны намертво», в то время как адреса карт расширения можно изменять перестановкой их в разные слоты. Одна карта PCI может содержать только одно устройство шины, к которой она подключается, поскольку ей в слоте выделяется только одна линия IDSEL Если на карте размещают несколько устройств (например, 4-портовая карта Ethernet), то на ней приходится устанавливать мост - тоже устройство PCI, к которому и обращаются по линии IDSEL, выделенной данной карте. Этот мост организует на карте дополнительную шину PCI, к которой можно подключить множество устройств.

С точки зрения обращения к пространствам памяти и ввода-вывода, географический адрес (номер шины и устройства) безразличен (не принимая во внимание разницу в производительности, связанную с подключением устройств к разным шинам PCI). Однако номер устройства определяет номер линии запроса прерывания, которой может пользоваться устройство. Подробнее об этом см. в п. 6.2.6, здесь же отметим, что на одной шине устройства с номерами, отличающимися друг от друга на 4, будут использовать одну и ту же линию прерывания. Возможность развести их по разным линиям прерывания может появиться лишь, если они находятся на разных шинах (это зависит от системной платы).

Разобраться с нумерацией устройств и полученных ими линий прерываний на конкретной плате можно просто: устанавливать одну карту PCI поочередно в каждый из слотов (отключая питание) и смотреть на сообщения об обнаруженных устройствах PCI, выводимых на дисплей в конце теста POST. В этих сообщениях будут фигурировать и устройства PCI, установленные непосредственно на системной плате (и не отключенные параметрами CMOS Setup).

Но чтобы не было иллюзий простоты и прозрачности, отметим, что «особо умные» операционные системы (Windows) не довольствуются полученными назначениями номеров прерывании и изменяют их по своему усмотрению (что никак не может отразиться на разделяемости линий).



Если заметили ошибку, выделите фрагмент текста и нажмите Ctrl+Enter
ПОДЕЛИТЬСЯ:
NexxDigital - компьютеры и операционные системы