View on GitHub

Introduction

1. Généralités

  • Pourquoi un clavier mécanique ?
  • Particularités et avantages du mécanique
  • Le bruit, source et solutions

2. Les switchs

  • Cherry MX : Tactile ou linéaire, silencieux ou clicky
  • Les copies de Cherry MX
  • Le Buckling Spring d'IBM
  • Le switch capacitif Topre
  • Les switchs Alps & Matias
  • Les switchs Omron

3. Les formats

  • Full size
  • Tenkeyless
  • Compacts : 60%, 75% et autres
  • Les formats ergonomiques

4. Le layout : disposition des touches

  • Disposition physique : ANSI et ISO
  • Disposition logique : ne dites plus "azerty" ou "qwerty"
  • Langue et OS
  • Un cas particulier : l'US International

5. Comment choisir ?

  • Marketing
  • Type de switch
  • Format
  • Disposition des touches
  • Rétroéclairage
  • Fonctionnalités diverses : macros, hub USB, repose-poignet
  • Qualité de fabrication & fiabilité

6.1. Anatomie d'un clavier : les touches

  • Matériaux
  • Légendes
  • Profil
  • Monture
  • Remplacer ses touches

6.2. Anatomie : design électrique

  • Ghosting et frappes fantômes
  • Anti-ghosting : blocking et autres solutions
  • X-Key rollover et appuis simultanés
  • USB et PS/2
  • Bouncing et chattering

7. Logiciels utiles

  • MSKLC
  • KeyTweak
  • SharpKeys
  • AutoHotkey

8. Liens

  • Forums et communautés
  • Blogs et sites d’information spécialisés
  • Outils
  • Aide à l’apprentissage

Design électrique

Pour comprendre certaines notions vantées par les fabricants de claviers comme l’antighosting ou le NKRO, il faut comprendre la façon dont un clavier fonctionne.

Pour l’essentiel, un clavier est composé d’interrupteurs (switchs, un sous chaque touche) et d’un microcontrôleur qui sert de passerelle entre les touches et le pc : lorsque l’utilisateur appuie sur une touche, le microcontrôleur détecte cet appui et envoie via le port USB ou PS/2 le caractère correspondant (plus précisément le scancode) à l’OS qui l’interprète en fonction du layout choisi dans les options de langue.

Il faut donc que chaque switch soit relié au microcontrôleur, qui devrait a priori disposer d’une centaine d’entrées/sorties pour un clavier. Or, dans le petit monde des microcontrôleurs, plus on a d’entrées/sorties, plus on est gros et puissant, et donc cher, et les contrôleurs disposant de suffisamment d’e/s pour un clavier sont inutilement puissants et chers. Pour pouvoir relier un grand nombre de switchs à un contrôleur disposant d’un nombre réduit d’e/s (typiquement 32 ou 48), on a donc recours à un arrangement en matrice :

Connexion en matrice

Ici, pour connecter 30 switchs, on a besoin non pas de 30 entrées/sorties mais de 13, réparties en 10 colonnes et 3 lignes. Par extension, pour un clavier de 105 touches, 21 e/s suffiront, réparties en 11 colonnes et 10 lignes (qui seront arrangées sur le PCB de façon à se conformer à la disposition voulue des touches).

Si cet arrangement en matrice permet d’économiser le nombre d’entrées/sorties du contrôleur, elle pose néanmoins d’autres problèmes, et c’est là qu’intervient notamment la notion de ghosting.

 

• Ghosting et frappes fantômes

Dans une matrice, comme plusieurs touches partagent un lien (ligne ou colonne) vers le microcontrôleur, celui-ci peut interpréter la pression des switchs de façon erronée lorsque trois switchs adjacents (ou plus) ayant un colonne et une ligne en commun sont pressés.

Activation de switchs d'une matrice

