PCI-konfigurationsplads

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.

Standardiserede registre

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.

Automatisk hardwareinitialisering med konfigurationsplads

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 ).

PCI-adgang via I/O-porte

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.

Links