Protocole de PS/2 Mouse/Keyboard

Cet article est copyright 1999, Adam Chapweske

Introduction :

L'interface de dispositif PS/2, employée par beaucoup de souris et claviers modernes, a été développée par IBM et initialement apparue du manuel de référence technique d'IBM.  Cependant, ce document n'a pas été imprimé pendant beaucoup d'années et jusque moi ne sait pas, là n'est actuel aucune publication officielle de cette information.  Je n'ai pas eu accès au manuel de référence technique d'IBM, ainsi toute l'information à cette page vient de mes propres expériences comme l'aide des références énumérées en bas de cette page.

Descibes de ce document que l'interface a utilisé par la souris PS/2, clavier PS/2, et au clavier.  Je couvrirai l'interface physique et électrique, aussi bien que le protocole.  Si vous avez besoin de l'information de plus haut niveau, telle que des commandes, des formats de paquet de données, ou de tout autre détail de l'information au clavier ou à la souris, j'ai écrit les documents séparés pour les deux dispositifs :

(À) l'Interface du Clavier PS/2
l'Interface de la Souris PS/2
Je vous encourage également à examiner la page principale de ce site pour assurer plus d'information liée à ce sujet, y compris des projets, le code, et des liens liés à la souris et au clavier.  Veuillez envoyer un email si vous trouvez tous erreurs ou mauvais conseils sur ce site.

l'Interface Physique :

Le port PS/2 physique est l'un de deux modèles des connecteurs :  Les 5-broches DIN ou les 6-broches mini-Vacarme.  Les deux connecteurs sont complètement (électriquement) semblables ; la seule différence pratique entre les deux est l'agencement des broches.  Ceci signifie que les deux types de connecteurs peuvent facilement être changés avec les adaptateurs câblés simples.  Ceux-ci environ $6 coûtés ou vous peuvent faire vos propres en appariant les broches sur deux connecteurs quelconques.  La norme DIN a été créée par l'organisation allemande d'étalonnage (norme de fuer de Deutsches Institut).  Leur site Web est à http://www.din.de/ (ce site est en allemand, mais la plupart de leurs pages sont également disponibles en anglais.)

Les claviers de PC utilisent des 6-broches mini-Vacarme ou des 5-broches connecteur DIN.  Si votre clavier a des 6-broches mini-Vacarme et votre ordinateur a des 5-broches DIN (ou le versa de visa), les deux peuvent être rendus compatibles avec les adaptateurs décrits ci-dessus.  Des claviers avec les 6-broches mini-Vacarme désigné souvent sous le nom des claviers "PS/2", alors que ceux avec les 5-broches DIN s'appellent "" aux dispositifs (les claviers de "XT" a également utilisé les 5-broches DIN, mais elles sont tout à fait vieilles et n'ont pas été conduites à beaucoup d'années.)  Tous les claviers modernes construits pour le PC sont PS/2, À, ou USB.  Ce document n'applique pas aux dispositifs d'USB, qui utilisent une interface complètement différente.

