Das PS/2 Maus / Tastatur-Protokoll

Copyright / mit freundlicher Genehmigung von: Adam Chapweske
Deutsche Übersetzung von Bernward Mock
Dieser Artikel ist im Original zu finden auf: http://www.computer-engineering.org/

 

Einleitung:

Dieser Artikel beschreibt den Anschluß der PS/2 Maus, der PS/2 Tastatur und der AT-Tastatur. Es werden die physikalischen und elektrischen Eigenschaften beschrieben, sowie das Low-Level-Kommunikationsprotokoll. Weitergehende Informationen wie Befehlssätze, Datenformate und spezielle Informationen über Tastaturen und Mäuse finden Sie hier:

The PS/2 (AT) Keyboard Interface
The PS/2 Mouse Interface

 

Die physikalische Schnittstelle

Den PS/2-Port gibt es mit zwei verschiedenen Steckverbindern: Als 5-poliger DIN-Stecker oder als 6-poliger Mini-DIN-Stecker. Beide sind, abgesehen von der Pinbelegung, elektrisch völlig gleichwertig. Beide Steckertypen können durch einen handelsüblichen oder selbst gebauten Adapter aufeinander umgesetzt werden, einfach indem die entsprechenden Pins miteinander verbunden werden. Die Steckverbindung ist genormt durcht das Deutsche Institut für Norm. Weitere Informationen dazu gibt es unter www.din.de

PC-Tastaturen haben entweder den 6-poligen Mini-DIN-Stecker oder den 5-poligen DIN-Stecker. Wenn Ihre Tastatur einen 6-poligen Stecker und Ihr Computer eine 5-polige Buchse hat (oder umgekehrt), können sie mit dem erwähnten Adapter miteinander verbunden werden. Tastaturen mit 6-poligem Mini-DIN-Stecker werden üblicherweise als "PS/2"-Tastatur bezeichnet, Tastaturen mit dem 5-poligen DIN-Stecker dagegen als "AT"-Tastatur ("XT"-Tastaturen besaßen übrigens auch den 5-poligen DIN-Stecker. Diese werden allerdings schon seit Jahren nicht mehr hergestellt). Alle neueren Tastaturen für PC's sind entweder PS/2-, AT- oder USB-Tastaturen. USB-Tastaturen werden in diesem Artikel nicht beschrieben, da sie ein völlig anderes Protokoll verwenden.

Mäuse gibt es in den verschiedensten Formen, Ausführungen, und Schnittstellen. Die bekannteste Ausführung dürfte vermutlich die PS/2-Maus sein, die jedoch mittlerweile von der USB-Maus verdrängt wird. Noch vor einigen Jahren war die serielle Maus Standard. In diesem Artikel werden nur Mäuse mit PS/2-Anschluß beschrieben.

Das Anschlußkabel der Tastaturen und Mäuse ist vier bis sechspolig abgeschirmt Typ 26 AWG (ca. 0,13 mm2) und gewöhnlich 2 Meter lang. Wenn Sie ein längeres Kabel brauchen, können Sie eine entsprechende Verlängerung im Computer- oder Elektronikfachhandel kaufen. Mehrere Verlängerungen sollten nicht hintereinandergeschaltet werden. Wenn Sie 10 m Kabel brauchen, kaufen Sie eine 10 m Verlängerung. Schließen Sie nicht fünf 2 m Verlängerungen hintereinander. Die Kommunikation zwischen Tastatur/Maus und Computer könnte sonst unzuverlässig werden.

Nebenbei bemerkt, es gibt einen weiteren Steckertyp, auf den sie bei einer Tastatur stoßen könnten. Während bei den meisten Tastaturen das Kabel fest verbunden ist, gibt es einige mit abnehmbaren Kabeln. Diese Kabel haben an der einen Seite den gewohnten DIN-Stecker (zum PC), und an der anderen Seite einen sogenannten SDL (Shielded Data Link) Steckverbinder. SDL wurde von der Firma AMP eingeführt. Der Stecker besitzt eine gewisse Ähnlichkeit mit einem Western-Telefonstecker, da er Federzungen statt Stiften besitzt, und mit einer Federzunge einrastet. Mehr Informationen dazu gibt es auf der Webseite von AMP (Anm. d. Ü.: AMP wurde mittlerweile von Tyco Electronics geschluckt), Verwechseln Sie den SDL-Stecker nicht mit dem USB-Stecker. Sie sehen auf der Zeichnung unten ähnlich aus; tatsächlich sind sie aber sehr verschieden. Der SDL-Stecker hat Federn und bewegliche Teile, der USB-Stecker hat keine beweglichen Teile.

Die folgenden Abbildungen zeigen die Pinbelegungen für jeden Stecker:

Male
DIN-Buchse
(Stecker)

Female 
DIN-Buchse
(Kupplung)

5-pin DIN (AT/XT): 
1 - Clock
2 - Data
3 - Nicht belegt
4 - Ground
5 - Vcc (+5V)

 

Male
Mini-DIN-Buchse
(Stecker)

Female
Mini-DIN-Buchse
(Kupplung)

6-pin Mini-DIN (PS/2):
1 - Data
2 - Nicht belegt
3 - Ground
4 - Vcc (+5V)
5 - Clock
6 - Nicht belegt

 
SDL-Stecker
SDL-Stecker
6-pin SDL:
A - Nicht belegt
B - Data
C - Ground
D - Clock
E - Vcc (+5V)
F - Nicht belegt

 


Die elektrische Schnittstelle

Hinweis: In diesem Text werde ich den Begriff "Host" für den Computer, oder woran auch immer die Tastatur/Maus angeschlossen sein mag, verwenden. Die Tastatur oder Maus werde ich allgemein als "Eingabegerät" bezeichnen.

Über Vcc/Ground wird die Tastatur/Maus mit Strom versorgt. Die Tastatur/Maus sollte nicht mehr als 275 mA verbrauchen. Besondere Vorsicht ist gegenüber Spannungsspitzen angebracht. Diese entstehen, wenn die Tastatur/Maus ein- oder ausgestöpselt wird, während der Computer eingeschaltet ist. Ältere Mainboards hatten SMD-Sicherungen als Schutz für die Maus- und Tastaturanschlüsse. Wenn diese durchbrannten, war das Board in der Regel unbrauchbar und durch einen durchschnittlichen Techniker nicht zu reparieren. Die meisten neueren Mainboards haben selbstheilende (Polyswitch-) Sicherungen, um diesem Problem abzuhelfen. Es ist jedoch nicht Standard, und es sind noch viele alte Mainboards im Einsatz. Deshalb rate ich davon ab, die Tastatur/Maus unter Spannung zu stecken.

 

Zusammenfassung Technische Daten der Stromversorgung
Vcc = +4.5V bis +5.5V.  
Maximale Stromaufnahme = 275 mA.

Die Data- und Clock-Leitungen sind vom Typ Open Collector mit Pullup-Widerständen. Eine Open-Collector-Schnittstelle hat zwei mögliche Zustände: Low oder hochohmig. Im Zustand Low schaltet ein Transistor gegen Ground durch. Im hochohmigen Zustand wird die Leitung weder High noch Low getrieben. Zusätzlich ist ein Pullup-Widerstand zwischen der Leitung und Vcc geschaltet. Dieser sorgt dafür, daß die Leitung High-Potential hat, wenn sie von keinem der Busteilnehmer auf Low gezogen wird. Der Wert dieses Widerstandes ist unkritisch und sollte zwischen 1 und 10 Kiloohm liegen. Höhere Werte reduzieren den Stromverbrauch, kleinere Werte reduzieren die Anstiegszeiten. Ein universelles Open-Collector-Interface ist auf der folgenden Abbildung gezeigt:

 

Abbildung 1:Allgemeines Open-Collector-Interface. Data und Clock werden an Pin A bzw. B des Microcontrollers eingelesen. Beide Leitungen haben im Ruhezustand +5V und können auf Ground gezogen werden, indem logisch "1" an C oder D angelegt wird. Folglich hat Data den invertierten Zustand von D, und Clock den invertierten Zustand von C.

Schaltplan Open-Collector-Interface


Hinweis: In meinen Beispielen habe ich ein paar Tricks benutzt, um ein Open-Collector-Interface mit PIC-Microcontrollern zu implementieren. Ich benutze den selben Port als Eingang und Ausgang und verwende die internen Pull-Up-Widerstände des PICs anstelle von externen Widerständen. Eine Leitung wird auf Low gezogen, indem man den entsprechenden Port als Ausgang setzt und logisch "0" ausgibt. Den hochohmigen Zustand erreicht man, indem der Port als Eingang geschaltet wird. Mit den eingebauten Schutzdioden und dem hohen Stromtreibervermögen der PICs, denke ich, kann man das durchaus so machen.

 

Kommunikation: Allgemeine Beschreibung

PS/2 Mäuse und Tastaturen benutzen ein bidirektionales, synchrones serielles Protokoll. Im Ruhezustand sind beide Busleitungen High. Nur in diesem Zustand darf die Tastatur/Maus mit der Datenübertragung beginnen. Der Host hat die absolute Kontrolle über den Bus und darf die Kommunikation jederzeit unterbrechen, indem er die Clockleitung auf Low zieht.

