Sendet eine USB-Tastatur nur Signale oder empfängt sie diese auch vom Computer?


83

Die Tastatur benötigt kein Signal vom Computer, nur Strom, oder? ODER müssen Signale sowohl empfangen als auch gesendet werden?

Edit: Ich habe nicht erwartet, dass diese Frage so viel Interesse weckt! Ich habe es gefragt, weil ich im Leerlauf davon geträumt habe, einen Doohickey zu bauen, der das Signal dupliziert, sodass die Tastatur denselben Brief an zwei Computer gleichzeitig senden kann. Da (nach dem, was ich in den Antworten ausmachen kann) der Computer die Tastatur wie jedes andere Gerät aktiv steuert, ist dies offensichtlich nicht möglich. Keine große Sache, da ich praktisch sowieso nicht die Fähigkeiten hatte, es zu bauen!


40
Es kann zB den Status von Sperrschlüsseln erhalten. Viele Tastaturen haben LEDs, die den Status der Sperrtasten anzeigen. Versuchen Sie, die Feststelltaste einzuschalten, und ersetzen Sie dann Ihre Tastatur. Wahrscheinlich ist der Status immer noch gesperrt. Diese Informationen müssen vom PC stammen.
Máté Juhász,

8
Sogar PS / 2-Tastaturen empfangen Signale vom PC. Wie können die LEDs an- und ausgeschaltet werden?
Phuclv

8
@ Devsman Sie können das nicht tun, sonst ist der Sperrstatus nicht synchron, da er von der Software geändert werden kann. Wenn Sie beispielsweise 2 Tastaturen anschließen und auf diese Taste drücken, schaltet die LED auf der anderen Seite um. Dasselbe kann mit der Bildschirmtastatur erreicht werden
phuclv


7
Ein USB-Gerät muss bidirektionale Daten haben, einfach aufgrund der Anforderungen des anfänglichen Handshakes, um die jeweilige Geräteklasse zu aktivieren.
Steve

Antworten:


101

Aus der Spezifikation " Geräteklassendefinition für Human Interface Devices (HID)", Version 11.1 :

Die Synchronisation zwischen den LED-Zuständen und den Ereignissen CAPS LOCK, NUM LOCK, SCROLL LOCK, COMPOSE und KANA wird vom Host und NICHT von der Tastatur durchgeführt. Bei Verwendung der Tastaturbeschreibung in Anhang B werden LED-Zustände festgelegt, indem ein 5-Bit-Absolutbericht über eine Set_Report-Anforderung (Ausgabe) an die Tastatur gesendet wird.

Um die Tastatur-LEDs zu ändern, akzeptiert die Tastatur einen entsprechenden Befehl. Es handelt sich also nicht um ein "Nur-Eingabe" -Gerät (dh es gibt nur Daten an den Host aus).

Abgesehen davon gibt es bei allen USB-Geräten einen Aushandlungs- und Aufzählungsprozess, der ein Hin- und Her-Gespräch zwischen Host und Gerät erfordert. Sie können kein "schreibgeschütztes" USB-Gerät verwenden.

Noch vor dem USB-Anschluss akzeptierte der PC-Tastaturcontroller Befehle, da er neben dem Lesen der Tastatur ( Referenz ) noch einige andere Aufgaben ausführte :

Wenn eine Tastatur eine separate periphere Systemeinheit ist (wie in den meisten modernen Desktop-Computern), ist der Tastaturcontroller nicht direkt mit den Tasten verbunden, sondern empfängt Scancodes von einem in die Tastatur eingebetteten Mikrocontroller über eine serielle Schnittstelle. In diesem Fall steuert der Controller normalerweise auch die LEDs der Tastatur, indem Daten über das Kabel an die Tastatur zurückgesendet werden.

Der IBM PC AT verwendete einen Intel 8042-Chip als Schnittstelle zur Tastatur. Dieser Computer kontrollierte auch den Zugriff auf die A20-Leitung, um eine Problemumgehung für einen Chipfehler im Intel 80286 zu implementieren. 1 Der Tastaturcontroller wurde auch verwendet, um ein Zurücksetzen der Software-CPU auszulösen, damit die CPU vom geschützten in den realen Modus wechseln konnte Modus 1, weil der 286 es der CPU nicht erlaubt hat, vom geschützten Modus in den realen Modus zu wechseln, es sei denn, die CPU wird zurückgesetzt. Dies war ein Problem, da das BIOS und die Betriebssystemdienste nur von Programmen im Real-Modus aufgerufen werden konnten.

Diese Verhaltensweisen wurden von zahlreichen Softwareprogrammen verwendet, die dieses Verhalten erwarten. Daher haben Tastaturcontroller die A20-Leitung weiterhin gesteuert und Software-CPU-Resets durchgeführt, auch wenn durch die Umschaltbarkeit des Intel 80386 kein Reset über den Tastaturcontroller erforderlich war Real-Modus aus dem geschützten Modus ohne CPU-Reset.


15
Wenn es sich um ein Signal handelt, auch wenn Aufzählung und LEDs nicht berücksichtigt werden, basiert der USB-Eingang auf Abfragen. Ein Gerät kann keine Daten proaktiv an den Host senden, es sei denn, der Host fragt danach. Ein Eingabegerät wird nur sehr häufig gefragt, ob es etwas Neues zu melden hat.
Matti Virkkunen

Du meinst "nur Ausgabe" oder?
Daniel

Ich bin nicht sicher, wie ich sagen soll, dass eine Tastatur ein "Eingabegerät" ist und "nur Eingabe" bedeutet, dass sie nur Daten an den Host sendet, aber niemals empfängt. Kommt darauf an, ob es sich um eine Tastatur oder einen Host handelt.
LawrenceC

1
@Daniel Die meisten Leute werden die Tastatur nicht als "Ausgabegerät" bezeichnen. Peripheriegeräte sind extern angeschlossen, sodass wir sie aus der Sicht des PCs als Ein- oder Ausgang bezeichnen. Es ist der PC, den wir verwenden möchten, nicht Tastatur, Maus oder andere Peripheriegeräte
phuclv

@ LưuVĩnhPhúc Ich weiß, aber er schreibt, So it is not an "input-only" device (meaning it only outputs data to the host)was mich verwirrt
Daniel

56

Jedes USB-Gerät, unabhängig von seiner Klasse, benötigt eine bidirektionale Kommunikation, um zu funktionieren . Jedes USB-Gerät (oder jede Funktion in Bezug auf die USB-Spezifikation) wird als Satz von Endpunkten dargestellt, die als Puffer betrachtet werden können, die Daten annehmen oder empfangen. Selbst Endpunkte, die nur Daten senden können, warten auf ein spezielles Paket namens Token, bevor sie antworten können: Bildbeschreibung hier eingeben

(Bild von hier , graue Kästchen stehen für USB-Host, weiße Kästchen für USB-Funktion)

Sogar sogenannte Interrupt-Übertragungen werden auf diese Weise durchgeführt, wobei der USB-Host angeschlossene Geräte mithilfe von Token-Paketen abfragt. Der Unterschied zwischen regulären (Bulk-) Übertragungen und Interrupt-Übertragungen besteht darin, dass die Abfragezeit gering ist und im letzteren Fall garantiert wird. Trotzdem werden alle Übertragungen vom Host initiiert.


18

Die Frage spiegelt ein weit verbreitetes Missverständnis wider, dass USB-Geräte selbstständig etwas an den PC senden, wenn eine Taste gedrückt (oder die Maus bewegt) wird. Deshalb ist die Aufmerksamkeit so hoch. Tatsächlich senden USB-Geräte erst dann etwas, wenn sie eine entsprechende Anfrage vom Host erhalten. Eine Ausnahme ist ein Aufweckvorgang von einem angehaltenen Gerät.

