BE 2019-2020 : Différence entre versions

De Wiki de bureau d'études PeiP
(Test des cartes)
(Programmation de micro-contrôleur par SPI)
Ligne 145 : Ligne 145 :
  
 
Nativement les micro-contrôleurs AVR peuvent être programmés via le bus SPI. Généralement un amorceur (bootloader) est installé sur ces micro-contrôleurs pour qu'ils puissent être programmés plus facilement par une connexion série pure (cas de l'ATMega328p par exemple) ou par une connexion USB (cas de l'ATMega16u2). Malheureusement les amorceurs peuvent être effacés par une mauvaise manoeuvre ou ne permettent pas de configurer tous les aspects du micro-contrôleur.
 
Nativement les micro-contrôleurs AVR peuvent être programmés via le bus SPI. Généralement un amorceur (bootloader) est installé sur ces micro-contrôleurs pour qu'ils puissent être programmés plus facilement par une connexion série pure (cas de l'ATMega328p par exemple) ou par une connexion USB (cas de l'ATMega16u2). Malheureusement les amorceurs peuvent être effacés par une mauvaise manoeuvre ou ne permettent pas de configurer tous les aspects du micro-contrôleur.
 +
 +
Généralement pour une programmation de micro-contrôleur par bus SPI, un connecteur ICSP est utilisé. Ce connecteur regroupe les lignes du bus SPI, la masse, l'alimentation et le <tt>reset</tt>.
  
 
= Bibliothèque LUFA =
 
= Bibliothèque LUFA =

Version du 24 février 2020 à 22:15

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).

Firefly-serenity-usb-flash-drive.jpg

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".

USB-2.png
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.


USB-3.jpg
A partir de l'USB 3.0, la notion de bus série est un peu oubliée. La vitesse augmente en utilisant les deux nouvelles paires blindées : 5Gb/s (super vitesse).


USB-4.png
Et maintenant USB (USB 3.1, USB 3.2, USB 4) se prend pour de l'Ethernet. En effet, le connecteur USB-C ajoute, à la paire historique, quatre paires blindées. USB 3.2 promet des vitesses jusqu'à 20G/s.


Un protocole verbeux

USB-communication.gif

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.


USB-descripteurs.gif

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

ATMega16u2

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.

AT45DB641E-SHN2B-T
MT29F128G8

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.

Schéma électronique
Carte électronique


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.

Schéma électronique
Carte électronique


Le fichier source Fritzing est disponible : Media:cle_usb_bis.zip (renommer en .fzz).

Test des cartes

Recto des deux cartes
Verso des deux 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.

Avant même de pouvoir charger un programme sur le micro-contrôleur, des octets de configuration (fuses) doivent être positionnés sur ce micro-contrôleur.

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

Pour tester un des deux mémoires, il faut déjà sélectionner la mémoire sur le bus SPI. La première mémoire se sélectionne en passant la ligne PD0 à l'état bas. Pour la seconde mémoire, il faut utiliser la ligne PB5.

Pour tester la mémoire, il est possible de demander la valeur du registre d'état. Pour cela il faut envoyer l'octet 0xD7 sur le bus SPI, une fois la mémoire sélectionnée. Ensuite, il faut lire les deux octets du registre d'état puis remonter la ligne de sélection à l'état haut.

Test de la mémoire MT29F128G8

Cette mémoire est sélectionnée par défaut. Il faut juste arriver à lui envoyer un ordre en utilisant les 8 lignes de contrôle.

Programmation de micro-contrôleur par SPI

Nativement les micro-contrôleurs AVR peuvent être programmés via le bus SPI. Généralement un amorceur (bootloader) est installé sur ces micro-contrôleurs pour qu'ils puissent être programmés plus facilement par une connexion série pure (cas de l'ATMega328p par exemple) ou par une connexion USB (cas de l'ATMega16u2). Malheureusement les amorceurs peuvent être effacés par une mauvaise manoeuvre ou ne permettent pas de configurer tous les aspects du micro-contrôleur.

Généralement pour une programmation de micro-contrôleur par bus SPI, un connecteur ICSP est utilisé. Ce connecteur regroupe les lignes du bus SPI, la masse, l'alimentation et le reset.

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 Affichage température par leds Binôme 1 2019/2020
Binôme 2 Eve POITEVIN & Alix DUFOUR Déverrouillage par haut volume sonore 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 Ecran LCD + vumètre + affichage nom fichier 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 Hub + Vumètre 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