Cours:ClefUSB

De troyesGEII
Révision datée du 2 janvier 2015 à 14:48 par SergeMoutou (discussion | contributions) (Clé USB finale)
Aller à : navigation, rechercher

Le but de ce projet est de réaliser ce que les anglo-saxons nomment USB EasyLoggeret que nous traduisons par clé de connexion USB. L'idée est de pouvoir stocker un certain nombre d'identifiants et de mots de passe et de pouvoir les utiliser. En soi le problème est relativement simple, sauf si l'on désire gérer correctement le changement des mots de passe dans la clé.

Présentation du matériel utilisé

Le matériel utilisé sera une platine Leonardo. Ce projet ne peut pas être réalisé avec une UNO.

Nous disposons d'une clé compatible Leonardo qui pourra être utilisée pour les tests finaux.

Platine Leonardo

La platine Leonardo est architecturée autour d'un processeur ATMega32U4, le U signifiant USB. Cette version de processeur permet de gérer deux protocoles USB clients en même temps, nous voulons dire par la même prise USB. Nous verrons dans le projet de cette section (et dans l'exemple keyboardSerial de la rubrique USB) qu'il est possible d'utiliser ensemble la liaison série et un clavier USB par le même fil USB.


Nous allons examiner les performances de la Leonardo par rapport à cette liaison USB. Pour ce faire, nous allons simuler une clé USB destinée à entrer un identifiant et un mot de passe automatiquement.

Clé USB finale

Voici le schéma de principe retenu :

Clé de connexion USB (Jean-Michel Gérard)

Ce schéma réalisé avec Eagle est de qualité suffisante pour pouvoir être téléchargé et consulté à l'aide de zooms importants.

Les trois boutons (nommés plus loin) sont clairement visibles en haut du schéma où l'on découvre clairement qu'ils sont montés à l'aide d'une pull-up externe (pas forcément utile avec la famille AVR).

Trois LEDs sont aussi visibles en bas à droite du schéma.

Cahier des charges

Travail à réaliser

Travail sur la liaison série

Mémoriser en mémoire RAM

Mémoriser en mémoire EEPROM

Travail sur le clavier

Mon premier programme

void setup() {  pinMode(2,INPUT);} void loop() {  static char new_button,old_button;  new_button=digitalRead(2);  if ((old_button==0)&&(new_button==1)) { //detection front montant   Keyboard.begin();   Keyboard.println("DEBUT AUTORISE");   Keyboard.println("abcdefghijklmnopqrstuvwxyz");   Keyboard.println("ABCDEFGHIJKLMNOPQRSTUVWXYZ");   Keyboard.println("0123456789");   Keyboard.println(" !\"$%&'()");   Keyboard.println("%,;:!?./+=");   Keyboard.println("FIN AUTORISE");   Keyboard.println("DEBUT NON AUTORISE");   Keyboard.println("<>*#{[|`\^@]}");   Keyboard.println("FIN NON AUTORISE");   Keyboard.end();  }   old_button = new_button;  delay(100); }