Das Clocksignal wird immer vom Eingabegerät erzeugt. Wenn der Host Daten senden möchte, muß er zunächst die Kommunikation unterbrechen, indem er die Clockleitung auf Low zieht. Anschließend zieht er die Datenleitung ebenfalls auf Low und setzt die Clockleitung wieder auf High, indem er in den Clock-Port hochohmig werden läßt. Dieser Zustand ist der "Request-to-Send"-Zustand und weist das Eingabegerät an, jetzt mit der Ausgabe der Clockimpulse zu beginnen.

Zusammenfassung: Bus-Zustände
Data = high, Clock = high:  Ruhezustand (Idle)
Data = high, Clock = low:  Kommunikation gestoppt (Inhibit)
Data = low, Clock = high:  Sendeanforderung (Request-to-Send) durch den Host

Alle Daten werden byteweise gesendet. Jedes Byte besteht aus einem Frame zu 11 oder 12 Bits:

Das Paritybit ist 1, wenn das Datenbyte eine gerade Anzahl von Einsen enthält, und 0 bei einer ungeraden Anzahl. Die Anzahl der Einsen im Datenbyte plus das Paritybyte ist immer ungerade (ungerade Parität). Dieses Verfahren dient zur Fehlererkennung. Die Tastatur/Maus muß das Paritybit prüfen und im Fehlerfall wie auf ein ungültiges Kommando reagieren.

Daten, die vom Eingabegerät zum Host gesendet werden, werden mit der fallenden Flanke des Clock-Signals gelesen; Daten vom Host zum Eingabegerät mit der steigenden Flanke. Die Clockfrequenz muß im Bereich von 10-16,7 kHz liegen. Das heißt, das Clock-Signal muß für 30-50 µs High und für 30-50 µs Low sein. Wenn Sie eine Tastatur, Maus oder einen Host Emulator entwickeln, sollten Sie die Datenleitung in der Mitte jedes Clockimpulses ändern bzw. abtasten, d.h 15-25 µs nach der entsprechenden Clock-Flanke. Noch einmal: Das Clock-Signal wird immer von der Tastatur/Maus erzeugt, aber der Host hat die Kontrolle über die Kommunikation.

Das Timing ist absolut entscheidend. Alle Zeitangaben müssen genau eingehalten werden.


Kommunikation: Vom Eingabegerät zum Host

Daten- und Clockleitung sind Open-Collector-Leitungen. Ein Widerstand ist von jeder Leitung nach +5V verbunden, somit ist der Ruhezustand High. Wenn die Tastatur/Maus Daten senden will, prüft sie zunächst, ob die Clockleitung High ist. Falls nicht, blockiert der Host gerade die Übertragung, und alle zu sendenden Zeichen müssen zwischengespeichert werden, bis der Host die Clockleitung wieder freigibt. Die Clockleitung muß für mindstens 50 µs durchgehend High sein, bevor das Eingabegerät mit der Übertragung beginnen kann.

Wie bereits im letzten Abschnitt erwähnt, benutzen Tastatur und Maus ein serielles Protokoll mit 11 Bit langen Frames:

Das Eingabegerät gibt ein Datenbit auf den Bus, wenn Clock High ist; der Host liest es ein, wenn Clock Low ist (siehe Abbildung 2 und 3)

Abbildung 2: Übertragung vom Eingabegerät zum Host. Die Datenleitung ändert ihren Zustand wenn die Clockleitung High ist. Daten sind gültig, wenn Clock Low ist.
Logic Diagramm
Abbildung 3: Scancode für die Taste "Q" (15h), von der Tastatur zum Computer gesendet. Kanal A ist der Clock, Kanal B sind die Daten.

Oszilloskop Screenshot

 

Die Clockfrequenz beträgt 10 - 16,7 kHz. Zwischen der steigenden Flanke von Clock und einem Wechsel von Data müssen mindestens 5 µs liegen. Zwischen einem Wechsel von Data und der fallenden Flanke von Clock müssen mindestens 5 µs und maximal 25 µs liegen.

Der Host kann die Übertragung jederzeit unterbrechen, indem er die Clockleitung für mindestens 100 µs auf Low zieht. Wenn eine Übertragung vor dem 11. Clockimpuls unterbrochen wird, muß das Eingabegerät den Rest der Übertragung verwerfen und die Neuübertragung des aktuellen "Chunks" vorbereiten, wenn der Host die Clockleitung wieder freigibt. Ein "Chunk" ist z.B. ein Make-Code, ein Break-Code, ein Device-ID, ein Mouse-Move-Paket usw. Wird z.B. eine Tastatur bei der Übertragung des zweiten Byte eines Zwei-Byte Break-Codes unterbrochen, so muß der komplette Break-Code noch einmal gesendet werden, und nicht nur das zweite Byte.

