I/O-Adresse Bezeichnung Funktion Tabelle 10.12: Die Register für den Zugriff auf den Konfigurationsbereich von PCI-Einheiten Ein Zugriff auf den Configuration Space wird dadurch ausgefüh
Trang 110.4.4 Die PCI-Bus-Register
Für die Kommunikation mit PCI-Einheiten sind gegenüber ISA zwei spezielle Adres-sen im I/O-Adressraum vorgesehen, die jeweils 32 Bit breit sind und den Zugriff auf den Configuration Space erlauben: CONFIG ADDRESS und CONFIG DATA
I/O-Adresse Bezeichnung Funktion
Tabelle 10.12: Die Register für den Zugriff auf den Konfigurationsbereich von PCI-Einheiten
Ein Zugriff auf den Configuration Space wird dadurch ausgeführt, dass zunächst die Adresse an 0CF8h übergeben wird Ein Schreibbefehl auf die Adresse 0CFAh (Config Data) überträgt daraufhin den gewünschten Wert an die spezifizierte Stelle
im Gerätekonfigurationsbereich Ein Lesezyklus funktioniert nach dem gleichen Prinzip Das Config-Address-Register hat die folgende Belegung:
Config Address Register (0CF8h):
Bit 31 Bit 30-24 Bit 23-16 Bit 15-11 Bit 10-8 Bit 7-2 Bit 1 Bit 0 Enable Reserviert Bus-Nr Geräte-Nr Funktion Register 0 0 Mit einer »1« im Enable-Bit wird ein Konfigurationszyklus eingeleitet Mit einer 0 wird hingegen ein I/O-Zyklus – kein PCI-spezifischer – durchgeführt Die Bits 30-24 sind für das Lesen reserviert und liefern immer eine 0
Mit den Bits 23-16 wird einer von 256 theoretisch möglichen PCI-Bussen (meist ist
nur einer vorhanden) ausgewählt Die Auswahl einer PCI-Einheit erfolgt mit
Gerä-te-Nr und die Bits 10-8 (Funktion) selektieren eine spezielle Funktion bei einer
PCI-Multifunktionseinheit
Mit den Bits 7-2 wird das gewünschte Register im Configuration Space selektiert (siehe folgendes Kapitel) Wie die Zuordnung von Bus- und Gerätenummer für ein Intel-Mainboard aussehen kann, zeigt die folgende Tabelle
Trang 2Bus Nr Geräte Nr Funktion Verwendung
Tabelle 10.13: PCI-Bus-Geräteadressen und ihre Funktionen bei einem Intel-Chipsatz
Für PCs gibt es einen zweiten Konfigurationszugriff, wobei hier der Configuration Space einer PCI-Einheit in einen 4 Kbyte großen Adressbereich zwischen C000h-CFFFh eingeblendet wird Das Register unter der I/O-Adresse 0CF8h wird dann als
Configuration Space Enable bezeichnet und stellt sich wie folgt dar.
Configuration Space Enable Register (0CF8h):
Bit 7-4 Bit 3-1 Bit 0
Key Function Special Cycle Enable, SCN
Die Abbildung des Konfigurationsbereiches, was nur bei SCN=1 möglich ist, erfolgt nach dem Schreiben einer Function Number in die Bits 3-1 Diese Nummer be-stimmt, welche PCI-Einheit in welchem Bereich eingeblendet wird, wobei diese Zuordnung festliegt (z.B 0: C000h-C0FFh, 1: C100h-C1FFh, 15: CF00h-CFFFh) Das Schreiben eines beliebigen, von 0 abweichenden Wertes in die Key-Positionen be-endet den Vorgang
Die dritte Möglichkeit, auf den Configuration Space zuzugreifen, bietet die Soft-ware-Schnittstelle des BIOS (Interrupt 1Ah), was auch die üblichere
Vorgehenswei-se ist Wie dies im Einzelnen funktioniert, ist beispielsweiVorgehenswei-se im Buch PC Hardware
Referenz (Markt&Technik) erläutert.
10.4.5 Der Konfigurationsbereich – Configuration Space
Peripheral Component Interconnect definiert einen Konfigurationsbereich (Configu-ration Space) von 256 Byte, womit eine automatische Konfigurierung der PCI-Ein-heiten zu erreichen ist Jede PCI-konforme Einheit verfügt über einen eigenen Konfigurationsbereich, wobei die hier festgelegten Parameter in der Regel während des Bootvorganges oder nach einem Systemreset aus einem externen EEPROM auf der PCI-Karte gelesen werden
Trang 300h Device ID (02-03h) Vendor ID (00h-01h)
04h Status-Register (06h-07h) Command-Register (04h-05h)
0Ch BIST (0Fh) Header Type(0Eh) Latency Timer (0Dh) Cache Line Size
(0Ch)
30h Expansion ROM Base Address (Erweiterungs-ROM)
Tabelle 10.14: Der Aufbau des Headers im Konfigurationsbereich
Dieser Konfigurationsadressraum wird in einen Header-Bereich und in einen geräte-abhängigen Bereich unterteilt PCI-Geräte müssen generell nur diejenigen Register unterstützen, die für ihre Funktion benötigt werden Der Konfigurationsbereich muss dabei zu jeder Zeit und nicht nur beim Booten adressierbar sein
Vorgeschrieben ist für jedes PCI-Device der Header-Bereich von 64 Bytes und die weiteren 192 Bytes sind geräteabhängig und können von den Herstellern für
eige-ne Funktioeige-nen eingesetzt werden In diesem Bereich befinden sich beispielsweise bei einem PCI-Mainboard die Register für die Cache- und die DRAM-Speicher-steuerung, für die Bridges und zahlreiche weitere
Vendor- und Device-IDs
Alle PCI-Geräte müssen die Vendor- (Herstellerkennung) und Device-ID (Geräte-kennung) sowie das Status- und Kommando-Feld unterstützen, alle anderen Felder sind optional und können auch in Abhängigkeit von der jeweiligen Gerätefunktion
als Reserviert angesehen werden.
Für die Herstelleridentifizierung (Vendor-ID) wird von der PCI Special Interest Group
(PSIG) eine eindeutig identifizierbare Nummer vergeben, während die Nummern für die Geräteidentifizierung und die Revisionsnummer vom Hersteller des PCI-Gerätes selbst festgelegt werden können
Trang 4Mit dem Kommando-Register (Command) wird die Steuerung des jeweiligen PCI-Gerätes beeinflusst Hier wird festgelegt, wie es auf PCI-Zyklen zu reagieren hat Nach dem Schreiben einer 0 in dieses Register wird die PCI-Einheit vom Bus logisch abgekoppelt und reagiert dann nur noch auf Konfigurationszugriffe
Command Register:
Reser- Fast /SERR Wait Parity VGA Memory Special Bus Memory I/O-viert Back Enable Cycle Error Palette Write Cycle Master Space Space
Back
>
> Bit 0: I/O-Space
Mit einer 1 wird es dem Gerät ermöglicht, auf den I/O-Bereich zuzugreifen, eine 0 hingegen unterbindet dies
>
> Bit 1: Memory Space
Mit einer 1 wird es dem Gerät ermöglicht, auf den Memory-Bereich zuzugrei-fen, eine 0 hingegen unterbindet dies
>
> Bit 2: Bus Master
Mit einer 1 wird das Gerät als Master des Systems konfiguriert, eine 0 bewirkt die passive Teilnahme des Gerätes an den PCI-Buszyklen
>
> Bit 3: Special Cycle
Eine 1 erlaubt die Teilnahme des Gerätes am Special Cycle Mode, (Sonderzyklen) eine 0 bewirkt dessen Ausschluss Mögliche Zyklen sind beispielsweise Shutdown
(CPU schaltet ab) oder auch speziell an die jeweilige CPU-Architektur angepasste (x86) und somit herstellerspezifische Funktionen
>
> Bit 4: Memory Write Invalidate Enable
Ist dieses Bit gleich 1, darf der jeweils aktuelle PCI-Master des Systems ein
Memory-Schreib-Kommando mit Invalidate (Ungültigkeitserklärung)
ausfüh-ren, andernfalls (0) wird ein konventioneller Speicherzugriff ausgeführt
>
> Bit 5: VGA Palette Snoop
Steuert den Zugriff auf das Paletten-Register einer VGA-kompatiblen Grafik-karte Eine Funktion, die beispielsweise für die Kommunikation einer PCI-Grafikkarte mit einer ISA-Videokarte, die beide mit Hilfe des Feature-Connectors verbunden sind, benötigt wird Mit einer 1 wird der Zugriff verwehrt
>
> Bit 6: Parity Error
Ist dieses Bit gleich 0, reagiert das Gerät generell nicht auf Parity-Fehler, an-dernfalls (1) wird eine festgelegte (gerätespezifische) Funktion ausgeführt
>
> Bit 7: Wait Cycle Control
Falls das PCI-Device Wartezyklen in den PCI-Bus-Datenverkehr einfügt, wird dies mit einer 1 festgelegt
Trang 5> Bit 8: /SERR Enable
Mit einer 1 wird festgelegt, dass das Gerät die System Error Function (/SERR)
ausführen kann Nach einem Reset ist dieses Bit gleich 0, und falls das Gerät
die System Error Function nicht verwenden soll, wird es auf 0 belassen.
>
> Bit 9: Fast Back-to Back Cycle
Bei gesetztem Bit (1) ist festgelegt, dass ein PCI-Master schnelle Zyklen auf mehrere PCI-Devices ausführen kann
>
> Bit 10-15: Reserviert
In der PCI-Version 2.0 werden diese Bits nicht für PCI-Einheiten verwendet
Status-Register
Das Status-Register einer Einheit informiert über den aktuellen Stand der PCI-Aktivität Welche Bits im Einzelnen unterstützt werden, ist auch hier von der je-weiligen PCI-Gerätefunktion abhängig
Parity System Master Target Signaled DEVSEL DEVSEL Data Fast Reser Error Error Abort Abort Target Timing 1 Timing 0 Parity Back-to- viert
>
> Bit 0-6: Reserviert
Die Bits sind reserviert und werden bis zur PCI-Version 2.0 nicht für PCI-Ein-heiten verwendet Reservierte und nicht unterstützte Bereiche enthalten übli-cherweise jeweils eine 0
>
> Bit 7: Fast Back-to-Back
Das Bit signalisiert, ob Fast-Back-to-Back-Zyklen unterstützt werden (1) oder nicht (0)
>
> Bit 8: Data Parity
Dieses Bit wird nur von PCI-Busmastern verwendet und ist dann gesetzt, wenn Parity Error (PERR) aktiviert worden ist
>
> Bit 9, 10: DEVSEL Timing
Die beiden Bits definieren das Timing des /DEVSEL-Signals (Device Select)
DEVSEL Timing 1 DEVSEL Timing 0 Timing
Tabelle 10.15: Einstellung des DEVSEL-Timings
Trang 6> Bit 11: Signaled Target Abort
Falls ein Bus-Zyklus vom PCI-Target abgebrochen worden ist, setzt es dieses Bit
>
> Bit 12: Target Abort
Alle PCI-Busmaster müssen dieses Bit unterstützen und setzen es, wenn ein Target (Slave) eine Übertragung abgebrochen hat
>
> Bit 13: Master Abort
Entspricht in der Funktion dem Bit 12 mit dem Unterschied, dass ein Master eine Übertragungsunterbrechung mit diesem Bit signalisiert
>
> Bit 14: System Error
Dieses Bit wird immer dann von einer PCI-Einheit gesetzt, wenn ein System-fehler (Signal /SERR) aufgetreten ist
>
> Bit 15: Parity Error
Beim Auftreten eines Paritätsfehlers setzt die PCI-Einheit dieses Bit
Class Codes
Die Class-Code-Register (ab 0Ah) können vom Bus nur gelesen werden und geben Aufschluss über die grundsätzliche Funktion des PCI-Gerätes, wie es in der
folgen-de Tabelle angegeben ist
Class Code Bedeutung
Tabelle 10.16: Die Class-Code-Register (0Dh-FEh sind reserviert) informieren über die grundsätzliche
Funktion einer PCI-Einheit
Trang 7Die Class-Code-Register werden jeweils in drei 8-Bit-Felder (Upper, Middle, Lower,) aufgeteilt: die Base Class, die Sub Class für eine genauere Bestimmung des
Device-Typs und das Register Level Programming Interface (I/F), das bei einigen Einheiten
stets fest als 00h definiert ist (vergl Tabellen)
Byte Offset Typ Bedeutung
Upper 0Bh Base Class Identifizierung des Gerätetyps Middle 0Ah Sub Class Definiert spezielle Unterklassen Lower 09h Register Level Optionale Funktionen
Programming Interface
Tabelle 10.17: Beispiele für Sub Classes innerhalb der Base Classes
Base Class 00h – Kompatibilität
Sub Class Bedeutung
Base Class 01h – Laufwerkscontroller
Sub Class Bedeutung
01h IDE Controller, mit Programming Interface
Base Class 02h – Netzwerk-Controller
Sub Class Bedeutung
Trang 8Fortsetzung der Tabelle:
Base Class 03h – Display Controller
Sub Class Bedeutung
80h anderer Display-Controller
Base Class 04 – Multimedia-Geräte
Sub Class Bedeutung
Base Class 05h – Memory Controller
Sub Class Bedeutung
Base Class 06h – Bridge Devices
Sub Class Bedeutung
Trang 9Fortsetzung der Tabelle:
Base Class 07h – Communication Controller
Sub Class I/F Bedeutung
01h 01h Bi-directional Parallel Port
Base Class 08h – System-Peripherie
Sub Class I/F Bedeutung
(Programmable Interrupt Controller)
01h 02h EISA-kompatibler DMA-Controlller
Trang 10Fortsetzung der Tabelle:
Base Class 09h – Input Devices
Sub Class I/F Bedeutung
Base Class 0Ah – Docking Stations
Sub Class I/F Bedeutung
Base Class 0Bh – Prozessorkarten
Sub Class I/F Bedeutung
Base Class 0Ch – serielle Buscontroller
Sub Class I/F Bedeutung
Tabelle 10.18: Die Class-Code-Register bestimmen den jeweiligen PCI-Gerätetyp
Trang 11> Revision ID
Dieses Register enthält die Identifikation der Revisionsnummer für das PCI-Device
>
> BIST: Built In Self Test
Das Register steuert den Selbsttest der PCI-Einheit Falls keiner implementiert ist, liefert das Register immer 0 Bei der Ausführung des Tests nimmt die Einheit nicht am PCI-Datenverkehr teil
>
> Header Type
Das Header-Byte identifiziert in den Bits 0-6 die Belegung der Bytes 10h-3Fh
im PCI Configuration Space und gibt an, ob es sich um eine Einheit mit meh-reren Funktionen (Multifunction) handelt In diesem Fall führt das Bit 7 eine 1
>
> Latency Timer
Legt die Zeit fest, für die ein aktueller Master noch den Bus okkupieren darf, bis die Anforderung eines weiteren Masters bearbeitet wird Hierfür findet sich oftmals im BIOS-Setup ein entsprechender Eintrag mit einem vorgegebenen Wert, der immer zu den üblichen PCI-Taktzyklen addiert wird
>
> Cache Line Size
Dieses Register spezifiziert die Cache-Line-Größe in Einheiten zu jeweils 32 Bit
>
> Base Address Register 0-5
In diesen Registern werden die Basisadressen für einen oder mehrere I/O-und/oder Memory-Bereiche festgelegt, die von der jeweiligen PCI-Einheit ver-wendet werden sollen
>
> Expansion ROM Base Address
Falls das PCI-Device ein ROM (z.B für ein BIOS) benötigt, wird hier die Basis-adresse für das ROM angegeben
>
> Max-Lat
Gibt einen gerätespezifischen Wert in Einheiten von 0,25 µs für den Latency-Timer vor
>
> Min-Gnt
Spezifiziert die Zeit für eine Burst-Periode einer PCI-Einheit, bezogen auf ei-nen Takt von 33 MHz
>
> Interrupt Pin
Dieses Register informiert über den verwendeten Interrupt-Kanal der PCI-Einheit Einfache – keine Multifunction Devices – dürfen nur den INTA ver-wenden
Tabelle 10.19: Der Bezug der Interrupt-Pin-Information zum jeweiligen INTx-Kanal
Trang 12> Interrupt Line
Jede PCI-Einheit, die Interrupts verarbeiten kann, verfügt über dieses 8-Bit-Register Hier ist angegeben, über welchen ISA-IRQ-Anschluss der PCI-Interrupt abgebildet wird
Device Space
Wie erwähnt, ist lediglich der Header des Configuration Space eindeutig definiert Wie die übrigen 192 Byte (Device Space) verwendet werden (40h-FFh), hängt von den jeweiligen PCI-Einheiten ab Im Folgenden sind als Beispiel die Register, wie sie beim PCI-Chipsatz Intel 82430 vorhanden sind, angegeben
59h-5Fh PAM [6:0] Programmable Attribute Map R/W
Tabelle 10.20: Die PCI-Register beim Intel-Chipsatz 82430 für Pentium-PCs
Trang 1310.5 ISA-Plug&Play
PCI ist »von Hause aus« Plug&Play-fähig, kann demnach die PCI-Einheiten automa-tisch konfigurieren, d.h die PC-Ressourcen konfliktfrei auf die einzelnen PCI-Devices verteilen Bei ISA-Karten ist dies bekanntermaßen nicht möglich, da die zu reservieren-den PC-Ressourcen per Jumper auf reservieren-den einzelnen Karten festgelegt werreservieren-den müssen Der Übergang von einem anderen Bussystem hin zu PCI ist zwar dadurch erleichtert worden, dass ein PCI-Mainboard oft noch einige ISA-Slots besitzt, gleichwohl ist ISA eben nicht Plug&Play-fähig Aus diesem Grunde wurde von Intel und Microsoft
im Jahre 1993 ISA-Plug&Play definiert, was auch ISA-Karten zu dieser Fähigkeit
verhelfen soll, was nach der Vorstellung von PCI erfolgte
ISA-Plug&Play-Karten besitzen einen speziellen I/O-Chip, damit sie an dem defi-nierten Identifizierungs- und Konfigurationsprozess teilhaben können Das Inter-face einer derartigen Karte ist demnach völlig anders aufgebaut als das einer kon-ventionellen ISA-Karte
Leider ist der Begriff Plug&Play nicht geschützt, so dass am Markt eine Vielzahl
von Einsteckkarten existierten, die zwar diese Bezeichnung führen, aber keines-wegs dem Intel-/Microsoft-Standard gehorchen Diese Karten werden lediglich ohne Jumper oder DIP-Schalter auf herstellerspezifische Art und Weise konfigu-riert, haben im Prinzip aber nichts mit dem Intel-/Microsoft-Standard gemein Diese Software-konfigurierbaren ISA-Karten, die es schon seit vielen Jahren gibt, funktionieren vereinfacht dargestellt wie folgt: die Schalterstellungen einfach durch
ein Latch (74LS373) oder einen Registerbaustein (D-Flip-Flop, 74LS374) ersetzt.
Durch einen Software-Treiber, der sich üblicherweise in der CONFIG.SYS befindet, werden die zuvor – via Installationsprogramm – festgelegten Daten dann in das Latch geschrieben und gelten damit bis zum nächsten Bootvorgang für die ent-sprechende Karte Dieses Verfahren wird insbesondere bei Soundkarten häufig an-gewendet Eine automatische Konfigurierung der verschiedenen PC-Karten ist da-mit jedoch kaum möglich, da das herstellerspezifische Installationsprogramm keine zuverlässige Information darüber erhalten kann, welche Ressourcen des PC bereits belegt sind und welche nicht
○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○
Weder die üblichen Testprogramme wie etwa MSD noch die zu ISA-Einsteckkarten mitgelierten Installationsprogramme und auch nicht Windows 95 können bei kon-ventionellen ISA-Karten erkennen, ob und welche PC-Ressourcen von ihnen belegt werden Die Daten werden üblicherweise aus den PC-Konfigurationsdateien
○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○
(AUTOEXEC.BAT, CONFIG.SYS, *.INI) ermittelt.
Wie die typischen Diagnoseprogramme auch – beispielsweise Microsoft Diagnostic
(MSD) – kann das betreffende Installationsprogramm nur versuchen, die noch
frei-en Ressourcfrei-en zu ermitteln, was mehr oder wfrei-eniger gut funktioniert, da die (al-ten) ISA-Karten keinen allgemein gültigen Mechanismus bieten, der die tatsäch-lich festgelegten Schalterstellungen ermitteln und auch feststellen kann, von welcher Karte welche Ressourcen belegt werden Diese Datenermittlung kann nur anhand von Treibereinträgen wie in der AUTOEXEC.BAT, der CONFIG.SYS oder den
INI-Datei-en durchgeführt werdINI-Datei-en, wobei diese Einträge nicht zwangsläufig mit dINI-Datei-en
gejum-perten übereinstimmen müssen.
Zur Implementierung eines automatisch stattfindenden Konfigurierungsprozesses von ISA-Karten bedarf es daher eines standardisierten Verfahrens, ohne dass dabei – aus Kompatibilitätsgründen – elektrische Änderungen am ISA-Bus oder
zusätzli-che Signale nötig sind Intel und Microsoft haben eben dafür ISA-Plug&Play