Un clavier USB envoie-t-il uniquement des signaux ou les reçoit-il également de l'ordinateur?


83

Le clavier n'a besoin d'aucun signal de l'ordinateur, juste de l'alimentation, n'est-ce pas? OU a-t-il besoin de recevoir des signaux et de les envoyer?

Edit: Je ne m'attendais pas à ce que cette question suscite autant d'intérêt! Je l’ai demandé parce que je rêvais de construire un doohickey qui dupliquait le signal afin que le clavier puisse envoyer la même lettre à deux ordinateurs à la fois. Puisque (d'après ce que je peux comprendre dans les réponses) l'ordinateur contrôle activement le clavier comme tout autre appareil, ce n'est clairement pas possible. Ce n’est pas grave car je n’avais pratiquement pas les compétences nécessaires pour le construire!


40
par exemple, il peut recevoir le statut des touches de verrouillage. De nombreux claviers ont des voyants indiquant l’état des touches de verrouillage. Essayez d'activer le verrouillage des majuscules, puis remplacez votre clavier, l'état sera toujours verrouillé, cette information doit provenir du PC.
Máté Juhász

8
même les claviers PS / 2 reçoivent les signaux du PC, sinon comment peut-il allumer / éteindre les voyants?
phuclv

8
@ Devsman vous ne pouvez pas faire cela, sinon l'état de verrouillage sera désynchronisé car il peut être modifié par le logiciel. Par exemple, si vous branchez 2 claviers et appuyez sur numlock, la DEL de l’autre bascule. La même chose peut être réalisée avec le clavier à l'écran
phuclv


7
Un périphérique USB doit disposer de données bidirectionnelles, tout simplement en raison des exigences de l'établissement de liaison initial pour activer la classe de périphérique particulière.
Steve

Réponses:


101

De la spécification " Définition de classe d'appareil pour dispositifs d'interface utilisateur (HID)" version 11.1 :

La synchronisation entre les états des voyants et les événements CAPS LOCK, NUM LOCK, SCROLL LOCK, COMPOSE et KANA est conservée par l'hôte et NON par le clavier. Si vous utilisez le descripteur de clavier de l'annexe B, les états des voyants sont définis en envoyant un rapport absolu sur 5 bits au clavier via une requête Set_Report (Output).

Pour changer les voyants du clavier, le clavier accepte une commande. Il ne s’agit donc pas d’un périphérique «uniquement en entrée» (c’est-à-dire qu’il ne transmet que des données à l’hôte).

Cela étant dit, il existe un processus de négociation et d’énumération avec tous les périphériques USB qui nécessitent une conversation aller-retour entre l’hôte et le périphérique. Vous ne pouvez pas avoir un périphérique USB "en lecture seule".

Même avant l'USB, le contrôleur de clavier du PC acceptait les commandes car il faisait autre chose que lire le clavier ( référence ):

Si un clavier est une unité de système distincte (comme dans la plupart des ordinateurs de bureau modernes), le contrôleur de clavier n'est pas directement connecté aux touches, mais reçoit les scancodes d'un microcontrôleur intégré au clavier via une sorte d'interface série. Dans ce cas, le contrôleur contrôle également généralement les voyants du clavier en renvoyant les données au clavier via le fil.

L'IBM PC AT utilisait une puce Intel 8042 pour se connecter au clavier. Cet ordinateur contrôlait également l'accès à la ligne A20 afin de mettre en œuvre une solution de contournement pour un bogue de puce dans l'Intel 80286. 1 Le contrôleur de clavier servait également à lancer une réinitialisation logicielle du processeur afin de permettre au processeur de passer du mode protégé au mode réel. mode 1 car le 286 ne permettait pas à la CPU de passer du mode protégé au mode réel à moins que la CPU ne soit réinitialisée. Cela posait problème car le BIOS et les services du système d’exploitation ne pouvaient être appelés que par des programmes en mode réel.

Ces comportements ont été utilisés par de nombreux logiciels qui s’attendent à ce comportement et, par conséquent, les contrôleurs de clavier ont continué à contrôler la ligne A20 et à effectuer des réinitialisations du processeur du logiciel, même lorsque la nécessité de réinitialisation via le contrôleur de clavier était évitée du fait de la capacité du processeur Intel 80386 à basculer vers. mode réel du mode protégé sans réinitialisation de la CPU.


15
Si nous parlons de choses au niveau des "signaux", même si nous oublions l’énumération et les voyants, l’entrée USB est basée sur la scrutation. Un périphérique ne peut pas envoyer de données de manière proactive à l'hôte à moins que l'hôte ne le demande. Un périphérique d’entrée est fréquemment interrogé pour demander s’il a quelque chose de nouveau à signaler.
Matti Virkkunen

Vous voulez dire "sortie seulement", n'est-ce pas?
Daniel

Pas sûr de savoir comment tbh, un clavier est un périphérique "d'entrée", et "entrée seulement" voudrait dire qu'il n'envoie que des données à l'hôte, mais qu'il ne les reçoit jamais. Cela dépend si le point de vue est clavier ou hôte.
LawrenceC

1
@ Daniel, la plupart des gens n'appelleront pas le clavier un périphérique de "sortie". Les périphériques sont connectés de manière externe, de sorte que nous nous en tenons du point de vue du PC pour les appeler entrée ou sortie. C'est le PC que nous voulons utiliser, pas un clavier, une souris ou d'autres périphériques
phuclv

@ LưuVĩnhPhúc je sais, mais il écrit So it is not an "input-only" device (meaning it only outputs data to the host)qui me confond
Daniel

56

Tout périphérique USB, quelle que soit sa classe, nécessite une communication bidirectionnelle pour fonctionner . Chaque périphérique USB (ou fonction en termes de spécifications USB) est représenté comme un ensemble de points de terminaison pouvant être considérés comme des tampons qui acceptent ou reçoivent des données. Toutefois, même les points d'extrémité qui peuvent uniquement envoyer des données attendent un paquet spécial appelé jeton avant de pouvoir répondre: entrez la description de l'image ici

(image à partir d' ici , les cases grises représentent l'hôte USB, les cases blanches représentent la fonction USB)

Même ce que l’on appelle les transferts d’interruptions se fait de cette manière, les hôtes USB interrogeant les périphériques connectés à l’aide de paquets de jetons. Ce qui diffère entre les transferts réguliers (en masse) et les transferts d'interruption, c'est que le temps d'interrogation est court et garanti dans ce dernier cas. Cependant, tous les transferts sont initiés par l'hôte.


18

La question reflète une idée fausse commune selon laquelle les périphériques USB "envoient" quelque chose au PC quand ils appuient sur une touche (ou que la souris se déplace), voilà pourquoi une si grande attention est accordée. En fait, les périphériques USB n'envoient rien tant qu'ils ne reçoivent pas la demande correspondante de l'hôte. Une exception est un processus de réveil à partir d'un périphérique suspendu.

Alors que la clé USB semble simple en surface, son fonctionnement est plutôt compliqué. Tout nouveau périphérique USB doit être "énuméré" avant de commencer à fonctionner. La séquence est la suivante:

  1. Une fois le clavier branché, le port hôte reçoit le signal "Connect Status" (pour les signaux LS, D- est tiré sur HIGH par le clavier).

  2. Ensuite, l'hôte définit le port en mode "réinitialisation de port" et le pilote USB PHY (pilote de couche physique) envoie "USB_RESET" aux lignes D + / D- (les deux lignes sont réduites à l'état BAS pendant un laps de temps prescrit). Certaines informations sur la "réinitialisation du port" pour les périphériques FS / HS sont disponibles ici .

  3. Ensuite, l’hôte commence à émettre des paquets de limites de trame toutes les 1 ms. Pour les périphériques à faible vitesse (LS) en tant que clavier câblé ordinaire, il ne s'agit que d'impulsions "de maintien en vie", alors que pour FS, les paquets spéciaux SOF - sont générés. Ces paquets maintiennent l'appareil en mode actif et l'empêchent de passer en mode SUSPEND basse consommation.

  4. Ensuite, l'énumération commence. L'hôte envoie une demande pour obtenir un descripteur de périphérique. La demande est envoyée à "canal par défaut" avec l'adresse de périphérique "0". [Il n'y a qu'un seul périphérique de ce type à l'heure actuelle - le clavier - puisque tous les autres périphériques du bus devraient déjà avoir leurs adresses USB attribuées individuellement.]

  5. Le clavier renvoie les informations demandées afin que l'hôte puisse déterminer quel type de pilote doit être chargé.

  6. L'hôte envoie une transaction demandant au périphérique de changer son adresse par défaut en nouvelle adresse attribuée.

  7. Ensuite, l'hôte commence une nouvelle série de communications avec le périphérique, maintenant à la nouvelle adresse attribuée. Tous les autres appareils ignorent cette communication car elle ne leur est pas destinée.

  8. L'hôte peut lire beaucoup plus d'informations à partir de plusieurs autres descripteurs et éventuellement sélectionner "configuration du périphérique". Ceci termine le processus de dénombrement.

  9. En fonction de la classe de périphérique USB, l'hôte commence à communiquer avec le périphérique. Dans le cas d'un clavier, l'hôte envoie essentiellement une requête "IN" périodiquement, en interrogeant essentiellement le périphérique (même si ce canal périodique est appelé canal "d'interruption"). Si l'une des touches du clavier est enfoncée / enfoncée, le clavier renvoie ces informations. Sinon, aucune donnée ne sera renvoyée au pilote de périphérique.