Dans ce schéma, les cas 1, 2, 3 et 4 ne posent pas de problèmes : le contrôleur active chaque colonne une par une en y envoyant un courant et vérifie pour chacune sur quelles lignes celui-ci ressort (cette opération réalisée successivement sur l’ensemble des colonnes constitue un scan de la matrice, qui est réalisé plusieurs centaines de fois par secondes), et est capable de différencier chacune des touches pressées simultanément.

Dans le cas numéro 5, du fait de l’agencement électrique des touches, la pression de F, G et B conduit le courant (qui circule librement dans n’importe quelle direction tant qu’il y a continuité électrique) à passer par V et donc le contrôleur à détecter de façon erronée un appui sur cette touche. C’est cette détection d’un appui inexistant qu’on appelle ghosting.

 

• Anti-ghosting : blocking et parades

Pour éviter ce problème, plusieurs solutions se présentent ; la plus répandue consiste à programmer le contrôleur pour qu’il bloque la prise en compte d’une troisième frappe dans la configuration décrite ci-dessus : ce blocage, qu’on appelle ghosting par abus de langage, est en fait du jamming ou blocking ; il est la solution à la propension d’une matrice à produire du ghosting (d’où la confusion fréquente entre les termes), et la cause de la limitation à deux appuis simultanés (le 2KRO, 2-key rollover) sur bon nombre de claviers pour empêcher ce problème de se produire. On notera que techniquement parlant, un clavier peut donc avoir recours au blocage de touches comme mesure anti-ghosting, alors que la dénomination marketing “anti-ghosting” est couramment utilisée pour désigner un clavier qui n’en bloque pas…

Certains constructeurs choisissent de réaliser des matrices plus complexes ou de multiplier les liaisons différenciées entre groupes de switchs et contrôleur pour réduire au maximum les possibilités de ghosting (et donc la nécessité de bloquer les touches) : on parle souvent de matrices “typing optimized” ou “game optimized” (optimisées pour la frappe ou les jeux), qui restent souvent une solution sub-optimale dans la mesure où elles ne font souvent que déplacer le problème sur des combinaisons de touches moins fréquemment utilisées. Faute de mieux, c’est une solution plus acceptable qu’un blocage dès trois touches.

La solution la plus aboutie consiste à adjoindre une diode à chaque switch : dans la mesure où une diode ne permet au courant de passer que dans un seul sens, elle lui évite de “remonter” dans un switch adjacent et de produire une frappe fantôme. Une matrice comprenant une diode par switch élimine au niveau hardware toute possibilité de ghosting, rend donc inutile le jamming software comme mesure de protection, et permet donc un nombre d’appuis simultanés illimité (on parle de NKRO, n-key rollover).

Cette solution à base de diodes n’est possible que sur un clavier doté d’un circuit imprimé (pcb) sur lequel sont présentes les pistes de cuivre constituant la matrice, les diodes et les switchs ; un clavier à membrane étant précisément constitué de plusieurs membranes souples en lieu et place d’un pcb, le recours aux diodes est impossible : c’est la raison pour laquelle les claviers à membrane n’ont que le blocking pour recours et sont la plupart du temps 2KRO (sauf dans le cas peu fréquent de matrices spéciales).

Circuit imprimé de clavier et composants

L’envers d’un PCB de clavier, avec une diode (en orange) par switch.

On notera enfin que ces problèmes de ghosting et de jamming ne concernent que les claviers où la prise en compte d’un appui repose sur un contact électrique (via un switch à contact comme le Cherry MX ou une membrane) ; de par leur fonctionnement sans contact, les claviers à switchs électro-capacitifs Topre ou les vénérables switchs Honeywell à effet Hall ne présentent pas ce problème et n’ont pas besoin de solution software ou hardware particulière pour le contourner.

 

• X-key rollover et appuis simultanés

