Чтение онлайн

ЖАНРЫ

Шины PCI, USB и FireWire

Гук Михаил Юрьевич

Шрифт:

В заголовке конфигурационного пространства описываются потребности в адресах трех типов:

• регистры в пространстве ввода_вывода (I/O Space));

• регистры ввода_вывода, отображенные на память (Memory Mapped I/O). Это область памяти, обращения к которой должны производиться в строгом соответствии с тем, что запрашивает инициатор обмена. Обращение к этим регистрам может изменять внутреннее состояние периферийных устройств;

• память, допускающая предвыборку (Prefetchable Memory). Это область памяти, «лишнее» чтение которой (с неиспользуемыми результатами) не приводит к побочным эффектам, все байты считываются независимо от сигналов BE[3:0]#, и записи отдельных байтов мостом

могут быть объединены (то есть это память в чистом виде).

Потребности в адресах указываются в регистрах базовых адресов – BAR (Base Address Register). Конфигурирующая программа может определить и размеры требуемых областей. Для этого после аппаратного сброса она должна считать и сохранить значения базовых адресов (это будут адреса по умолчанию), записать в каждый регистр FFFFFFFFh и снова считать их значение. В полученных словах нужно обнулить биты декодирования типа (биты [3:0] для памяти и биты [1:0] для ввода-вывода), инвертировать и инкрементировать полученное 32-битное слово – результатом будет длина области (для портов биты [31:16] игнорировать). Метод подразумевает, что длина области выражается числом 2n и область выровнена естественным образом. Стандартный заголовок вмещает до 6 регистров базового адреса, но при использовании 64-битной адресации число описываемых блоков сокращается. Неиспользуемые регистры BAR при чтении всегда должны возвращать нули.

В PCI имеется поддержка старых (legacy) устройств (VGA, IDE), которые сами себя таковыми объявляют по коду класса в заголовке. Их традиционные (фиксированные) адреса портов не заявляются в конфигурационном пространстве, но как только устанавливается бит разрешения обращения к портам, устройствам разрешается ответ и по этим адресам.

Конфигурационное пространство обычных устройств (тип 0)

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

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

• Device ID – идентификатор устройства, назначаемый производителем;

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

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

• Header Type – тип заголовка (биты [6:0]), определяющий формат ячеек в диапазоне 10-3Fh и несущий признак многофункционального устройства (если бит 7 установлен). На рисунке приведен формат заголовка типа 0, относящийся

• именно к устройствам PCI. Тип 01 относится к мостам PCI-PCI; тип 02 относится к мостам для CardBus;

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


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

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

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

• бит 2 – Bus Master – разрешение работы инициатором (в

режиме прямого управления шиной); игнорируется в PCI–X при завершениях расщепленных транзакций;

• бит 3 – Special Cycles – разрешение реакции на специальные циклы;

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

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

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

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

• бит 8 – SERR# Enable – разрешение генерации сигнала ошибки SERR# (ошибка адреса сообщается, когда этот бит и бит 6 установлены);

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

• бит 10 Interrupt Disable —, запрет генерации сигнала прерываний по линиям INTx (по аппаратному сбросу и включению питания бит обнулен – прерывания разрешены). Бит определен начиная с PCI 2.3. Ранее был резервным;

• биты [11:15] – резерв.

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

• биты [0:2] – резерв;

• бит 3– Interrupt Status (RO), наличие запроса прерывания. Устанавливается в единицу перед подачей сигнала по линии INTx, независимо от значения бита Interrupt Disable. С прерываниями MSI не связан. Бит определен начиная с PCI 2.3, ранее был резервным. В PCI$X 2.0 бит обязателен;

• бит 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 (только для устройств с прямым управлением) – инициатор (запросчик) транзакции обнаружил неисправимую ошибку данных;

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

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

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

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

Поделиться с друзьями: