web-dev-qa-db-fra.com

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

Le clavier n'a besoin d'aucun signal de l'ordinateur, juste de l'alimentation, n'est-ce pas? OR 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!

82
Ne Mo

De la spécification " Définition de la classe de périphérique pour les périphériques 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 par envoi 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 associé 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.

Le PC IBM AT a utilisé une puce Intel 8042 comme interface avec le 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 le processeur Intel 80286. 1 Le contrôleur de clavier a également été utilisé pour lancer une réinitialisation de la CPU du logiciel afin de permettre à la CPU de passer de mode protégé en mode réel 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.

100
LawrenceC

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é par un ensemble de points de terminaison qui peuvent être considérés comme des mémoires tampons acceptant ou recevant 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:  enter image description here

(image de 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 font de cette manière, avec l'hôte USB interrogeant les périphériques connectés à l'aide de paquets de jetons. Ce qui diffère entre les transferts normaux (en masse) et les transferts d'interruption, c'est que le temps d'interrogation est réduit et garanti dans ce dernier cas. Cependant, tous les transferts sont initiés par l'hôte.

55
Dmitry Grigoryev

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.

Bien que la clé USB ait l'air 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 peuvent être trouvé 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 - début de trame 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 un nouveau cycle de communication 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. Selon 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 par pression de touche, etc. Le protocole USB rend impossible le partage d'une appareil entre deux hôtes USB.

17
Ale..chenski

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éfilant (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 deux, 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 professionnelle)
  • KVM (une pièce de matériel qui vous permet de basculer un ensemble de périphériques entre deux ordinateurs)
2
Micheal Johnson

Avant les claviers USB, les claviers PS/2 utilisaient un protocole beaucoup plus simple dans lequel il est possible de connecter un clavier à deux 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.

1
Tomuo