BE 2019-2020
Sommaire
Présentation du bureau d'étude
Nous vous proposons de découvrir ce qu'est réellement cet objet devenu banal appelé clé USB (Universal Serial Bus).
Le bureau d'étude consiste à construire de A à Z une clé USB :
- en créant un circuit électronique ou PCB (Printed Circuit Board) à l’aide d’un logiciel ;
- en soudant des composants électroniques (micro-contrôleur, mémoire FLASH, ...) ;
- en programmant le micro-contrôleur pour gérer la communication USB en utilisant la bibliothèque LUFA (Lightweight USB Framework for AVRs) ;
- en programmant le micro-contrôleur pour accéder à la mémoire ;
- en fabriquant un beau boitier pour votre clef.
Pour personnaliser votre clé n'hésitez pas à ajouter des fonctionnalités :
- LED qui clignotent lors des accès en lecture ou écriture ;
- vumètre qui indique le remplissage de la clé ;
- micro-interrupteurs pour verrouiller la clé ;
- vibreur parce que c'est possible, vous trouverez bien une justification ;
- microphone permettant d’espionner les conversations ;
- toute autre fonction plus ou moins utile mais qui vous inspire ...
Les supports de la présentation de ce bureau d'études : Media:BE_clef_USB.pdf.
Survol d'USB
Evolution des connexions USB
L'acronyme USB signifie "Universal Serial Bus" et effectivement l'USB peut être défini comme un bus USB très verbeux. L'USB est géré par un consortium autonome "USB Implementers Forum".
Jusqu'à la version 2, l'acronyme est fidèle à la réalité. Pour ces périphériques, 3 vitesses de transfert sont possibles sur la paire différentielle :- basse vitesse : 1,5 Mb/s ;
- pleine vitesse : 12 Mb/s ;
- haute vitesse : 480 Mb/s.
Un protocole verbeux
L'initialisation d'un périphérique USB se fait comme suit :
- détection électrique de la connexion du périphérique ;
- alimentation électrique du périphérique ;
- utilisation de l'adresse temporaire 0 sur le bus ;
- récupération de la taille des messages pour le point d'accès 0 ;
- envoi de l'adresse au périphérique sur le point d'accès 0 ;
- envoi des descripteurs du périphérique au contrôleur USB via le point d'accès 0.
Pour un périphérique simple :
- souris : environ 100 octets pour le descripteur de configuration ;
- clavier : environ 150 octets pour le descripteur de configuration.
Les points d'accès (terminaison sur le schéma) :
- des identifiants sur 8 bits (numéro sur 4 bits) ;
- un point d'accès de contrôle de numéro 0 bidirectionnel ;
- les communications se font de ou vers les points d'accès ;
- un sens de communication (bit de poid fort) :
- IN => du périphérique vers le contrôleur ;
- OUT => du contrôleur vers le périphérique.
- la direction est IN ou OUT vis à vis de l’hôte.
Plusieurs types de points d'accès :
- isodromique (isochronous) : débit réservé (e.g. vidéo en temps réel) ;
- par interruption (interrupt) : latence garantie (e.g. souris) ;
- de volume (bulk) : débit maximal sans garantie (e.g. clef mémoire).
Logiciels
Pour la conception de circuits imprimés nous vous recommandons le logiciel fritzing.
Pour la découpe laser de nombreux utilisateurs utilisent inkscape.
Pour la conception 3D vous pouvez tenter freeCAD. Une solution en ligne existe : onshape.
Pour la programmation du micro-contrôleur vous utiliserez le compilateur C avr-gcc et le logiciel de téléversement dfu-programmer.
Les composants électroniques
Le coeur de votre clé va être un micro-contrôleur AVR plus exactement l'ATMega16u2. Ce micro-contrôleur possède l'électronique nécessaire pour la gestion d'un bus USB 2.0.
Sans mémoire une clé n'est pas une clé. Vous utiliserez des mémoires faciles à gérer avec un ATMega16u2. Ces mémoires sont accessibles par un bus série SPI et facile à souder. Par contre elles sont de faible capacité (64Mb). Si vous êtes téméraire, vous pouvez utiliser une mémoire accessible par un bus de 8 bits, plus difficile à souder, plus difficile à programmer mais d'une capacité intéressante (128Gb).
Il vous faudra aussi quelques autres composants comme un quartz, des résistances, des condensateurs, des diodes, des régulateurs de tension et bien sur des LED pour ajouter un peu de lumière. La carte de base peut être décrite comme suit.
- Le micro-contrôleur peut être accompagné d'un quartz à 8Mhz et de ses condensateurs et résistance.
- Le micro-contrôleur peut être alimenté par le connecteur USB en 5v (broche UVCC) mais avec ses lignes VCC et AVCC bouclées sur la sortie UCAP du régulateur 3.3v interne.
- Un convertisseur 5v vers 3.3v est nécessaire pour l'alimentation des mémoires.
- Le micro-contrôleur dialogue avec les mémoires par le bus SPI, une ligne de sélection est nécessaire par mémoire.
Pour la conception de votre clé vous pouvez vous appuyer sur un prototype de clef réalisé pour ce bureau d'études.
Le schéma décrit le circuit électronique partie par partie.
A partir du circuit, il faut créer une carte sans croisement de pistes pour éviter les court-circuits.
Le fichier source Fritzing est disponible : Media:cle_usb.zip (renommer en .fzz).
Une autre carte est disponible pour une mémoire parallèle de plus grande capacité. Attention cette carte n'a pas été testée.
Le fichier source Fritzing est disponible : Media:cle_usb_bis.zip (renommer en .fzz).
Test des cartes
Vision recto et verso des deux circuits décrit dans la section précédente (ancienne version à gauche). A noter que dans l'ancienne version seule les deux puces mémoire se trouvent au recto. Pour la nouvelle version la carte a du être agrandie et le micro-contrôleur rejoint la mémoire au verso.
La première étape de test consiste à insérer les PCB dans un port USB. Remarquez la sur-épaisseur réalisée à l'aide d'un papier un peu épais pour assurer le contact. Si l'ATMega16u2 est fonctionne correctement, en lançant l'utilitaire lsusb vous devez voir apparaître un périphérique labellé Atmel DFU device.
Pour tester plus en avant, il est proposé d'envoyer sur le micro-contrôleur un programme permettant de faire clignoter la LED connectée au micro-contrôleur (la LED est contrôlée par PB6 sur l'ancienne version et sur PB0 sur la nouvelle).
Vous pouvez trouver les programmes de test dans cette archive : Media:ClefUSB.zip. Pour compiler les programmes, il suffit de se placer dans le répertoire correspondant à la version de la clef et lancer le makefile avec la commande make. Pour télécharger le programme un simple make upload suffit. Pour remettre les micro-contrôleur en mode DFU pour les reprogrammer, il faut court-circuiter les broches reset et de la masse (connecteur à deux broches sur les deux cartes).
Voila le résultat de l'exécution du programme de test du micro-contrôleur sur la nouvelle version : Media:ClefUSBTestLed.mp4.
Il faut maintenant souder le régulateur 3,3v pour alimenter les mémoires et aussi souder les-dites mémoires.
Ensuite il faut tester si l'accès aux mémoires fonctionne. Les programmes sont différents suivant les types de mémoire.
Test des mémoires AT45DB641E
Test de la mémoire
Bibliothèque LUFA
Pour la gestion du bus USB par le micro-contrôleur nous allons nous appuyer au maximum sur la bibliothèque USB LUFA. Cette bibliothèque permet d'exploiter plus facilement les aspects USB des micro-contrôleurs AVR comme l'ATMega16u2.
Vous pouvez télécharger la dernière version de la bibliothèque [1]. Il est ensuite conseillé d'effectuer quelques manipulations pour pouvoir développer dans de bonnes conditions.
- Créez un répertoire PolytechLille au même niveau que les répertoires Demos et Projects.
- Dans ce répertoire copiez la démonstration de périphérique USB bas niveau MassStorage. Au niveau du makefile indiquez atmega16u2 comme micro-contrôleur, UNO comme platine et restez à 8Mhz.
- Il faut ensuite modifier la configuration de la mémoire et les fonctions d'accès à cette mémoire dans le sous-répertoire Lib du répertoire PolytechLille/MassStorage.
Pour téléverser votre programme sur l’ATMega16u2, le paquetage Debian dfu-programmer est nécessaire. Installez-le au besoin. La procédure à suivre pour charger votre programme sur l’ATMega16u2 est la suivante :
- court-circuitez momentanément les lignes reset et masse de l’ATMega16u2, l'utilitaire lsusb doit lister la carte comme étant en mode DFU, vous pouvez alors exécuter les commandes suivantes :
- dfu-programmer atmega16u2 erase
- dfu-programmer atmega16u2 flash MassStorage.hex
- dfu-programmer atmega16u2 reset
- débranchez et rebranchez votre carte, votre programme doit être actif sur le micro-contrôleur.
Réalisations des binômes
Numéro | Elèves | Fonctionnalité supplémentaire | Page |
---|---|---|---|
Binôme 1 | Nicolas DEBAISIEUX & Maxence FLAMENT | Signal sonore Perte | Binôme 1 2019/2020 |
Binôme 2 | Eve POITEVIN & Alix DUFOUR | Synthèse vocale | Binôme 2 2019/2020 |
Binôme 3 | Corentin GIELIN & Julien DUMON | Afficheurs 7-seg en tant que vumètre numérique | Binôme 3 2019/2020 |
Binôme 4 | Clément DELECOURT & Thomas MOSTOWFI | Signal mauvaise orientation | Binôme 4 2019/2020 |
Binôme 5 | Gaëtan DELPLANQUE & Tristan PAYEN | Verrouillage code | Binôme 5 2019/2020 |
Binôme 6 | Louise MAES & Léo POUMAER | Prise téléphone & musique attente | Binôme 6 2019/2020 |
Binôme 7 | Martin SERGEANT & Quirin DECAUDIN | Binôme 7 2019/2020 | |
Binôme 8 | Mateo POURRIER & Martin PLAUD | Binôme 8 2019/2020 | |
Binôme 9 | Baptiste BLACK & Alexandre ROUSSEL | Haut-parleur | Binôme 9 2019/2020 |
Binôme 10 | Theo DELAUNOIS & Antoine MALENGE | Binôme 10 2019/2020 | |
Binôme 11 | Florian DERLIQUE & Ahimen BENDIF | Binôme 11 2019/2020 |