Le nombre de touches pouvant être prises en compte simultanément dépend de deux facteurs : le design de la matrice du clavier, et le mode de transmission des données, qui est souvent déterminé par sa connexion. Pour l’exprimer, on parle de rollover, et plus spécifiquement de n-key rollover, n désignant le nombre de touches pouvant être prises en compte simultanément. La plupart du temps, les modifieurs (ctrl, alt, shift) ne sont pas pris en compte dans ce chiffre. Pour récapituler ce qui a été détaillé plus haut sur le rollover permis par les différentes matrices :

  • 2KRO : clavier reposant sur une matrice assurant qu’au moins deux touches seront toujours prises en comptes en tout point du clavier, parfois pas plus, et parfois plus en fonction de leur position ; ce sont principalement les claviers à membranes, et plus généralement tous les claviers dont la matrice n’utilise pas de diodes pour isoler électriquement les switchs et prévenir les problèmes de ghosting.

  • NKRO : clavier reposant sur une matrice permettant au niveau hardware d’éviter le ghosting (via l’utilisation de diodes ou de switchs sans contact) et donc le blocage des touches ; la plupart des claviers mécaniques sont NKRO lorsque connectés en PS/2, certains le sont également en USB.

  • 6KRO : les claviers dont la matrice permet au niveau hardware d’éviter le ghosting, mais dont la transmission des données est limitée à six touches maximum en simultané (plus les modifieurs) du fait du protocole USB utilisé (voir plus bas).

  • xKRO : lorsque x n’est ni 2, ni 6, ni N, on a affaire soit à une matrice complexe, soit à un clavier 6KRO dont le firmware est programmé pour tricher et faire reconnaître plus de 6 touches sans pour autant permettre le NKRO.

 

• USB et PS/2

Bien qu’étant toutes deux des interfaces série prévues pour utiliser notamment clavier et souris, les interfaces PS/2 et USB se différencient sur un certain nombre de points.

• Rollover

L’interface PS/2 ne limite pas le nombre d’appuis transmissible simultanément, autrement dit elle autorise le NKRO si le design électrique du clavier le permet (cf. plus haut).

Le cas de l’USB est plus complexe : un clavier USB (défini par la spécification USB HID, Human Interface Device) est censé pouvoir fonctionner en deux modes (ou protocoles), le premier pour être détectable par un BIOS ou n’importe quel bootloader (le boot protocol), le second qui est actif une fois l’OS lancé (le regular protocol). Pour des questions de compatibilité et de simplicité de code, le boot protocol limite les transmissions à 6 touches (plus les modifieurs), tandis que le protocole normal autorise la transmission d’un nombre illimité d’appuis simultanés. Autrement dit, le boot protocol limite un clavier USB au 6KRO, et le passage au protocole normal sous l’OS autorise le NKRO.

En pratique, de multiples problèmes se posent :

  • certains fabricants de claviers implémentent un protocole normal identique au boot protocol, limitant leur clavier au 6KRO en toutes circonstances, soit pour simplifier le code du firmware du clavier, soit parce que…

  • certains BIOS sont mal codés et, partant du principe que tous les claviers fonctionnent en boot protocol, ne demandent pas explicitement au clavier de passer en boot protocol, ce qui les empêche de recevoir les appuis d’un clavier capable de NKRO qui ne passera donc pas en boot protocol au démarrage du pc, le rendant inopérant.

  • certains fabricants de claviers contournent ce problème en programment leur clavier pour qu’il simule un hub USB auquel sont connectés plusieurs claviers : le BIOS ne verra que les 6 premiers caractères, mais le clavier fonctionnera en NKRO sous l’OS. Ce procédé n’est pas sans poser problème, notamment sous OS X où les claviers fonctionnant ainsi ne sont pour la plupart pas reconnus.

  • enfin, certains fabricants proposent un switch pour alterner manuellement entre 6KRO et NKRO pour permettre ce dernier tout en ayant la possibilité d’être compatible avec un BIOS mal codé.