En bref, chaque périphérique USB doit recevoir une adresse unique de l'hôte USB et deux hôtes USB auront des difficultés à communiquer avec un périphérique: collision de bus, discordance d'adresse, interception aléatoire de données enfoncées, etc. Le protocole USB rend impossible le partage d'une appareil entre deux hôtes USB.


If keyboard has any key pressed/depressed, the keyboard will return this information- comment les clés fantômes se produiraient alors? J'avais l'impression que les claviers doivent envoyer des événements de touches et de touches en bas, ce qui expliquerait pourquoi, si un événement de touche en était oublié, vous auriez des clés fantômes ...
Shadow

2
@ Shadow, je ne sais pas de quoi tu parles. La fréquence d’interrogation du clavier, si je me souviens bien, est de 8 ms. Vous appuyez sur les touches de manière asynchrone, de sorte que certains événements (make ou break) peuvent aller dans différentes trames de scrutation, certains événements se produisant exactement lorsque la demande IN est en cours. Un bon contrôleur de clavier doit gérer correctement tous les passages d'événements et ne pas avoir d'événements manquants. Je n'ai aucune idée pourquoi les claviers génèrent des "clés fantômes", mais cela n'a rien à voir avec le protocole USB.
Ale..chenski

4
Les clés fantômes sont liées à la manière dont les clés physiques sont câblées. Les contrôleurs de clavier moins chers n'ont pas une seule broche pour chaque touche, mais un système d'adressage avec une grille, avec par exemple des lignes et des colonnes, le contrôleur vérifiant le fil de colonne et recherchant le signal sur le fil de ligne. Dans ce cas, il est parfois impossible d'appuyer simultanément sur les touches E et S, par exemple, en appuyant simultanément sur les touches W et D, à l'exception du chronométrage.
Ben