Wenn der Host die Clockleitung vor dem ersten Clock-Impuls (fallende Flanke) oder nach der fallenden Flanke des letzten Clock-Impulses auf Low zieht, ist keine Wiederholung erforderlich. Fallen aber neue Daten an, die gesendet werden müssen, so müssen diese solange gespeichert werden, bis der Host die Clockleitung freigibt. Tastaturen haben zu diesem Zweck einen 16 Byte Buffer. Fallen mehr als 16 Byte durch Tastaturanschläge an, werden diese ignoriert, bis im Buffer wieder freier Platz ist. Mäuse speichern nur das jeweils letze Datenpaket.

Kommunikation: Vom Host zum Eingabegerät

In dieser Richtung sehen die Datenpakete etwas anders aus. Zunächst einmal werden die Clockimpulse immer vom Eingabegerät erzeugt. Will der Host Daten zum Eingabegerät senden, muß er zuerst Daten- und Clockleitung wie folgt in den Request-To-Send-Zustand bringen:

Das Eingabegerät sollte den Bus in Abständen von maximal 10 ms auf diesen Zustand prüfen. Wenn das Eingabegerät diesen Zustand erkennt, beginnt es Clockimpulse für 8 Datenbits, Paritätsbit und ein Stopbit auszugeben. Der Host ändert die Datenleitung entsprechend wenn Clock Low ist. Die Daten werden vom Eingabegerät übernommen, wenn Clock High ist. Dies ist der umgekehrte Vorgang der Kommunikation vom Eingabegerät zum Host.

Nachdem das Stopbit empfangen wurde, bestätigt das Eingabegerät, indem Data Low gesetzt wird (Acknowledge) und ein letzter Clockimpuls ausgegeben wird. Sollte der Host die Datenleitung nach dem 11. Clockimpuls nicht freigeben, gibt das Eingabegerät solange Clockimpulse aus, bis die Datenleitung freigegeben wird (das Eingabegerät erzeugt dabei einen Fehler).

Der Host kann die Übertragung jederzeit vor dem 11. Clockimpuls abbrechen, indem er Clock für mindestens 100 µs Low hält.

Zur Verdeutlichung hier noch einmal die Schritte, die der Host bei der Datenübertragung zum PS/2-Eingabegerät einhalten muß:

  1. Die Clock-Leitung für mindestens 100 µs auf Low bringen
  2. Die Datenleitung auf Low bringen
  3. Die Clockleitung wieder High werden lassen
  4. Warten, bis das Eingabegerät die Clockleitung auf Low bringt
  5. Die Datenleitung entsprechend dem ersten Datenbit auf 0 oder 1 setzen
  6. Warten, bis das Eingabegerät die Clockleitung auf Highbringt
  7. Warten, bis das Eingabegerät die Clockleitung auf Low bringt
  8. Wiederholen der Schritte 5 bis 7 für die anderen 7 Datenbits und das Paritybit
  9. Die Datenleitung freigeben
  10. Warten, bis das Eingabegerät die Datenleitung auf Low bringt
  11. Warten, bis das Eingabegerät die Clockleitung auf Low bringt
  12. Warten, bis das Eingabegerät Clockleitung und Datenleitung wieder freigibt

Abbildung 4 zeigt diesen Vorgang und Abbildung 5 zeigt noch einmal getrennt, welche Signale vom Host und welche vom Eingabegerät (Device) erzeugt werden. Beachten Sie, daß sich beim Acknowledge-Bit die Datenleitung - anders als üblich - ändert, während Clock High ist.

Abbildung 4:  Übertragung vom Host zum Eingabegerät

Logic Diagramm

Abbildung 5:  Übertragung vom Host zum Eingabegerät, getrennt für beide Geräte

Logic Diagramm
Bezugnehmend auf Abbildung 5 muß der Host 2 Zeitabschnitte beachten.
(a) ist die Zeit innerhalb der das Eingabegerät beginnt, Clockimpulse auszugeben, nachdem der Host erstmals die Clockleitung auf Low gesetzt hat. Sie darf nicht länger als 15 ms sein.
(b) ist die Zeit für die Übertragung des gesamten Datenpakets, die nicht größer als 2 ms sein darf. Wird eine dieser Vorgaben nicht eingehalten, sollte der Host einen Error generieren. Unmittelbar nach dem Acknowledge-Bit darf der Host die Clockleitung auf Low bringen um die Kommunikation zu unterbrechen, während er die Daten verarbeitet. Wenn das vom Host gesendete Kommando eine Quittierung verlangt, muß diese innerhalb von 20 ms gesendet werden, nachdem die Clockleitung freigegeben wurde. Fehlt diese Quittierung, generiert der Host einen Fehler.

PS/2 - Startseite

 

Valid HTML 4.01 TransitionalValid CSS!