Forum: Mikrocontroller und Digitale Elektronik Elendes PS2/Tastatur Protokoll


von HarryGr (Gast)


Lesenswert?

Tach,
Ich habe keine wirkliche Frage. Ich möchte mich nur mal öffentlich über 
dieses elende PS2-Protokoll aufregen!
Mein Problem schien erst mal ganz simpel. Ich habe ein LED-Laufschrift, 
die ich per µC ansteuere und wollte nur mal eine PS2-Tastatur 
anschließen. Wenn kein PC angeschlossen ist sollte der µC der Host sein. 
Wenn ein PC angeschlossen ist sollte mein µC in den "Stealth"-Mode 
übergehen und nur den Traffik abhören (Und natürlich alle anzeigbaren 
Tastenanschläge auf der LED-Laufschrift ausgeben).
Ich habe mir gedacht: schön ein interupt-getriggertes Schieberegister 
und nach 11 Takten hab ich meine Daten. NEIN! Wenn der PC sendet hat man 
plötzlich 2 Takte mehr. Und ein START-Bit sieht bei PS2 genauso aus wie 
jedes andere Bit. Deshalb lässt sich darauf nicht syncronisieren. (Da 
lob ich mir doch I2C z.B.) Worauf man syncen kann, dass ist die 
Anforderung vom PC zu schreiben. Da kommt nämlich ein laaaanger Takt auf 
der Clockleitung. Also muss eine Zeitmessung implementiert werden, die 
diese Anforderung erkennt und das Schieberegister neu vorbereitet. So 
reagiert man auch gleich auf den Busy-Zustand. Denn wenn man die Maus 
bewegt, ist der PC außer Stande die Tastatur zu verarbeiten und zieht 
deshalb die Clock-Leitung auf LOW um die Komunikation zu unterbinden. 
Das sind dann natürlich keine Daten für mich.
Mein PC nimmt jedes Frame sang und klanglos hin. Mein Laptop hingegen 
Blockiert nach jedem Frame die Leitung durch einen Clockimpuls, den man 
auch nicht ins Schieberegister schieben darf.
Und wenn man dann endlich die richtigen Daten rausgefriemelt hat, geht 
das Chaos erst richtig los. Völlig zusammenhangslose Tastencodes. Oder 8 
Byte die übertragen werden wenn man mal kurz die "Pause"-Taste drückt.
Sinnlos!!
Momentan verzweifle ich an nichtdokumentierten Byte die ich empfange:
Wenn ich die Rollentaste drücke wird das Byte gesendet und Windows setzt 
die Statusleds der Tastatur. Alles schön nach Protokol. Wenn ich aber 
auf der MS-Bildschirmtastatur die Rollentaste drücke, liegen Bytes auf 
der Leitung die es garnicht geben sollte. Aber die LED geht trozdem an.

Ich bin einfach nur gerade massiv angepisst, weil ich nicht weiß wo mein 
Fehler liegt und ob überhauptr ein Fehler vorliegt.

Also wenn ihr mich fragt, wird sich dieses Protokoll nicht durchsetzten 
lach

Ich geh jetzt mal auf Arbeit, da weiß ich wenigstens was passiert wenn 
ich einen Knopf drücke :)

CU Harry

von Knut B. (Firma: TravelRec.) (travelrec) Benutzerseite


Lesenswert?

www.marjorie.de

von Olaf (Gast)


Lesenswert?

Ach komm, was deine Vorfahren in einen wirklich strunzdoofen MCS48 mit 
64Byte Ram implementieren konnten wirst du doch wohl auch schaffen. :-)

Und nebenbei das Protokoll ist syncron. Da asyncron irgenwas detektieren 
zu wollen ist auch gefaehrlich weil das Timing der Tastaturen nicht 
immer gleich ist. Ich hatte frueher auch mal den 4Mhz Quarz meiner 
Tastatur durch einen mit 6Mhz ersetzt weil mir der Tastaturrepeat zu 
langsam war.

Was dich aber interessieren koennte, es gab in der Ct mal einen dicken 
Artikel ueber die Tastaturen und wie man sie ansteuert. War IMHO gedacht 
um sie an einen ST anzuschliessen.

Und das Tastaturen prinzipiell zwei verschiedene Modis (XT/AT) koennen 
und sich dazwischen automatisch umschalten weisst du sicher auch schon?

Olaf

von HarryGr (Gast)


Lesenswert?

Ja das anschließen und programieren einer Tastatur am µC war noch recht 
einfach (ich habe zumindest keine 64 Byte RAM verbraucht :D ). In meiner 
Anwendung ist die Tastatur aber am PC angeschlossen und der µC hört nur 
passiv zu. Und dabei kommt ein ganz schönes Clock-Impulse-Wirrwar 
zusammen den man erst mal entwirren muss, um die eigentlichen Nutzdaten 
heraus zu picken. Mit "synconisieren" meine ich: Das Erkennen 
irgendeines Ereignisses, welches wir verrät was sich auf der 
Data-Leitung befindet, befand oder befinden wird. Wenn zB beim I2C ein 
STOP-Bit erkannt wird - und das ist etwas unverwechselbares - dann weiß 
man: meine Daten liegen fertig im Register. Hier sieht das Stopbit aus 
wie jedes Andere und der Recher KANN gleich noch einen Clock-Impuls 
nachlegen. Das muss man erst mal verarbeiten. Im Nachhinein wäre es 
sicher cleverer gewesen die Tastatur und den PC getrennt an den µC 
anzuschließen. Aber zu spät...

@ Travel Rec.
Die Ausarbeitung von deinem Link ist bereits meine Hauptinfoquelle.
http://www.marjorie.de/ps2/ps2.pdf

Sind da wirklich ALLE Befehle aufgelistet, die eine Tastatur versteht?
Ist z.B. 0xFE die einzige "Fehler"-Antwort, oder gibt es noch 
Fehlernummern?
Ich habe gelegentlich 0xE9 empfangen. Ich würde prizipel von einem 
Fehler in meinem Code ausgehen. Aber die zyklichen 0xF4 ("Enable") und 
FA ("ACK") Befehle kommen richtig bei mir an und auch andere 
bidirektionale Gespräche empfängt der µC fehlerfrei. Und deshalb frage 
ich mich, ob 0xE9 nicht vieleicht doch irgendwo erlaubt ist.

Ich tüftel einfach noch ein wenig, das wird schon und wenn nicht, dann 
ignoriere ich es einfach :D
Trotzdem muss ich sagen: Diese Art der Komunikation ist eine der ... die 
ich je ausprobiert habe.

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.