Протокол шини PCI
Адресація пристроїв PCI
Пристрої PCI називається мікросхема або карта розширення, підключена до однієї з шин PCI і використовує для ідентифікації виділену їй лінію IDSEL, що належить цій шині. Пристрій може бути багатофункціональним, тобто складатися з множини (від 1 до 8) так званих функцій. Кожній функції відводиться конфігураційний простір 256 байт. Багатофункціональні пристрої повинні відповідати лише на конфігураційні цикли з номерами функцій, для яких є конфігураційний простір. При цьому функція з номером 0 повинна бути обов'язково, номери решти функцій призначаються розробником пристрою довільно (в діапазоні 1-7). Прості (однофункціональні) пристрої, залежно від реалізації, можуть відкликатися або будь-який номер функції, або тільки номер функції 0.
Шина PCI - набір сигнальних ліній, що безпосередньо з'єднують інтерфейсні висновки групи пристроїв (слотів, мікросхем на системній платі). У системі може бути кілька шин PCI, з'єднаних мостами PCI. Мости електрично відокремлюють інтерфейсні сигнали однієї шини від іншої, з'єднуючи їх логічно; головний міст з'єднує головну шину з ядром системи (процесором та пам'яттю). Кожна шина має власний номер шини (PCI bus number). Шини нумеруються послідовно; головна шина має нульовий номер.
IRDY* Initiator Ready – готовність провідного пристрою до обміну даними
TRDY* Target Ready - готовність ЦП до обміну даними
STOP* Запит ЦУ до провідного пристрою на зупинку поточної транзакції
LOCK* - сигнал захоплення шини для забезпечення цілісного виконання операції. Використовується мостом, якому для виконання однієї операції потрібно виконати кілька транзакцій PCI
REQ# Request - запит відпровідного пристрою на захоплення шини
GNT# Grant - надання провідному пристрою керування шиною
PAR Parity - загальний біт паритету для ліній AD[31:0] та С/ВЕ[3:0]#
PERR* - Parity Error – сигнал про помилку паритету (для всіх циклів, крім спеціальних). Виробляється будь-яким пристроєм, що виявив помилку
РМЕ# Power Management Event - сигнал про події, що викликають зміну режиму
споживання (додатковий сигнал, введений у PCI 2.2)
CLKRUN* Clock running – шина працює на номінальній частоті синхронізації. Зняття сигналу означає уповільнення або зупинку синхронізації з метою зниження споживання (для мобільних застосувань)
PRSNT [1,2] # Present - індикатори присутності плати, що кодують запит споживаної потужності. На карті розширення одна чи дві лінії індикаторів з'єднуються з шиною GND, що сприймається системною платою
RST# Reset - скидання всіх регістрів у початковий стан
IDSEL Initialization Device Select – вибір пристрою в циклах конфігураційного
зчитування та записи
REQ64* Request 64 bit – запит на 64-бітовий обмін. Сигнал вводиться 64-бітним
ініціатором, за часом він збігається із сигналом FRAME*. Під час закінчення скидання (сигналом RST*) сигналізує 64-бітному пристрої про те, що він підключений до 64-бітної шини. Якщо 64-бітовий пристрій не виявить цього сигналу, він повинен переконфігуруватися на 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* не дозволяє пристрою розпочати наступну транзакцію, а за певних умов (див. нижче) змушує припинити розпочату транзакцію. Арбітражем запитів використання шини займається спеціальний вузол, що входить у чіпсет системної плати. Схема пріоритетів (фіксований, циклічний, комбінований) визначається програмуванням арбітра.

Мал. 29. Цикл обміну на шині PCI
Шина дозволяє зменшити потужність (струм), що споживається пристроями, ціною зниження продуктивності,застосовуючи покрокове перемикання ліній AD[31:0] та PAR (address/data stepping). Тут можливі два варіанти.
- Плавний крок (continuous stepping) – початок
- Дискретний крок (diskrete stepping) – нормальні
формувачі спрацьовують в повному обсязі відразу, а групами (наприклад, побайтно), у кожному такті по групі. При цьому знижуються кидки струму, оскільки одночасно перемикається менше формувачів.
Пристрій може і не користуватися цими можливостями (див. біт 7 регістру команд), але має «розуміти» такі цикли. Затримуючи сигнал FRAME*, пристрій ризикує втратити право доступу до шини, якщо арбітр отримає запит від пріоритетного пристрою.
Кожна транзакція на шині має бути завершена планово або припинена, при цьому шина повинна перейти у стан спокою (сигнали FRAME* та IRDY# пасивні). Завершення транзакції виконується або з ініціативи провідного пристрою або з ініціативи ПУ. Провідний пристрій може завершити транзакцію одним із таких способів.
- Нормальне завершення ( Camletiori ) виконується за
закінчення обміну даними.
- Завершення за тайм-аутом (Time-out) відбувається, коли
Транзакцію може бути припинено з ініціативи ЦП; для цього може ввести сигнал STOP*. Можливі три типи припинення.
- Повтор (Retry) – сигнал STOP* вводиться при пасивному
сигналі TRDY* до першої фази даних. Ця ситуація виникає, коли ЦУ через внутрішню зайнятість не встигає видати перші дані у визначений термін (16 тактів). Повторення є вказівкою провідного пристрою на необхідність нового запуску тієї ж транзакції.
- Вимкнення (Disconnect) - сигнал STOP* вводиться в
час чи після першої фази даних. Якщо сигнал STOP* введено заактивному сигналі TRDY* чергової фази даних, ці дані передаються і тому транзакція завершується. Якщо сигнал STOP* введений під час пасивного сигналу TRDY*, то транзакція завершується без передачі даних чергової фази. Вимкнення здійснюється, коли ЦУ нездатне своєчасно видати чи прийняти чергову порцію даних пакета.
- Відмова (Target-Abort) – сигнал STOP* вводиться
одночасно зі зняттям сигналу DEVSEL* (у попередніх випадках під час появи сигналу STOP* сигнал DEVSEL* був активним). Після цього дані вже не передаються. Відмова вводиться, коли ЦУ виявляє фатальну помилку чи інші умови, за якими вона вже ніяк не зможе обслужити цей запит.
Розібратися з нумерацією пристроїв та отриманих ними ліній переривань на конкретній платі можна просто: встановлювати одну карту PCI по черзі в кожен із слотів (відключаючи живлення) і дивитися на повідомлення про виявлені пристрої PCI, що виводяться на дисплей в кінці тесту POST. У цих повідомленнях фігуруватимуть і пристрої PCI, встановлені безпосередньо на системній платі (і не вимкнені параметрами CMOS Setup).
Але щоб не було ілюзій простоти та прозорості, відзначимо, що «особливо розумні» операційні системи (Windows) не задовольняються отриманими призначеннями номерів переривання і змінюють їх на власний розсуд (що ніяк не може позначитися на лінії, що розділяються).