Les souris viennent dans un certain nombre de formes et de tailles (et d'interfaces.)  Le type le plus populaire est probablement la souris PS/2, avec des souris d'USB gagnant la popularité.  Juste il y a quelques années, les souris séquentielles étaient également tout à fait populaires, mais l'industrie d'ordinateurs les abandonne à l'appui des dispositifs USB et PS/2.  Ce document s'applique seulement aux souris PS/2.  Si vous voulez connecter une publication périodique ou la souris d'USB, il y a d'abondance de l'information disponible ailleurs sur le Web.

Le câble reliant le keyboard/mouse à l'ordinateur est habituellement environ six pieds long et se compose de quatre à six 26 fils d'A.W.G. entourés par une couche mince de clinquant de mylar sheilding.  Si vous avez besoin d'un plus long câble, vous pouvez acheter des câbles de l'extenstion PS/2 de la plupart des mémoires d'électronique grand public.  Vous ne devriez pas relier les câbles multiples d'extension ensemble.  Si vous avez besoin d'un câble du clavier 30-foot, achetez un câble du clavier 30-foot.  Ne reliez pas simplement cinq câbles 6-foot ensemble.  Faire ainsi a pu avoir comme conséquence la transmission faible entre le keyboard/mouse et le centre serveur.

Comme note latérale, il y a un autre type de connecteur que vous pouvez exécuter dans sur des claviers. Tandis que la plupart des câbles de clavier sont câblés au clavier, il y en a dont le câble n'est pas de manière permanente attaché et n'est pas venu comme composant séparé.  Ces câbles ont un connecteur DIN sur une extrémité (l'extrémité qui se relie à l'ordinateur) et un connecteur de SDL (liaison de transmission de données de Sheilded) sur l'extrémité de clavier.  SDL a été créé par une compagnie appelée l'"ampère."  Ce connecteur est quelque peu semblable à un connecteur de téléphone parce qu'il a des fils et des ressorts plutôt que des broches, et aux prises d'un clip il en place.  Si vous avez besoin de plus d'information sur ce connecteur, vous pourriez pouvoir le trouver sur le site Web de l'ampère à http://www.connect.amp.com/.  J'ai seulement vu ce type de connecteur sur (de vieux) claviers de XT, bien qu'il puisse y avoir aux claviers qui utilisent également le SDL.  Ne confondez pas le connecteur de SDL avec le connecteur d'USB -- eux probablement tous les deux sembler semblable dans mon diagramme ci-dessous, mais eux sont réellement très différents.  Maintenez dans l'esprit que le connecteur de SDL a des ressorts et des pièces mobiles, alors que le connecteur d'USB pas .

Les pinouts pour chaque connecteur sont montrés ci-dessous :
 
Mâle

(prise)
Femelle 

(plot)
5-BROCHES DIN (AT/XT) : 
1 - Horloge
2 - Données
3 - Non mis en application
4 - La terre
5 - Vcc (+5V)

 
Mâle

(prise)
Femelle

(plot)
6-broches Mini-Vacarme (PS/2) :
1 - Données
2 - Non mis en application
3 - La terre
4 - Vcc (+5V)
5 - Horloge
6 - Non mis en application

 
6-broches SDL :
A - Non mis en application
B - Données
C - La Terre
D - Horloge
E - Vcc (+5V)
F - Non mis en application


l'Interface Électrique :

Note :  Dans tout ce document, j'emploierai le terme plus général "centre serveur" pour me référer à l'ordinateur -- ou à celui que le keyboard/mouse est relié -- et le terme "dispositif" se rapportera au keyboard/mouse.

Vcc/Ground fournissent la puissance au keyboard/mouse.  Le clavier ou la souris ne devrait pas dessiner plus de 100 mA du centre serveur et du soin doivent être pris pour éviter les montées subites passagères.  De telles montées subites peuvent être provoquées "chaud-en branchant" un keyboard/mouse (IE, connect/disconnect le dispositif tandis que le courant d'ordinateur passe.)  Des cartes mères plus anciennes ont eu un fusible surface-monté protéger les ports de clavier et de souris.  Quand ce fusible a soufflé, la carte mère était inutile au consommateur, et non-fixable au technicien moyen.  La plupart des plus nouveaux fusibles de réinitialisation automatique "d'utilisation de cartes mères" poly qui vont un long chemin de remédier à de ce problème.  Cependant, ce n'est pas une norme et il y a d'abondance immobile des cartes mères plus anciennes en service.  Par conséquent, je recommande contre chaud-brancher une souris PS/2 ou un clavier.

Sommaire : Caractéristiques de Puissance
Vcc = +5V.  
Courant maximum = 100 mA.

Les lignes de données et d'horloge sont les deux open-collector avec des résistances de pullup à +5V.  Une interface "open-collector" a l'état deux possible : basse, ou élevée impédance.  Dans le "bas" état, un transistor tire la ligne au niveau du sol.  Dans l'état "d'impédance élevée", l'interface agit en tant que circuit ouvert et ne pilote pas la ligne le bas ou haute. En outre, une résistance de "pullup" est reliée entre le bus et Vcc ainsi le bus est tiré haut si aucun des dispositifs sur le bus ne le tire activement le bas.  La valeur exacte de cette résistance n'est pas trop importante (kOhms 1~10) ; de plus grandes résistances ont comme conséquence moins de puissance d'énergie et de plus petites résistances ont comme conséquence un temps de montée plus rapide.  Une interface open-collector générale est montrée ci-dessous :

Le schéma 1 : Interface open-collector générale.  Des données et l'horloge sont lues sur les broches A et B du microcontrôleur, respectivement.  Les deux lignes sont normalement tenues à +5V, mais peuvent être tirées à la terre en affirmant la logique "1" sur C et D.  En conséquence, les données égalent D, inversées, et les égales C d'horloge, inversées.



Note : Quand regardant par des exemples sur ce site Web, vous me noterez utilisez quelques tours en mettant en application une interface open-collector avec des microcontrôleurs de PIC.  J'utilise la même broche pour entré et sortie, et je permets les résistances internes du pullup du PIC plutôt que d'à l'aide des résistances externes.  Une ligne est tirée à la terre en plaçant la broche correspondante à la sortie, et en écrivant un "zéro" à ce port.  La ligne est placée à l'état "d'impédance élevée" en plaçant la broche à l'entrée.  Tenant compte des diodes intégrées de la protection du PIC et de la descente actuelle suffisante, je pense que c'est une configuration valide.  Faites-moi savoir si vos expériences se sont avérées autrement.

Transmission : Description Générale

La souris PS/2 et le clavier mettent en application un protocole séquentiel synchrone bidirectionnel.  Le bus est "ralenti" quand les deux lignes sont hautes (open-collector).  C'est le seul état où on permet le keyboard/mouse commence à transmettre des données.  Le centre serveur a le contrôle final du bus et peut empêcher la transmission à tout moment en tirant la ligne le bas d'horloge.  

Le dispositif produit toujours du signal d'horloge.  Si le centre serveur veut envoyer des données, il doit d'abord empêcher la transmission du dispositif par le bas de traction d'horloge.  Le centre serveur alors tire des données basses et libère l'horloge.  C'est "Demander-à-Envoient" l'état et les signaux le dispositif au début produisant des impulsions d'horloge.

Sommaire : États de Bus
Données = haut, horloge = haut :  État de veille.
Données = haut, horloge = bas :  Transmission Empêchée.
Données = bas, horloge = haut :  Le Centre serveur Demander-à-Envoient

  Toutes les données sont transmises un octet à la fois et chaque octet est introduit une trame se composant de 11-12 bits.  Ces bits sont :
  • 1 bit de départ.  C'est toujours 0.
  • 8 bits d'informations, moindre bit significatif d'abord.
  • 1 bit de parité (imparité).
  • 1 bit d'arre4t.  C'est toujours 1.
  • 1 reconnaissent le bit (transmission de centre-à-dispositif seulement)

Le bit de parité est placé s'il y a un chiffre pair de 1 en les bits d'informations et le (0) remis à l'état initial s'il y a un nombre impair de 1 dans les bits d'informations.  Le nombre de 1 dans les bits d'informations plus le bit de parité ajoutent toujours jusqu'à un nombre impair (l'imparité.)  Ceci est utilisé pour la détection des erreurs.  Le keyboard/mouse doit contrôler ce bit et s'incorrect il répond comme si il avait reçu une commande incorrecte.

Des données envoyées du dispositif au centre serveur sont lues sur le bord en chute du signal d'horloge ; des données envoyées du centre serveur au dispositif sont lues sur le bord de montée.  La fréquence de base doit être dans l'intervalle 10 - 16.7 kilohertz.  Ceci signifie que l'horloge doit être haute pendant 30 - 50 micro-secondes et bas pendant 30 - 50 micro-secondes.  Si vous concevez un clavier, une souris, ou un émulateur de centre serveur, vous si modify/sample la ligne de données au milieu de chaque cellule.  C.-à-d..  15 - 25 micro-secondes après la transition appropriée d'horloge.  Encore, le keyboard/mouse produit toujours du signal d'horloge, mais le centre serveur a toujours le contrôle final de la transmission.

La synchronisation est absolument cruciale.  Chaque fois que la quantité que je donne en cet article doit être suivie exactement.

Transmission : Dispositif-à-Centre serveur

Les lignes de données et d'horloge sont deux collecteur ouvert.  Une résistance est reliée entre chaque ligne et +5V, ainsi l'état de veille du bus est haut. Quand le clavier ou la souris veut envoyer l'information, elle d'abord des contrôles la ligne d'horloge à s'assurer il est à un niveau élevé de logique.  Si elle n'est pas, le centre serveur empêche la transmission et le dispositif doit protéger n'importe quelles données à-être-envoyées jusqu'à ce que le centre serveur libère l'horloge.  La ligne d'horloge doit être sans interruption haute pour au moins pendant 50 micro-secondes avant que le dispositif peut commencer à transmettre ses données. 

Comme j'ai mentionné dans la section précédente, le clavier et la souris utilisent un protocole séquentiel avec les trames de 11 bits.  Ces bits sont :

  • 1 bit de départ.  C'est toujours 0.
  • 8 bits d'informations, moindre bit significatif d'abord.
  • 1 bit de parité (imparité).
  • 1 bit d'arre4t.  C'est toujours 1.
Le keyboard/mouse écrit un bit sur la ligne de données quand l'horloge est haute, et elle est lue par l'hôte quand l'horloge est basse.  Les schémas 2 et 3 illustrent ceci.

Le schéma 2 :  transmission de Dispositif-à-centre serveur.  La ligne état de changements quand l'horloge est haute et ces données de données est valide quand l'horloge est basse.

Le schéma 3 :  Balayez le code pour la clé de "Q" (15h) étant envoyée d'un clavier à l'ordinateur.  Manche A est le signal d'horloge ; le canal B est le signal de données.

---

La fréquence de base est de 10-16.7 kilohertz.  Le temps à partir du bord de montée d'une impulsion d'horloge à une transition de données doit être au moins de 5 micro-secondes.  Le temps d'une transition de données au bord en chute d'une impulsion d'horloge doit être au moins de 5 micro-secondes et aucunes 25 micro-secondes plus grandes que. 

Le centre serveur peut empêcher la transmission à tout moment en tirant la ligne le bas d'horloge pendant au moins 100 micro-secondes.  Si une transmission est empêchée avant la 11ème impulsion d'horloge, le dispositif doit interrompre la transmission actuelle et préparer pour retransmettre le "gros morceau" actuel des données quand le centre serveur libère l'horloge.  Un "gros morceau" des données a pu être un code de marque, code de rupture, identification de dispositif, paquet de mouvement de souris, etc...  Par exemple, si un clavier est interrompu tout en envoyant le deuxième octet d'un code à deux bits de rupture, il devra retransmettre les deux octets de ce code de rupture, pas simplement un qui a été interrompu.

Si le centre serveur tire le bas d'horloge avant la première haut-à-basse transition d'horloge, ou après le bord en chute de la dernière impulsion d'horloge, le keyboard/mouse n'a pas besoin de ne retransmettre aucune donnée.  Cependant, si on crée de nouvelles données qui doivent être transmises, il devra être protégé jusqu'à ce que le centre serveur libère l'horloge.  Les claviers ont une mémoire tampon 16-byte à cette fin.  Si la valeur de plus de 16 octets des frappes se produisent, d'autres frappes seront ignorées jusqu'à ce qu'il y ait pièce dans la mémoire tampon.  Les souris enregistrent seulement le paquet de mouvement le plus actuel pour la transmission.

Transmission de Centre-à-Dispositif :

Le paquet est envoyé à peu différemment dans la transmission de centre-à-dispositif...

Tout d'abord, le dispositif PS/2 produit toujours du signal d'horloge.  Si le centre serveur veut envoyer des données, il doit d'abord mettre l'horloge et les lignes de données dans "Demander-à-envoient" l'état comme suit :

  • Empêchez la transmission par le bas de traction d'horloge pendant au moins 100 micro-secondes.
  • Appliquez "Demander-à-envoient" par le bas de traction de données, puis libèrent l'horloge.
Le dispositif devrait vérifier cet état à des intervalles pour ne pas excéder 10 millisecondes.  Quand le dispositif détecte cet état, il commencera à produire des signaux d'horloge et de l'horloge dans huit bits d'informations et un bit d'arre4t.  Le centre serveur change la ligne de données seulement quand la ligne d'horloge est basse, et des données sont lues par le dispositif quand l'horloge est haute.  C'est opposé de quels occours dans la transmission de dispositif-à-centre serveur.

Après que le bit d'arre4t soit reçu, le dispositif reconnaîtra l'octet reçu en apportant la ligne de données le bas et en produisant d'une dernière impulsion d'horloge.  Si le centre serveur ne libère pas la ligne de données après la 11ème impulsion d'horloge, le dispositif continuera à produire des impulsions d'horloge jusqu'à ce que la la ligne de données soit libérée (le dispositif produira alors d'une erreur.)

