www.mikrocontroller.net

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


Autor: Paul Wilhelm (mosfetkiller)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: volltroll.de (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: Paul Wilhelm (mosfetkiller)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: André H. (andrekr)
Datum:

Bewertung
0 lesenswert
nicht 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/.

Autor: Paul Wilhelm (mosfetkiller)
Datum:

Bewertung
0 lesenswert
nicht 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...

Autor: anno (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: Paul Wilhelm (mosfetkiller)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Paul Wilhelm (mosfetkiller)
Datum:

Bewertung
0 lesenswert
nicht 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! :)

Autor: André H. (andrekr)
Datum:

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

Autor: Paul Wilhelm (mosfetkiller)
Datum:

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

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.