Während der USB auf der Oberfläche einfach aussieht, ist seine Funktionsweise in der Tat ziemlich kompliziert. Jedes neue USB-Gerät muss zuerst "aufgezählt" werden, bevor es funktioniert. Die Reihenfolge ist wie folgt:

  1. Nach dem Einstecken einer Tastatur empfängt der Host-Port das Signal "Connect Status" (bei LS-Signalen wird D- von der Tastatur auf HIGH gezogen).

  2. Dann setzt der Host den Port in den "Port-Reset" -Modus und der USB-PHY (Physical-Layer-Treiber) sendet "USB_RESET" über die D + / D- Leitungen (beide Leitungen werden für eine vorgeschriebene Zeit auf LOW geschaltet). Einige Informationen zum "Port-Reset" für FS / HS-Geräte finden Sie hier .

  3. Dann beginnt der Host, Frame-Boundary-Pakete im 1-ms-Intervall auszugeben. Bei Low-Speed ​​(LS) -Geräten als gewöhnliche kabelgebundene Tastatur handelt es sich lediglich um "Keep-Alive" -Pulse, während bei FS die speziellen SOF-Start-of-Frame-Pakete generiert werden. Diese Pakete halten das Gerät im aktiven Modus und verhindern, dass SUSPEND mit geringem Stromverbrauch ausgeführt wird.

  4. Dann beginnt die "Aufzählung". Der Host sendet eine Anforderung zum Abrufen des Gerätedeskriptors. Die Anfrage wird an "default pipe" mit der Geräteadresse "0" gesendet. [Derzeit gibt es nur ein solches Gerät - die Tastatur - da alle anderen Geräte am Bus bereits ihre individuell zugewiesenen USB-Adressen haben sollten]

  5. Die Tastatur gibt die angeforderten Informationen zurück, sodass der Host bestimmen kann, welche Art von Treiber geladen werden soll.

  6. Der Host sendet eine Transaktion, bei der das Gerät seine Standardadresse in eine neu zugewiesene Adresse ändern muss.

  7. Dann startet der Host eine neue Kommunikationsrunde mit dem Gerät, jetzt an der neu zugewiesenen Adresse. Alle anderen Geräte ignorieren diese Kommunikation, da sie nicht an sie gerichtet ist.

  8. Der Host liest möglicherweise viel mehr Informationen aus mehreren anderen Deskriptoren und wählt schließlich "Gerätekonfiguration" aus. Damit ist der Aufzählungsprozess abgeschlossen.

  9. Abhängig von der USB-Geräteklasse beginnt der Host mit der Kommunikation mit dem Gerät. Im Tastaturfall sendet der Host periodisch im Wesentlichen eine "IN" -Anforderung und fragt das Gerät im Wesentlichen ab (selbst wenn diese periodische Pipe als "Interrupt" -Pipe bezeichnet wird). Wenn auf der Tastatur eine Taste gedrückt / gedrückt wurde, gibt die Tastatur diese Informationen zurück. Andernfalls werden keine Daten an den Gerätetreiber zurückgegeben.

Kurz gesagt, jedes USB-Gerät muss eine eindeutige Adresse vom USB-Host erhalten, und zwei USB-Hosts haben Schwierigkeiten, mit einem Gerät zu kommunizieren - Buskollision, Adressenkonflikt, zufälliges Abfangen von Tastendruckdaten usw. Das USB-Protokoll macht es unmöglich, a gemeinsam zu nutzen Gerät zwischen zwei USB-Hosts.


If keyboard has any key pressed/depressed, the keyboard will return this information- Wie würden dann Geisterbilder entstehen? Ich hatte den Eindruck, dass Tastaturen Tastendruck- und Tastendruckereignisse senden müssen, was erklären würde, warum bei einem verpassten Tastendruck-Ereignis Geister-Tasten vorhanden sind ...
Shadow

2
@shadow, ich bin mir nicht sicher, worüber du fragst. Die Abfragerate für die Tastatur beträgt, wenn ich mich recht entsinne, 8 ms. Sie drücken asynchron die Tasten, sodass einige Ereignisse (make oder break) in verschiedene Abfragerahmen gelangen können. Einige Ereignisse treten genau dann auf, wenn die IN-Anforderung ausgeführt wird. Ein guter Tastaturcontroller sollte alle Ereignisübergänge ordnungsgemäß handhaben und keine fehlenden Ereignisse aufweisen. Ich habe keine Ahnung, warum Tastaturen "Geister-Tasten" erzeugen, aber es hat nichts mit dem USB-Protokoll zu tun.
Ale..chenski

