PS/2 - Problem bei Initialisierung

OP #1828239
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
OP #1828257
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.
OP #1828303
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...
Gast #1828318
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?
OP #1828373
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
OP #1828433
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! :)

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren