| Zeile 1: | Zeile 1: | ||
'''Peripheral Component Interconnect''' (kurz '''PCI''') ist ein [[:Kategorie:Bus | Bus]] zur leichten Verbindung von Peripheriegeräten mit der CPU. | '''Peripheral Component Interconnect''' (kurz '''PCI''') ist ein [[:Kategorie:Bus | Bus]] zur leichten Verbindung von Peripheriegeräten mit der CPU. | ||
| + | |||
| + | Die Informationen in diesem Artikel beziehen sich auch auf die vom klassischen PCI-Bus abgeleiteten Bus-Standards: PCI-Express, Hypertransport, PCI-X und AGP. Diese Busse basieren vom logischen Protokoll her auf PCI aber benutzen andere physikalische Daten-Übertragungsmechanismen bzw. andere Topologien. | ||
== Konfigurations-Register == | == Konfigurations-Register == | ||
| − | Jedes PCI-Gerät besitzt | + | Jedes PCI-Gerät besitzt einen eigenen Konfigurations-Adressraum, welcher 256 Byte groß ist. Gelesen und beschrieben wird er 32bit-weise mithilfe eines Adress-I/O-Ports (0xCF8) und eines Daten-I/O-Ports (0xCFC). |
| + | |||
| + | Bei PCI-Express, Hypertransport und PCI-X ist der Konfigurations-Adress-Raum 4096 Byte groß. | ||
=== Aufbau des Adress-I/O-Ports === | === Aufbau des Adress-I/O-Ports === | ||
| Zeile 31: | Zeile 35: | ||
*Die ''Device ID''s verwalten die Hardwarehersteller selbst. Sie dient zusammen mit der ''Vendor ID'' der eindeutigen Identifikation des Gerätes. | *Die ''Device ID''s verwalten die Hardwarehersteller selbst. Sie dient zusammen mit der ''Vendor ID'' der eindeutigen Identifikation des Gerätes. | ||
*''Classcode'' ist noch einmal geteilt. Die oberen 8 Bit repräsentieren die ''Base Class''. Die mittleren 8 Bit stehen für die ''Subclass'' und die unter 8 Bit für das ''Programming Interface''. | *''Classcode'' ist noch einmal geteilt. Die oberen 8 Bit repräsentieren die ''Base Class''. Die mittleren 8 Bit stehen für die ''Subclass'' und die unter 8 Bit für das ''Programming Interface''. | ||
| + | *Die ''Revision ID'' wird vom Hardwarehersteller selbst verwaltet. | ||
{| {{Prettytable}} align="right" | {| {{Prettytable}} align="right" | ||
|- align="center" | |- align="center" | ||
| Zeile 104: | Zeile 109: | ||
=== Bedeutung einiger Register === | === Bedeutung einiger Register === | ||
| + | |||
| + | ==== Status-Register ==== | ||
| + | ''TODO'' | ||
==== Command-Register ==== | ==== Command-Register ==== | ||
| Zeile 132: | Zeile 140: | ||
Bit 7 ist auf 0 zu setzen, Bits 11 bis 15 sind reserviert (und undefiniert). Nach dem Reset des Geräts sind alle hier aufgeführten Bits auf 0 gesetzt (wobei das BIOS wohl einige davon setzen wird). | Bit 7 ist auf 0 zu setzen, Bits 11 bis 15 sind reserviert (und undefiniert). Nach dem Reset des Geräts sind alle hier aufgeführten Bits auf 0 gesetzt (wobei das BIOS wohl einige davon setzen wird). | ||
| + | |||
| + | ==== Base-Address-Register ==== | ||
| + | ''TODO'' | ||
=== Codebeispiel === | === Codebeispiel === | ||