4
Geisterschlüssel hängen mit der Art und Weise zusammen, wie die physischen Schlüssel verkabelt sind. Günstigere Tastatur-Controller verfügen nicht über einen einzelnen Pin für jede Taste, sondern haben ein Rastersystem für die Adressierung mit z. B. Zeilen und Spalten, in denen der Controller die Spaltenleitung aktiviert und auf der Zeilenleitung nach dem Signal sucht. In diesem Szenario ist das gleichzeitige Drücken von zwei Tasten, z. B. E und S, möglicherweise nicht von dem Drücken von W und D zu unterscheiden, außer durch das Timing.
Ben

2

Wie andere Antworten bereits erklärt haben, erfordert USB eine bidirektionale Kommunikation als Teil seiner Funktionsweise. PS / 2 ermöglicht zwar die bidirektionale Kommunikation, benötigt sie jedoch nicht, um Schlüssel an den Computer zu senden, sondern zum Einstellen der Tastatur-LEDs.

Theoretisch könnten Sie ein Gerät bauen, um das PS / 2-Signal zu duplizieren und an einen zweiten Computer zu senden, und alle Befehle von den Computern verwerfen, sodass Sie Ihre Tastendrücke an mehrere Computer senden können, die Tastatur-LEDs jedoch nicht Reagieren Sie auf die Zustände Num, Caps Lock und Scroll Lock (oder auf jede andere Änderung des LED-Zustands, z. B. werden unter Linux die Tastatur-LEDs manchmal für alternative Zwecke verwendet).

Ich bin mir nicht sicher, wie komplex ein solches Projekt sein würde. Es ist schon eine Weile her, dass ich mit PS / 2 gearbeitet habe, daher weiß ich nicht, ob Sie einfach ein paar Drähte / Anschlüsse überbrücken können oder ob Sie ein aktives Gerät (z. B. einen Mikrocontroller) benötigen, um Befehle in eine Richtung weiterzuleiten, aber sie zu verwerfen in dem anderen. Wenn Sie einen Mikrocontroller hätten, könnten Sie das Gerät sogar so einstellen, dass es die Tastatur-LED-Befehle interpretieren und zur Anzeige "kombinieren" kann (z. B. langes Blinken der LED, wenn sie auf Computer eins leuchtet, aber auf Computer zwei ausgeschaltet ist, kurzes Blinken) die LED, wenn sie an Computer zwei leuchtet, aber an Computer eins aus ist, die LED, wenn sie an beiden Computern leuchtet, und die LED, wenn sie an beiden Computern aus ist, aus. Das wäre allerdings weiter fortgeschritten.

Wenn Sie in der Lage sein möchten, einen Computer von einem anderen Computer aus oder zwei Computer von demselben Schreibtisch aus oder von einem anderen Computer aus zu steuern, sollten Sie Folgendes prüfen:

  • VNC (ermöglicht die Steuerung eines Computers von einem anderen über ein Netzwerk)
  • RDP (ermöglicht auch die Steuerung eines Computers von einem anderen über ein Netzwerk, integriert in Microsoft Windows, erfordert jedoch die Professional-Version)
  • KVM (Hardware, mit der Sie einen Satz von Peripheriegeräten zwischen zwei Computern wechseln können)

1

Vor USB-Tastaturen verwendeten die PS / 2-Tastaturen ein viel einfacheres Protokoll, bei dem es möglich ist, eine Tastatur an zwei Geräte anzuschließen und funktionsfähig zu machen. Eine einfache Y-Verbindung genügt.

Ältere USB-Tastaturen verfügen weiterhin über einen integrierten PS / 2-Emulationsmodus. Wenn Sie einen dieser lila Adapter verwenden, können Sie ihn an einen PS / 2-Anschluss auf der Rückseite eines Computers anschließen. Wenn Sie also ein USB-zu-PS / 2-Breakout-Kabel an 2 Computern verwenden, funktioniert möglicherweise ein lila Adapter zurück an Ihre USB-Tastatur.

Neuere USB-Tastaturen haben den alten PS / 2-Modus deaktiviert und funktionieren in diesem Fall nicht.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.