Étape 6: Comprendre le code source du firmware
Dans le fichier zip « Périphérique HID générique PIC18F » inclus avec cet article, vous trouverez un firmware prêt-à-go complet pour le PIC18F4550.Il suffit de dézipper le fichier dans votre répertoire de projet MPLAB préféré et puis utilisez MPLAB pour ouvrir le projet.
J’ai séparé les fichiers source et les fichiers d’en-tête dans le code, que vous devriez regarder et ensuite les parties plus génériques de la pile de Microchip (stockés dans les sous-répertoires « stack USB » dans le navigateur de projet).
Les fichiers dans les répertoires « stack USB » sont intéressantes, mais pour y aller rapidement vous ne devrait pas inquiéter les aspects complexes du code jusqu'à ce que vous êtes familiarisé avec les niveaux supérieurs.
Puisque le VID/PID et le reste de l’information de l’énumération est déjà préparé, vous devriez commencer en effectuant un build-tout sur le projet et puis vous téléchargez le firmware qui en résulte sur votre PIC18F. Bien sûr, vous aurez besoin d’un environnement de construction sain d’esprit pour que cela fonctionne, mais il y a beaucoup de ressources par l’intermédiaire de Google si vous avez des problèmes avec votre environnement.
Essayez quelques exemples simples pour s’assurer que tout est ok avant le rechargement de ce projet et essayer de nouveau.
Le firmware fournit 3 commandes :
- 0 x 80 - activer/désactiver la LED
- 0 x 81 - lire l’état de l’interrupteur
- 0 x 82 - lire l’état de la LED
Le code qui exécute ces commandes se trouve dans le fichier de source main.c dans la fonction ProcessIO(). Cette fonction est chargée de déterminer la commande désirée et ensuite envoyer et recevoir des données selon qu’il conviendra. C’est assez simple puisque la pile USB prend en charge toute la complexité sous-jacente ; prendre un coup d’oeil au code source et vous verrez comment de simples, c’est vraiment. La vérification seulement appoint effectuée par la fonction est de voir si l’appareil est dans un « état configuré » ; Cela signifie que le périphérique est connecté à un hôte et énumération a été un succès. La fonction principale appelle simplement la pile USB pour effectuer toutes les tâches de bas niveau périphérique, puis la fonction ProcessIO maintes et maintes fois. Il est possible de le faire en utilisant les interruptions plutôt qu’une boucle, mais dans ce firmware je l’ai ai gardé aussi simple que possible. Pour comprendre un peu plus sur le processus d’énumération jetez un oeil à usb_descriptors.c qui contient les informations qui sont passées à l’hôte lorsque l’appareil est branché. Dans la source, vous trouverez l’information VID et PID pour l’appareil, mais aussi une série de descripteurs de configuration qui expliquent à l’hôte, quel type de l’appareil a des interfaces et les fonctionnalités des interfaces. Les « extrémités » sont des connecteurs pour les « tuyaux » décrits précédemment. Il y a aussi certaines chaînes qui décrivent le fabricant et le produit textuellement. Windows utilise généralement ces chaînes lors de l’identification des périphériques USB. Comprendre le processus de recensement et les formats de descripteur est assez complexe et est couverte par les différentes spécifications USB ainsi qu’un grand livre par Jan Axelson appelé « USB Complete - tout ce que vous devez développer des périphériques USB personnalisées » (ISBN 978-1931448086). Si vous appréciez cet article et que vous souhaitez obtenir plus sérieux au sujet de USB je recommande vivement obtenir une copie du livre, il certainement m’a aidé quand j’ai appris. Dans l’ensemble, le firmware est assez simple, suffit de se lever et courir communiquer vers et depuis l’hôte est inclus. Évidemment, vous pouvez faire cela aussi complexe que vous le souhaitez, mais pour l’application du présent article (se tu vas avec USB), il y a beaucoup d’expérimenter avec.