2

Comme d'autres réponses l'ont expliqué, l'USB nécessite une communication bidirectionnelle dans le cadre de son fonctionnement. Le protocole PS / 2, tout en permettant une communication bidirectionnelle, ne l’exige pas pour pouvoir envoyer des touches à l’ordinateur, mais nécessite le réglage des voyants du clavier.

Théoriquement, vous pouvez créer un périphérique pour dupliquer le signal PS / 2, l'envoyer à un deuxième ordinateur et ignorer les commandes des ordinateurs. Vous pourrez ainsi appuyer sur les touches de votre clavier pour les envoyer sur plusieurs ordinateurs. répondez aux états Verrouillage numérique, Verrouillage majuscule et Verrouillage défilement (ou tout autre changement d'état des voyants, par exemple sous Linux, les voyants du clavier sont parfois utilisés à des fins alternatives).

Je ne suis pas sûr de la complexité d'un tel projet. Cela fait longtemps que je ne travaille pas avec PS / 2, donc je ne sais pas si vous pouvez simplement relier deux fils / connecteurs ou si vous avez besoin d’un périphérique actif (un microcontrôleur, par exemple) pour transmettre des commandes dans un sens mais les ignorer. dans l'autre. Si vous avez un microcontrôleur, vous pouvez même configurer le périphérique de manière à ce qu'il puisse interpréter les commandes du clavier et les "combiner" pour les afficher (par exemple, le témoin clignote longtemps s'il est allumé sur l'ordinateur 1 mais éteint sur l'ordinateur 2, clignotement court le voyant s’il est allumé sur l’ordinateur 2, mais éteint, le voyant reste allumé s’il est allumé sur les deux ordinateurs et éteint s’il est éteint sur les deux ordinateurs). Ce serait plus avancé cependant.

En outre, si votre objectif est de pouvoir contrôler un ordinateur à partir d'un autre ordinateur, ou de deux ordinateurs à partir du même bureau, ou autre, vous voudrez peut-être examiner:

  • VNC (permet de contrôler un ordinateur depuis un autre via un réseau)
  • RDP (permet également de contrôler un ordinateur depuis un autre via un réseau, intégré à Microsoft Windows mais requiert la version Professional)
  • KVM (une pièce de matériel qui vous permet de basculer un ensemble de périphériques entre deux ordinateurs)

1

Avant les claviers USB, les claviers PS / 2 utilisaient un protocole beaucoup plus simple dans lequel il est possible d’avoir un clavier connecté à 2 périphériques et de le faire fonctionner. Une simple connexion en Y suffit.

Les anciens claviers USB ont toujours le mode d'émulation PS / 2 intégré; L'utilisation de l'un de ces adaptateurs de connecteur violet vous permet de le brancher sur un port PS / 2 situé à l'arrière d'un ordinateur. Donc, en utilisant un câble épanoui USB vers PS / 2 sur 2 ordinateurs, un adaptateur violet pour votre clavier USB pourrait bien fonctionner.

Les claviers USB les plus récents ont abandonné le mode PS / 2 hérité; ils ne fonctionneront donc pas dans ce cas.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.