Spațiul de configurare PCI este spațiul de adrese pentru configurația PCI , în plus față de memoria tipică și spațiile de adrese I/O.
Una dintre îmbunătățirile majore aduse magistralei PCI față de alte arhitecturi I/O este mecanismul său de configurare, care are un spațiu de adresă de configurare de 256 de octeți care poate fi adresat cunoscând numărul magistralei PCI, numărul dispozitivului și numărul funcției dispozitivului. Primii 64 de octeți din 256 sunt standardizați, iar restul registrelor pot fi utilizate la discreția producătorului dispozitivului.
Registrele Vendor ID și Device ID identifică dispozitivul și sunt denumite în mod obișnuit PCI ID . Registrul de identificare a furnizorului de șaisprezece biți este emis de PCI SIG . Registrul de identificare a dispozitivului de șaisprezece biți este atribuit de producătorul dispozitivului. Există un proiect pentru a crea o bază de date cu toate valorile de registru cunoscute ID- ul furnizorului și ID- ul dispozitivului . (Vezi lista de referințe .)
Primele 16 cuvinte duble din spațiul de adrese de configurare (conform specificației PCI Local Bus Specification 2.2 ):
Abordare | 31 ... 24 | 23 ... 16 | 15 ... 8 | 7 ... 0 |
---|---|---|---|---|
0x00 | Identificatorul dispozitivului | ID furnizor | ||
0x04 | stare | comanda | ||
0x08 | codul clasei | ID-ul reviziei | ||
0x0C | BIST | Tip antet | Temporizator de latență | Dimensiunea liniei cache |
0x10 | Registrul de adresă de bază 0 | |||
0x14 | Registrul de adrese de bază 1 | |||
0x18 | Registrul de adrese de bază 2 | |||
0x1C | Registrul de adrese de bază 3 | |||
0x20 | Registrul de adrese de bază 4 | |||
0x24 | Registrul de adrese de bază 5 | |||
0x28 | Pointer Cardbus CIS | |||
0x2C | ID-ul subsistemului | ID-ul furnizorului subsistemului | ||
0x30 | Adresa de bază ROM de expansiune | |||
0x34 | Rezervat | Indicator de capabilități | ||
0x38 | Rezervat | |||
0x3C | Max_Lat | Min_Gnt | Pin de întrerupere | Linie de întrerupere |
Registrele DeviceID , VendorID , Status , Command , Class Code , Revision ID , Header Type sunt necesare pentru toate dispozitivele PCI (pentru multe tipuri de dispozitive, sunt necesare și registrele Subsystem ID și Subsystem Vendor ID ).
Toate celelalte registre sunt opționale.
Pentru a accesa dispozitivul prin spațiul de adresă al memoriei sau I/O, software-ul de sistem sau OS programează registrele de adrese de bază ( în engleză Base Address Registers , numite și BAR-uri), trimițând comenzi de configurare către controlerul PCI. La începutul pornirii sistemului, toate dispozitivele PCI sunt într-o stare inactivă, nu li se atribuie adrese prin care driverele de dispozitiv pot comunica cu ele. Fie BIOS -ul, fie sistemul de operare însuși accesează sloturile PCI și setează BAR-urile în spațiul de adrese de configurare. Valorile BAR sunt valabile atâta timp cât sistemul este pornit. Când alimentarea este oprită, valorile acestor registre se pierd până la următoarea pornire, timp în care se repetă procedura de configurare. Deoarece acest proces este complet automatizat, utilizatorul computerului este eliberat de sarcina dificilă de a configura noul hardware conectat la magistrala PCI (spre deosebire de, de exemplu, magistrala ISA , adresele de bază ale dispozitivelor conectate la care trebuiau configurate cu jumperi sau întrerupătoare).
Orice dispozitiv PCI non-bridge (vezi Specificația arhitecturii de punte PCI-la-PCI. Revizia 1.1 ) poate avea până la șase BAR-uri, fiecare dintre acestea fiind responsabilă pentru o gamă specifică de adrese din memorie sau spațiul de adrese I/O. În plus, dispozitivul poate avea firmware ).
Pentru a lucra cu magistrala PCI în PC-AT și mașini compatibile, sunt alocate două porturi principale.
0CF8h -W adresă port Adresă
0CFCh RW date port date
Ambele porturi au 32 de biți.
Portul de adresă este următoarea structură pe 32 de biți: Portul de adresă specifică adresa de magistrală, dispozitiv și registru în spațiul de configurare a dispozitivului. În linii mari, un dispozitiv este un dispozitiv prezent fizic. O funcție este o unitate logică. С — steag de acces la dispozitiv.
Cei doi biți mai puțin semnificativi din portul de adresă sunt întotdeauna 0.
Când ați terminat de lucrat cu dispozitivul, resetați adresa la 0.
+---+---------+-------+----------+--------+---------------+-+-+
|31 |30 24|23 16|15 11|10 8|7 2|1|0|
+---+---------+-------+----------+--------+---------------+-+-+
| с | резерв |шина |устройство| функция|Индекс регистра|0|0|
+---+---------+-------+----------+--------+---------------+-+-+
Dacă 0FFFFh este returnat ca răspuns la o interogare de registru zero, atunci dispozitivul nu există. ID-ul furnizorului (ID-ul producătorului) - pentru Intel este 8086h, dar nu poate fi 0FFFFh.
Device ID (device ID) - ia diverse valori
Revision ID (revision ID) - indică numărul de revizuire al dispozitivului, atribuit de producător.
Cod de clasă (Cod de clasă) - constă din trei părți
+---------------+--------------+---------------------+
|23 16|15 8|7 0|
+---------------+--------------+---------------------+
|Base Class Code|Sub Class Code|Programming Interface|
+---------------+--------------+---------------------+
Codul clasei de bază - clasa de bază, prescurtat ca BCC.
Sub Class Code - o subclasă, abreviată ca SCC.
Interfață de programare - interfață, prescurtată ca PI.
Tip antet - Dacă bitul 7 este 1, atunci dispozitivul conține mai multe funcții.
Dacă bitul 6 este 0, atunci antetul este standard. Antete standard:
00 - vezi standardul de mai sus.
01 - standard pentru puntea PCI-la-PCI
02 - standard pentru puntea CardBus.