Le centre serveur peut interrompre la transmission à l'heure avant la 11ème impulsion d'horloge (reconnaissez le bit) en jugeant l'horloge basse pendant au moins 100 micro-secondes.

Pour faciliter ce processus pour comprendre, voici les étapes que le centre serveur doit suivre pour envoyer des données à un dispositif PS/2 :

1)   apportent la ligne le bas d'horloge pendant au moins 100 micro-secondes.
2)   apportent la ligne de données le bas.
3)   libèrent la ligne d'horloge.
4)   attendent le dispositif pour apporter la ligne le bas d'horloge.
5)   Set/reset la ligne de données pour envoyer le premier bit d'informations
6)   attente le dispositif pour apporter la haute d'horloge.
7)   attente le dispositif pour apporter le bas d'horloge.
8)   répètent des étapes 5-7 pour les sept autres bits d'informations et le bit de parité
9)   libèrent la ligne de données.
10) attendent le dispositif pour apporter le bas de données.
11) attendent le dispositif pour apporter le bas  d'horloge.
12) attendent le dispositif pour libérer les données et l'horloge


Le schéma 3 montre que ce graphiquement et le schéma 4 sépare la synchronisation pour montrer quels signaux sont produits par le centre serveur, et à ce qui sont produits par le dispositif PS/2.  Notez le changement de la synchronisation pour le "ACK" mordu -- les occours de transition de données quand la ligne d'horloge est haute (plutôt que quand il est basse de même que la caisse pour les 11 autres bits.)

Le schéma 3 :  Transmission de Centre-à-Dispositif.

Le schéma 4 :  Transmission détaillée de centre-à-dispositif.

 

En référence au schéma 4, il y a deux quantités de temps où le centre serveur recherche.  (a) est le temps il prend le dispositif pour commencer à produire des impulsions d'horloge après que le centre serveur prenne au commencement la ligne le bas d'horloge, qui doit n'être aucune mme. 15 plus grande que que (b) est le temps il prend pour que  le paquet soit envoyé, qui doit n'être aucun 2ms plus grand que.  Si l'un ou l'autre de ces délais n'est pas rencontré, le centre serveur devrait produire d'une erreur.  Juste après que le "ACK" est reçu, le centre serveur peut apporter la ligne le bas d'horloge pour empêcher la transmission tandis qu'il traite des données.  Si la commande envoyée par le centre serveur exige une réponse, cette réponse doit être pas plus tard que la mme. 20 reçue après que le centre serveur libère la ligne d'horloge.  Si ceci ne se produit pas, le centre serveur produit d'une erreur.

    d'Autres Sources/Références :