Il s’agit du point le plus délicat du tutorat : la réalisation d’une interface USB de classe "Mass Storage" étendue.
Commencez par un test basique de la clef : faire clignoter une ou plusieurs LED. Avec un peu de soudure, vous pouvez aussi tester les boutons.
Pour le programme de test, vous pouvez partir de ce projet : TestLED.tgz.
La seconde étape est de tenter de communiquer avec les mémoires SPI. Lisez la documentation de la mémoire (DS-45DB641E-027-1385809.pdf). Pour
vous faciliter la vie une micro-bibliothèque de gestion des mémoires AT45DB641E est donnée : AT45DB641E.tgz. Récupérez les octets
d’identification des mémoires. Utilisez les LED de la carte pour communiquer les octets reçus.
Vous pouvez enfin passer à l’utilisation de la bibliothèque LUFA pour implanter un périphérique USB de classe Mass Storage.
Téléchargez la dernière version de la bibliothèque LUFA http://www.fourwalledcubicle.com/LUFA.php.
Créez un répertoire PolytechLille au même niveau que les répertoires Demos et Projects. Le principe serait
de recopier la démonstration de périphérique USB bas niveau MassStorage dans le répertoire PolytechLille et
de l’adapter pour le périphérique du tutorat. Mais, pour vous aider, une version modifiée de cette démonstration MassStorage
est donnée : MassStorageSimple.tgz. Dans cette version, vous n’avez à modifier que les fichiers Lib/DataflashManager.h
et Lib/DataflashManager.c.
Une tendance naturelle est de créer un tableau pour stocker une page mémoire mais avec un ATMega16u2, il vaut mieux éviter : ce microcontrôleur
ne possède que 512 octets de mémoire vive. Même allouer un tableau pour une page de 256 octets n’est pas une bonne idée sachant que la bibliothèque
LUFA consomme déjà de la mémoire. Vous écrirez donc les octets un à un dans le tampon d’écriture des mémoires et vous lirez les octets d’une page mémoire un à un.
La fonctionnalité supplémentaire est décrite dans la section 5.4.
Vous allez modifier le projet pour ajouter une interface "spécifique vendeur" et des points d’accès de type interruption.
Il faut un point d’accès "OUT" (sens hôte vers périphérique) et un point d’accès "IN" (sens périphérique vers hôte).
La déclaration des interfaces et des points d’accès se font dans les fichiers Descriptors.c et Descriptors.h.
La gestion des points d’interruption se fait dans l’autre source .c.
La démonstration Keyboard comporte déjà le code pour déclarer et exploiter des points d’accès de type interruption.
Inspirez-vous en (cherchez les fonctions Endpoint_ConfigureEndpoint, Endpoint_SelectEndpoint, etc).
N’hésitez pas à consulter la documentation de la bibliothèque LUFA sur Internet.
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 :
dfu-programmer atmega16u2 erase dfu-programmer atmega16u2 flash MassStorage.hex dfu-programmer atmega16u2 reset
Pour tester le bon fonctionnement de votre carte, procédez comme suit :