PCI-konfigurationsrummet er adresserummet for PCI - konfigurationen ud over de typiske hukommelses- og I/O-adresserum.
En af de største forbedringer af PCI-bussen i forhold til andre I/O-arkitekturer er dens konfigurationsmekanisme, som har et konfigurationsadresserum på 256 bytes, der kan adresseres ved at kende PCI-busnummeret, enhedsnummeret og enhedsfunktionsnummeret. De første 64 bytes ud af 256 er standardiserede, og resten af registrene kan bruges efter enhedsproducentens skøn.
Leverandør-id- og enheds-id - registrene identificerer enheden og omtales almindeligvis som PCI-id'et . Seksten -bit leverandør-id -registeret er udstedt af PCI SIG . Seksten -bit Device ID -registeret er tildelt af enhedsproducenten. Der er et projekt om at oprette en database med alle kendte registerværdier Leverandør-ID og Enheds-ID . (Se referencelisten .)
De første 16 dobbeltord i konfigurationsadresserummet (i henhold til PCI Local Bus Specification 2.2 ):
Adresse | 31 ... 24 | 23 ... 16 | 15 ... 8 | 7 ... 0 |
---|---|---|---|---|
0x00 | Enheds-ID | LeverandørID | ||
0x04 | Status | kommando | ||
0x08 | klasse kode | revisions-id | ||
0x0C | BIST | Overskriftstype | Latency timer | Cache linjestørrelse |
0x10 | Basisadresseregister 0 | |||
0x14 | Basisadresseregister 1 | |||
0x18 | Basisadresseregister 2 | |||
0x1C | Basisadresseregister 3 | |||
0x20 | Basisadresseregister 4 | |||
0x24 | Basisadresseregister 5 | |||
0x28 | Cardbus CIS pointer | |||
0x2C | Subsystem ID | Undersystemleverandør-id | ||
0x30 | Udvidelses-ROM-baseadresse | |||
0x34 | Reserveret | Muligheder pointer | ||
0x38 | Reserveret | |||
0x3C | Max_Lat | Min_Gnt | Afbryd pin | Afbryd linje |
DeviceID , VendorID , Status , Command , Class Code , Revision ID , Header Type - registrene er påkrævet for alle PCI-enheder (for mange enhedstyper er registrene Subsystem ID og Subsystem Vendor ID også påkrævet ).
Alle andre registre er valgfrie.
For at få adgang til enheden gennem adresserummet i hukommelsen eller I/O, programmerer systemsoftwaren eller OS basisadresseregistrene ( engelske baseadresseregistre, også kaldet BAR'er ), og sender konfigurationskommandoer til PCI-controlleren. Ved begyndelsen af systemstarten er alle PCI-enheder i en inaktiv tilstand, de er ikke tildelt adresser, som enhedsdrivere kan kommunikere med dem på. Enten BIOS'en eller operativsystemet selv får adgang til PCI-slots og opsætter BAR'erne i konfigurationsadresserummet. BAR-værdier er gyldige, så længe systemet er tændt. Når strømmen er slukket, går værdierne af disse registre tabt indtil næste opstart, hvor opsætningsproceduren gentages. Da denne proces er fuldautomatisk, frigøres computerbrugeren fra den vanskelige opgave at konfigurere ny hardware forbundet til PCI-bussen (i modsætning til f.eks. ISA-bussen , baseadresserne på enheder tilsluttet, som skulle konfigureres med jumpere eller kontakter).
Enhver ikke-bro PCI-enhed (se PCI-til-PCI Bridge Architecture Specification. Revision 1.1 ) kan have op til seks BAR'er, som hver er ansvarlig for et specifikt område af adresser i hukommelsen eller I/O-adresserummet. Derudover kan enheden have firmware ).
For at arbejde med PCI-bussen i PC-AT og kompatible maskiner er der tildelt to hovedporte.
0CF8h -W adresseport Adresse
0CFCh RW dataport Data
Begge porte er 32 bit.
Adresseporten har følgende 32 bit struktur: Adresseporten specificerer bus-, enheds- og registeradressen i enhedskonfigurationsrummet. Groft sagt er en enhed en fysisk tilstedeværende enhed. En funktion er en logisk enhed. С — enhedsadgangsflag.
De mindst signifikante to bits i adresseporten er altid 0.
Når du er færdig med at arbejde med enheden, skal du nulstille adressen til 0.
+---+---------+-------+----------+--------+---------------+-+-+
|31 |30 24|23 16|15 11|10 8|7 2|1|0|
+---+---------+-------+----------+--------+---------------+-+-+
| с | резерв |шина |устройство| функция|Индекс регистра|0|0|
+---+---------+-------+----------+--------+---------------+-+-+
Hvis 0FFFFh returneres som svar på en nulregisterforespørgsel, eksisterer enheden ikke. Leverandør-id (producent-id) - for Intel er dette 8086h, men kan ikke være 0FFFFh.
Device ID (enheds-ID) - tager forskellige værdier
Revisions-ID (revisions-ID) - angiver enhedens revisionsnummer, tildelt af producenten.
Klassekode (Klassekode) - består af tre dele
+---------------+--------------+---------------------+
|23 16|15 8|7 0|
+---------------+--------------+---------------------+
|Base Class Code|Sub Class Code|Programming Interface|
+---------------+--------------+---------------------+
Basisklassekode - basisklasse, forkortet til BCC.
Underklassekode - en underklasse, forkortet til SCC.
Programmeringsgrænseflade - grænseflade, forkortet PI.
Header Type - Hvis bit 7 er 1, så indeholder enheden flere funktioner.
Hvis bit 6 er 0, så er overskriften standard. Standard overskrifter:
00 - se standard ovenfor.
01 - standard for PCI-til-PCI-
bro 02 - standard for CardBus-bro.