Question 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? OU faut-il recevoir des signaux et les envoyer?

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


82
2018-03-06 15:28


origine


par exemple. il peut recevoir le statut des clés de verrouillage. De nombreux claviers ont des leds indiquant l'état des clés de verrouillage. Essayez d'activer le verrouillage des majuscules, puis remplacez votre clavier, il est probable que l'état sera toujours verrouillé, ces informations doivent provenir du PC. - Máté Juhász
même les claviers PS / 2 reçoivent des signaux du PC, sinon comment peut-il allumer / éteindre les LED? - phuclv
@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 deux claviers et que vous appuyez sur la touche numlock à cet effet, la DEL de l'autre bascule. La même chose peut être obtenue avec un clavier à l'écran - phuclv
Basculer les LED codegolf.stackexchange.com/questions/110974/blink-the-caps-lock - Dohn Joe
Un périphérique USB doit avoir des données bidirectionnelles, simplement en raison des exigences de l'établissement de liaison initial pour activer la classe de périphérique particulière. - Steve


Réponses:


Du "Définition de classe d'appareil pour l'interface humaine Devices (HID) "version 11.1" spécification:

Synchronisation entre les états des voyants et le verrouillage des majuscules, verrouillage numérique, défilement   Les événements LOCK, COMPOSE et KANA sont gérés par l’hôte et NON par le   clavier. Si vous utilisez le descripteur de clavier de l’annexe B, le voyant indique   sont réglés par envoi un rapport absolu de 5 bits au clavier via un   Demande Set_Report (Output).

Pour changer les voyants du clavier, le clavier accepte une commande pour le faire. Ce n'est donc pas un périphérique "en entrée seulement" (ce qui signifie qu'il ne sort que des données vers 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 entre l'hôte et le périphérique. Vous ne pouvez pas avoir un périphérique USB "en lecture seule".

Avant même l’USB, le contrôleur de clavier de l’ordinateur acceptait les commandes car il ne faisait pas que lire le clavier (référence):

Si un clavier est un périphérique système distinct (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 codes d'un microcontrôleur intégré au clavier via une interface série. Dans ce cas, le contrôleur contrôle généralement les voyants du clavier en renvoyant les données au clavier via le câble.

L'IBM PC AT utilisait une puce Intel 8042 pour s'interfacer 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 bug de puce dans l’Intel 80286.1 Le contrôleur de clavier a également été utilisé pour lancer une réinitialisation du processeur logiciel afin de permettre au processeur de passer du mode protégé au mode réel1 car le 286 ne permettait pas au CPU de passer du mode protégé au mode réel à moins que le CPU ne soit réinitialisé. C'était un problème car le BIOS et les services du système d'exploitation pouvaient uniquement être appelés par les programmes en mode réel.

Ces comportements ont été utilisés par de nombreux logiciels qui attendent ce comportement, et les contrôleurs de clavier ont donc continué à contrôler la ligne A20 et à effectuer des réinitialisations logicielles, même si la capacité du processeur Intel 80386 à passer à mode réel du mode protégé sans réinitialisation du processeur.


99
2018-03-06 15:34



Si nous parlons de choses au niveau des "signaux", même si nous oublions l'énumération et les LED, l'entrée USB est basée sur l'interrogation. Un périphérique ne peut pas envoyer de données de manière proactive à l'hôte, sauf si l'hôte le demande. Un périphérique d'entrée est simplement interrogé très fréquemment pour demander s'il a quelque chose de nouveau à signaler. - Matti Virkkunen
Vous voulez dire "sortie uniquement" non? - Daniel
Pas sûr de savoir comment tbh, un clavier est un périphérique "d'entrée", et "entrée uniquement" signifierait qu'il envoie uniquement des données à l'hôte, mais ne reçoit jamais. Dépend de si le point de vue est un clavier ou un hôte. - LawrenceC
@Daniel la plupart des gens n'appellent pas le clavier un périphérique "de sortie". Les périphériques sont connectés en externe, nous nous positionnons donc du point de vue du PC pour les appeler en entrée ou en sortie. C'est le PC que nous voulons utiliser, pas le clavier, la 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) ce qui me confond - Daniel


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 les points finaux qui peut être considéré comme des tampons qui acceptent ou reçoivent des données. Cependant, même les points de terminaison qui ne peuvent envoyer que des données attendent un paquet spécial appelé jeton avant qu'ils puissent 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 les soi-disant transferts d'interruptions sont effectués 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 bloc) et les transferts d’interruption, c’est que le temps d’interrogation est faible et garanti dans le dernier cas. Cependant, tous les transferts sont initiés par l'hôte.


55
2018-03-06 17:13





La question reflète une idée fausse commune selon laquelle les périphériques USB "envoient" quelque chose eux-mêmes à un PC quand une touche est enfoncée (ou la souris bouge), c'est pourquoi une telle attention. En fait, les périphériques USB n’envoient rien tant qu’ils n’ont pas reçu la demande correspondante de l’hôte. Une exception est un processus de réveil à partir d’un appareil suspendu.

Bien que l'USB soit simple en surface, son fonctionnement est en fait assez 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 met le port en mode "réinitialisation de port", et la clé USB PHY (pilote de couche physique) envoie "USB_RESET" vers le bas sur les lignes D + / D-. Certaines informations sur la "réinitialisation de port" pour les appareils FS / HS peuvent être trouvé ici.

  3. Ensuite, l'hôte commence à sortir des paquets de limites d'images sur un intervalle de 1 ms. Pour les périphériques à faible vitesse (LS) en tant que clavier filaire ordinaire, il ne s'agit que d'impulsions «garder en vie», tandis que pour FS, des paquets spéciaux de début d'image sont générés. Ces paquets maintiennent le périphérique en mode actif et l’empêchent de le faire en mode SUSPEND à faible consommation.

  4. Alors commence l'énumération. L'hôte envoie une demande pour obtenir le descripteur de périphérique. La demande est envoyée à "pipe par défaut" avec l'adresse de périphérique "0". [Il n'y a qu'un seul appareil de ce type à l'heure actuelle - le clavier - puisque toutes les autres périphériques du bus doivent déjà avoir leur adresse USB attribuée 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 exigeant que le périphérique change 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 adressée.

  8. L'hôte peut lire beaucoup plus d'informations à partir de plusieurs autres descripteurs et choisit éventuellement la "configuration du périphérique". Ceci conclut 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 du clavier, l'hôte envoie essentiellement une requête "IN" périodiquement, interrogeant essentiellement le périphérique (même si ce canal périodique s'appelle "interruption"). Si le clavier a une touche enfoncée / enfoncée, le clavier renverra cette information. Sinon, aucune donnée ne sera renvoyée au pilote de périphérique.

Bref, chaque périphérique USB doit recevoir une adresse unique de l'hôte USB, et deux hôtes USB auront du mal à communiquer avec un périphérique - collision de bus, incompatibilité d'adresse, interception aléatoire des données de pression, etc. Le protocole USB rend impossible le partage d'un appareil entre deux hôtes USB.


17
2018-03-07 18:27



If keyboard has any key pressed/depressed, the keyboard will return this information - comment se produiraient alors les clés fantômes? J'avais l'impression que les claviers devaient envoyer des événements key-up et key-down, ce qui expliquerait pourquoi si un événement Key-up manquait, vous auriez des clés fantômes ... - Shadow
@shadow, je ne suis pas sûr de savoir de quoi vous parlez. Le taux d'interrogation du clavier, si je me souviens bien, est de 8 ms. Vous appuyez sur des touches de manière asynchrone, de sorte que certains événements (make ou break) peuvent entrer dans des trames d'interrogation différentes, certains événements se produiront exactement lorsque la demande IN est en cours. Un bon contrôleur de clavier devrait gérer correctement tous les passages d'événement et ne devrait pas avoir d'événements manquants. Je ne sais pas pourquoi les claviers génèrent des «clés fantômes», mais cela n’a rien à voir avec le protocole USB. - Ali Chen
Les clés fantômes sont liées à la façon dont les clés physiques sont câblées. Les contrôleurs de clavier moins chers ne disposent pas d'une seule broche pour chaque touche, ils ont plutôt un système de grille d'adressage, par ex. lignes et colonnes où le contrôleur applique le fil de colonne et recherche le signal sur le fil de ligne. Dans ce scénario, en appuyant sur deux touches, par ex. E et S peuvent être simultanément impossibles à distinguer des pressions sur W et D, sauf par synchronisation. - Ben


Comme d'autres réponses l'ont expliqué, l'USB nécessite une communication bidirectionnelle dans le cadre de son fonctionnement. PS / 2, tout en autorisant la communication bidirectionnelle, n’en a pas besoin pour envoyer des clés à l’ordinateur, mais il nécessite de configurer les voyants du clavier.

Théoriquement, vous pouvez créer un périphérique pour dupliquer le signal PS / 2 et l'envoyer sur un second ordinateur, et ignorer les commandes des ordinateurs. Vous pourrez ainsi envoyer vos pressions sur plusieurs ordinateurs, mais les voyants du clavier ne seront pas disponibles. répondent au verrouillage numérique, au verrouillage des majuscules et au verrouillage du défilement (ou tout autre changement d'état des diodes, par exemple sous Linux, les DEL du clavier sont parfois utilisées à d'autres fins).

Je ne suis pas sûr de la complexité d'un tel projet. Cela faisait longtemps que je ne travaillais pas avec PS / 2, donc je ne sais pas si vous pouviez simplement raccorder quelques fils / connecteurs ou si vous aviez besoin d'un périphérique actif (par exemple un microcontrôleur) pour passer des commandes dans une direction mais les supprimer dans l'autre. Si vous aviez un microcontrôleur, vous pourriez même faire en sorte que l'appareil puisse interpréter les commandes du clavier et les "combiner" pour l'affichage (par exemple, si le voyant est allumé sur l'ordinateur, mais éteint sur l'ordinateur deux, flash court). le voyant s’il est allumé sur l’ordinateur deux mais éteint sur l’ordinateur, le voyant allumé s’il est allumé sur les deux ordinateurs et le voyant éteint s’il est éteint sur les deux ordinateurs). Ce serait plus avancé cependant.

De plus, si votre objectif est de contrôler un ordinateur depuis un autre ordinateur ou deux ordinateurs du même bureau, ou autre, vous voudrez peut-être examiner:

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

2
2018-03-09 08:41





Avant les claviers USB, les claviers PS / 2 utilisaient un protocole beaucoup plus simple où il était possible de connecter un clavier à deux appareils et de le faire fonctionner. Une simple connexion Y est tout ce qui est requis.

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

Les nouveaux claviers USB ont abandonné le mode PS / 2 hérité, donc cela ne fonctionnera pas dans ce cas.


1
2018-03-10 17:28