« SE2a4 USB 2023/2024 » : différence entre les versions
Ligne 37 : | Ligne 37 : | ||
= Application PC = | = Application PC = | ||
L’objectif est d’utiliser la bibliothèque USB <code>libusb-1.0</code> pour écrire un programme C permettant de récupérer des informations de votre périphérique USB. | |||
Un manuel complet de la bibliothèque est disponible [http://libusb.sourceforge.net/api-1.0/modules.html]. Vous pouvez aussi trouver un résumé de la bibliothèque [http://rex.plil.fr/Enseignement/Systeme/Systeme.PSE/]. Pour cette utilisation assez basique nous utiliserons les fonctions de communication bloquantes. |
Version du 24 octobre 2023 à 18:05
Cahier des charges
Vous devez réaliser un périphérique USB permettant de contrôler le démarrage et l'arrêt d'ecrans de stations de travail. L'idée est de ne pas imposer de modification sur l'écran. Le dispositif est sensé appuyer sur le bouton de l'écran avec un servo-moteur et contrôler l'état de l'écran avec un photo-récepteur.
Pour le tutorat USB il est juste demandé de simuler le dispositif avec un servo-moteur et un photo-récepteur, pour la partie électronique l'ATmega8u2 d'un Arduino Uno Rev3 va être utilisé et la partie mécanique n'est pas demandée. Vous poursuivrez cet exercice au prochain semestre en projet système et réseau. En projet vous aurez à concevoir et réaliser une carte et à réfléchir à la partie mécanique (il y aura bien entendu aussi des aspects système et réseau).
La difficulté avec l'Arduino Uno est que les entrées/sorties de l'ATmega8u2 ne sont pas accessibles hormis l'UART. Vous aurez donc aussi à programmer l'ATmega328p pour accéder au servo-moteur et au photo-récepteur. Il faut aussi prévoir une communication UART entre les deux puces.
Le périphérique USB sera implanté à l'aide de la bibliothèque LUFA sous la forme d'un périphérique spécifique. La gestion du périphérique doit se faire au travers d'une application sur PC utilisant la bibliothèque libusb-1.0
.
Programmation de l'ATmega8u2
Récupérez le code de la bibliothèque LUFA. Créez un sous-répertoire SE2a4
dans cette bibliothèque et installez-y la démonstration minimale Media:2023-SE2a4-Minimal.zip.
Adaptez le makefile
de la démonstration à votre microcontrôleur et carte cible. Ajustez aussi le chemin de la bibliothèque LUFA en restant en chemin relatif.
Définition du périphérique USB
Votre périphérique USB est un capteur et un actionneur : il faut donc prévoir un point d'accès entrant et un point d'accès sortant. Des points d'accès de type interruption sont parfaitement adaptés ici. Pour informer le contrôleur USB de la présence de ces points d'accès vous devez effectuer les actions ci-dessous.
- Dans le fichier
descripteur.h
ajouter à la structureUSB_Descriptor_Configuration_t
un champ interface et deux champs points d'accès. Pour vous aidez dans le non des types à employer pour les champs, regardez le même fichier dans la démonstration LUFADemos/Device/LowLevel/Keyboard/
. - Dans le fichier
descripteur.h
décommentez l'union pour donner un numéro à votre interface spécifique. - Dans le fichier
descripteur.h
ajoutez des macros pour indiquer les numéros de vos points d'accès ainsi que la taille des données à leur transmettre. Là encore la démonstrationKeyboard
vous indique comment faire. - Dans le fichier
descripteur.c
instanciez la structure définie dans le fichier d'inclusion. Pour vous aider sur les valeurs des champs, regardez le même fichier dans la démonstrationKeyboard
. N'oubliez pas de mettre à jour le descripteur de configuration.
A ce niveau vous pouvez compiler la démonstration, passer l'ATmega8u2 en mode DFU USB en court-circuitant les broches reset et GND de son connecteur ISP, télécharger la démonstration sur l'ATmega8u2 en utilisant make dfu
et vérifier que les descripteurs sont bien reconnus via l'utilitaire lsusb
. Concernant l'utilitaire lsusb
mettez à profit les options -d
et -vvv
.
Gestion des interruptions
La gestion des interruptions se fait dans le fichier Minimal.c
. Passez par les étapes ci-dessous.
- Initialisez vos points d'accès dans la fonction
EVENT_USB_Device_ConfigurationChanged
. Adaptez le code se trouvant dans la même fonction du fichierKeyboard.c
de la démonstrationKeyboard
. - Ecrivez une fonction de gestion du point d'accès entrant, vous en trouvez un exemple dans le fichier
Keyboard.c
de la démonstrationKeyboard
. N'oubliez pas d'appeler cette fonction dans la boucle infinie du programme principal. - Ecrivez une fonction de gestion du point d'accès sortant, vous en trouvez un exemple dans le fichier
Keyboard.c
de la démonstrationKeyboard
. N'oubliez pas d'appeler cette fonction dans la boucle infinie du programme principal.
Compilez et téléchargez. Pour pouvoir tester il vous faut un programme PC fonctionnel.
Programmation de l'ATmega328p
Application PC
L’objectif est d’utiliser la bibliothèque USB libusb-1.0
pour écrire un programme C permettant de récupérer des informations de votre périphérique USB.
Un manuel complet de la bibliothèque est disponible [1]. Vous pouvez aussi trouver un résumé de la bibliothèque [2]. Pour cette utilisation assez basique nous utiliserons les fonctions de communication bloquantes.