Forum: Mikrocontroller und Digitale Elektronik PS/2 - Problem bei Initialisierung


von Paul W. (mosfetkiller)


Lesenswert?

Hallo.

Ich schreibe gerade ein kleines Programm, um mit einem AVR eine 
ordentliche Tastatur zu emulieren. Das Senden und Empfangen von Bytes 
scheint korrekt zu funktionieren, nach Einstecken des PS/2-Steckers 
kommt vom PC die erwartete Init-Sequenz, die ich auch ordnungsgemäß 
abarbeite, allerdings anscheinend nur bis zu dem Punkt, an dem ich das 
Kommando 0xF4 (Enable Keyboard) erhalte.
Diese Kommando ACKe ich (so steht es in jeder 
PS/2-Tastaturprotokollbeschreibung im Netz), erhalte danach jedoch das 
Kommando 0xEF (Invalid Command) vom PC.
ACKe ich das Enable-Kommand NICHT, so beginnt der PC aufs neue mit der 
Initsequenz (Reset, Send ID, Set Scan Code Set, Set LEDs, Set Typematic 
Delay ...und anschließend halt wieder Enable Keyboard).
Und wenn ich das Kommando 0xEF (Invalid Command) ACKe, beginnt erneut 
die Initsequenz.

Kurzum, ich denke irgendwas stimmt da nicht, irgendwas muss ich noch 
beachten, irgendwas will der PC nach dem Kommando 0xF4 (Enable Keyboard) 
noch von mir haben.

Kann mir jemand weiterhelfen, der sich mal damit auseinandergesetzt hat?

Wäre auch schön, wenn mir jemand sagen könnte, wie ich mit dem besagten 
Kommando 0xEF (Invalid Command) umgehen muss; dazu habe ich garnichts im 
Netz gefunden.
Ich habe auch schon einschlägige Seiten wie
- http://www.marjorie.de/ps2/ps2_protocol.htm
- http://stanislavs.org/helppc/keyboard_commands.html und
- http://pcbheaven.com/wikipages/The_PS2_protocol/
abgeklappert.

Gruß,
Paul

von volltroll.de (Gast)


Lesenswert?

"Wäre auch schön, wenn mir jemand sagen könnte, wie ich mit dem besagten
Kommando 0xEF (Invalid Command) umgehen muss; dazu habe ich garnichts im
Netz gefunden."

Einfach Ignorieren?

von Paul W. (mosfetkiller)


Lesenswert?

Woher weißt du das so genau?

Bislang ignoriere ich es ja. Und dadurch empfange ich es in einer 
Endlosschleife.

Kleiner Nachtrag (sollte eig. noch in den Eingangspost): Ich lasse mir 
parallel via RS232 alle empfangenen Befehle schicken. Daher weiß ich 
genau, dass ich keine anderen Befehle verpasse. Nach 0xF4 (Enable 
Keyboard) kommt einfach in einer Endlosschleife immer nur noch 0xEF an.

von André H. (andrekr)


Lesenswert?

Also, laut http://www.computer-engineering.org/ps2keyboard/ ist das mit 
dem ACK richtig.
Kannst du dir die Unterhaltung mit LA/Oszi anschauen? Vielleicht hast du 
das Timing nicht eingehalten?
Siehe auch http://www.computer-engineering.org/ps2protocol/.

von Paul W. (mosfetkiller)


Lesenswert?

Ich schau mir nebenbei alles mit dem Oszi an, das Timing sollte in 
Ordnung sein. Zumal ich ja alles VOR 0xF4 korrekt empfange und 
beantworte.
Ich habe mich dabei strikt an das auf 
http://www.marjorie.de/ps2/ps2_protocol.htm angegebene Timing und 
Protokoll gehalten.
Frequenz stimmt, die Flanken sehen schick aus und ich warte auch brav 
50µs, bevor ich nach Feststellung des RTS-Zustands mit der Ausgabe der 
Clockimpulse beginne.

Kann es sein, dass ein Keyboard noch selbstständig irgendwas an den PC 
senden muss, nachdem es "Enabled" wurde? Irgendeinen ersten Tastendruck 
oder sowas?

EDIT: Was noch seltsam ist: ca. 30ms nach Empfang des "Invalid Command" 
setzt der PC die Leitung einmal kurz in den Inhibit-Zustand, danach aber 
wieder auf Idle. KEIN RTS-Zustand. Komisch...

von anno (Gast)


Lesenswert?

Da das vom selben Autor ist link ichs hier nochmal: 
http://www.marjorie.de/ps2/ps2.pdf

Da steht zur Initilisierung und Kommunikation, dass das Ganze an sein 
Win98 angepasst ist. Evtl. liegt in die Richtung das Problem.

Zum Timing und den in diesem Guide verwendeten Codes kann ich sagen, 
dass die mit einer 0815 PS/2-Tastatur funktionieren, wenn man selbst 
nicht die Tastatur baut, sondern den Host. - Hab den Code leider grade 
nicht zu Hand.

Hast du mal die Kommunikation zwischer realer Tastatur und deinem PC 
abgegriffen?

von Paul W. (mosfetkiller)


Lesenswert?

LOL. Meine "richtige" Tastatur kämpft mit dem gleichen Problem, habe sie 
gerade mal ans Oszi gehängt:

while (1) {

  PC: 0xEF - Invalid Command
  TT: 0xFE - Resend

}

Die Maschine ist ein Thinkpad T400, den PS/2-Port stellt mir eine 
Dockingstation zur Verfügung.

Die Init-Sequenz der Tastatur konnte ich leider noch nicht abfangen; das 
ist ziemlich kniffelig, da alle Befehle recht weit auseinanderliegen, 
die PS2-Clock jedoch eine recht hohe Frequenz hat und der Speicher 
meines Oszis begrenzt ist.

Ich probiere jetzt mal, ebenfalls immer mit "Resend" zu antworten und in 
der Zwischenzeit Tastendrücke zu senden.

Ich werde der Sache mit dem "Invalid Commnd" weiter auf den Grund gehen 
und gleich mal einen etwas älteren Rechner herauskramen und mir die 
Übertragung erneut anschauen.

@anno: Danke, die PDF kenne ich schon. ;-) Die Kommandos sind ja genormt 
und ich habe dann halt korrekt darauf zu antworten. Wie genau die 
Init-Sequenz aussieht (in Puncto "Vollständigkeit" und Reihenfolge der 
Kommandos) ist ja Wurst, das kann jedes BIOS und OS machen, wie es will.

Gruß,
Paul

von Paul W. (mosfetkiller)


Lesenswert?

Okay! Das Senden der Tastendrücke habe ich nun endlich hinbekommen. 
Hatte zuerst einen falschen Makecode gesendet peinlich, aber es ging 
mir ja auch erstmal um den Fehler 0xEF.

Der Vollständigkeit halber habe ich wie versprochen die Tastatur auch 
mal an einen älteren PC gehängt; dort gibt es den Fehler nicht. Muss 
also eine Eigenart entweder des Laptops oder der Docking Station sein 
(keine Ahnung, wer sich da um PS/2 kümmert).

Vielen Dank trotzdem nochmal an alle! :)

von André H. (andrekr)


Lesenswert?

Dient das vielleicht zur Erkennung einer Maus? Der PS/2 geht bei den 
Thinkpads ja für beides.

von Paul W. (mosfetkiller)


Lesenswert?

Du hast recht, das könnte es sein. :-) Danke für den Tipp!

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.