Page 1 sur 4
Diolan™ propose un joli bootloader USB pour PIC de la série des 18F4550 et compagnie.
Celui-ci permet la mise à jour de vos firmwares 'application' via le port USB (périphérique HID Standard), il comprend un cryptage XTEA de ces fichiers, il est disponible pour Linux et pour Windows™ et pour parfaire le tout il est distribué gratuitement sous licence GNU-GPL !
Pendant longtemps il est resté peu documenté, je vous propose ici mon tuto pour réussir sa mise en œuvre : du téléchargement jusqu'au fonctionnement optimal, en passant par une belle correction de bug : c'est ici et en Français.
1- Introduction :
Voici comment Diolan™ décrit son logiciel (traduction libre, arrangée et partielle de cette page) :
Ce bootloader vous permet de programmer une nouvelle image du firmware-application dans la puce en utilisant le port USB de votre périphérique.
- Le Bootloader est pleinement conforme à la spécification USB pour périphériques d'interface utilisateur (HID) sans installation de drivers spécifiques.
- Un algorithme de chiffrement XTEA est utilisé pour protéger (crypter) les fichiers firmware mis à jour.
- Le code du Bootloader est protégé en écriture et ne peut pas être écrasé par le firmware.
- Le mode de Mise à jour est sélectionné par action sur le hard (ex: un poussoir) et/ou par soft.
Le bootloader est petit et reste dans les 2.048 premiers octets de la mémoire programme du micro-contrôleur. Il entre en fonction au démarrage du PIC (ou sur RESET) et est capable de charger entièrement un programme d'application dans la mémoire d'un processeur. Quand le Bootloader est 'installé', il ya deux modes distincts de fonctionnement : le mode mise à jour et le mode 'utilisation'. Il utilise une marque en EEPROM et/ou un commutateur matériel pour déterminer le mode de fonctionnement.
En mode de mise à jour, le Bootloader utilise le port USB du PIC pour communiquer avec le PC et charger le nouveau firmware. Une fois la programmation faite, le Bootloader passe en mode utilisateur : le processeur est réinitialisé et l'exécution du nouveau code commence.
En mode utilisation, le Bootloader redirige simplement les vecteurs (reset et interruptions) vers ceux de l'application utilisateur.
Le bootloader de Diolan est vraiment une très bonne solution. Il permet de distribuer simplement des mises à jours aux utilisateurs finaux, et ceci sans compromettre la protection de notre firmware (l'application). Le firmware est crypté par un code que seul le PIC et le développeur connaissent.
"Sur le papier" tout semble parfait, mais en fait il y'a quelques coquilles a corriger dans le code, il y'a que très peu de temps que Diolan a publié une notice, en tout cas assez difficile d'accès, et pour couronner le tout il n'y a pas de support de leur part.
A l'affût sur ce bootloader depuis pas mal de temps, j'ai réussi a glaner suffisamment d'informations pour maintenant retranscrire une synthèse de mon expérience, qui vous servira je l'espère. C'est ma façon de contribuer au libre.
2- Récuppérer les fichiers :
Rendez vous sur le site Diolan, et plus particulièrement sur la page de téléchargement du bootloader et récupérez le 'zip' de votre choix (à l'heure ou j'écris cet article c'est la version 0.2.2 qui est disponible) et décompressez-le où bon vous semble.
Ce que contient ce package (les versions Zip et Tar ont le même contenu) :
- Le répertoire 'bin' : contient les programmes pour PC. Je détaillerais dans cet article leurs utilisations.
L'exécutable permettant d'encoder ("encoder.exe") vos firmwares-application, et l'exécutable ("fw_update.exe") pour effectuer la mise à jour de vos firmwares-application.
- Le répertoire 'encoder' : contient le code source du programme PC d'encodage de firmwares-application.
Je ne décrirais pas son fonctionnement dans cet article (cela fera peut-être l'objet d'un autre article, un jour...).
- Le répertoire 'fw' : contient le code source (en Assembleur) du firmware-bootloader à griller dans le PIC.
C'est principalement ici que nous aurons a œuvrer (corriger un bug, personnaliser le code de cryptage,...).
- Le répertoire 'fw_update : contient le code source du programme PC permettant de communiquer avec le firmware-bootloader.
Je ne décrirais pas son fonctionnement dans cet article (cela fera peut-être l'objet d'un autre article, un jour...).
- Le répertoire 'interface' : contient un fichier .h que je n'ai pas encore démystifié...