Il n’y a donc pas de meilleure solution : s’il est souhaitable de pouvoir utiliser son clavier en NKRO si sa conception ne permet, les cas où un utilisateur sera limité par le 6KRO (6 touches + modifieurs) sont somme toute peu courants et ce dernier mode est le seul permettant de communiquer avec son pc avant d’arriver dans l’OS. Un clavier USB permettant de choisir 6KRO ou NKRO représente la solution la plus flexible, mais elle n’est pas pour autant indispensable.

 

• Transmission des données

Une autre différence notable entre PS/2 et USB réside dans leur façon de transmettre les données: l’USB fonctionne en attente active (polling), alors que le PS/2 fonctionne par interruption (interrupt). En attente active, l’ordinateur auquel le clavier est connecté écoute à intervalles réguliers (par défaut 125 fois par seconde en USB, d’où le taux de polling de 125 Hz) si le clavier envoie des données ; à l’inverse, un clavier fonctionnant par interruption envoie ses données immédiatement qui sont reçues sans délai par l’ordinateur.

C’est ce qui fait dire par facilité qu’un clavier PS/2 a moins de latence ou est plus réactif qu’un clavier USB : en PS/2 la frappe est transmise sans délai, alors qu’il peut être de 8 ms en USB (et peut descendre à 1 ms lorsque l’USB fonctionne à 1000 Hz). Si vous pensez que ces quelques millisecondes ont une réelle importance en jeu, commencez par mesurer votre réactivité, et voyez ensuite si ces 8 ms pèsent lourd par rapport à votre propre temps de réaction.

 

• Alimentation électrique

La dernière différence notable entre PS/2 et USB concerne l’intensité du courant qu’ils sont capables de transmettre : l’interface PS/2 peut fournir 275 mA en 5 V, alors que l’USB 2.0 peut fournir 500 mA (et jusqu’à 900 mA pour l’USB 3.0). Typiquement, un microcontrôleur (et donc un clavier sans rétroéclairage) ne consomme que quelques mA (entre 5 et 20 mA pour un µC AVR), mais un rétroéclairage complet peut consommer bien plus. L’USB est globalement plus adapté pour les claviers rétroéclairés, mais quelques rares claviers proposent une connexion PS/2 pour l’envoi de données avec un connecteur USB à brancher en parallèle (où seuls les contacts d’alimentation sont actifs) pour alimenter le rétroéclairage.

 

• Bouncing & chattering

Le bouncing, ou chattering, est un phénomène propre aux switchs à contact qui fait que lorsque ceux-ci sont enfoncés, leurs contacts, faits de métal souple, rebondissent l’un contre l’autre (bounce) avant de s’immobiliser et de maintenir le contact électrique. Le phénomène est très bref, mais suffisant pour être détectable par un microcontrôleur vérifiant plusieurs milliers de fois par seconde l’état des switchs qui y sont connectés.

Appliqué à un clavier, ce phénomène entraîne la prise en compte de plusieurs frappes successives (chatter) lorsque vous appuyez même brièvement sur une touche. Pour éviter ce problème, le firmware du clavier comprend en général un tampon qui stocke les dernières frappes enregistrées, les compare, et n’en prend en compte qu’une seule s’il en détecte plusieurs identiques sur un laps de temps donné (ce qu’on appelle le debouncing, ici réalisé de façon software).

Par exemple, Cherry indique pour ses switchs MX un temps de bounce inférieur ou égal à 5 ms ; en conséquence, la plupart des firmwares de claviers les utilisant prévoient un debounce de 7-10 ms, qui délaie d’autant la prise en compte effective de la frappe (délai insensible en pratique). En cas de switch défectueux ayant des contacts produisant plus de chatter que ce que le firmware est programmé pour empêcher, il faudra soit augmenter le debounce du firmware (ce que les claviers permettent très rarement), soit remplacer le switch fautif par un autre.

Par nature, les switchs sans contact, par exemple les switchs capacitifs Topre, ne sont pas affectés par ce problème.

 

retour au sommaire | suite : Logiciels