Réalisation d`un fichier bootloader pour le 18F4550
Transcription
Réalisation d`un fichier bootloader pour le 18F4550
Réalisation d'un fichier bootloader pour le 18F4550 Aller sur http://www.laurentclaude.fr/articles/pic-et-usb/101-le-bootloader-usb-diolan.html Les sources nécessaires à la réalisation du fichier de boot sont ici ou cliquer ici Dézipper bootloader-0.2.2 Le répertoire 'bin' : contient les programmes pour PC. L'exécutable permettant d'encoder ("encoder.exe") vos applications et l'exécutable ("fw_update.exe") pour effectuer le téléchargement de vos applications. Le répertoire 'encoder' : contient le code source du programme PC d'encodage. Le répertoire 'fw' : contient les codes source (en Assembleur) du bootloader. Le répertoire 'fw_update' : contient le code source du programme PC de communication Le répertoire 'interface' : contient un fichier .h ???? Réalisation d'un fichier bootloader 1 Thierry Lancelot Test avec un Pic 18F4455 Créer un dossier par exemple boot4455usb Positionner tous les fichiers du répertoire 'fw' dans le dossier boot4455usb Éviter le dossier 'Mes documents ', trop d'arborescence peut provoquer des erreurs. Télécharger et installer MPLAB, j'utilise pour ce tuto la version V8.46 . Archives Lancer MPLAB Demander Project > Project Wizard.... Cliquez sur Suivant : Réalisation d'un fichier bootloader 2 Thierry Lancelot Sélectionner le type de PIC ici un 18F4455 Cliquez sur Suivant Choisir MPASM Cliquez sur Suivant Réalisation d'un fichier bootloader 3 Thierry Lancelot Lors de cette étape, il faut positionner le projet dans le dossier boot4455usb Sélectionner Browse... Donner un nom de fichier facile à retenir exemple : boot4455 J'ai positionné le projet dans C:\boot4455usb Ajouter tous les fichiers nécessaire au projet : Utiliser Add>> Cliquez sur Suivant Réalisation d'un fichier bootloader 4 Thierry Lancelot Cliquez sur Terminer Les fichiers se positionnent en fonction de leurs extensions : Pour que la compilation s'effectue sans erreur il est nécessaire d'indiquer les options de compilation. Sélectionner "Project / Build options / Project", Dans "MPASM / C17 / C18 Suite" Cocher l'option "Extended Mode" Réalisation d'un fichier bootloader 5 Thierry Lancelot Il est maintenant possible d'effectuer une compilation pour vérifier que tout se passe bien : Normalement, vous obtenez un BUILD SUCCEEDED Cependant , le fichier boot18F4455.hex ne fonctionne pas. Il y a des erreurs à corriger. Les corrections sont indiquées dans le dossier de LaurentClaude : boot.asm : faire attention a laisser l'utilisation des Instruction étendues à ON (XINST = ON), et veillez à la protection du code (CPx, WRTx, EBTRx). Le fichier boot.asm doit être corrigé. Il est indispensable d'intervertir les lignes 146 et 147, voici le code corrigé : Réalisation d'un fichier bootloader 6 Thierry Lancelot usb_desc.inc : lignes 22 et 25, vous devrez renseigner vos propres identifiants. Si vous n'en avez pas vous pouvez réutiliser - a titre expérimental - ceux de Microchip™, mais attention si vous souhaitez diffuser votre produit il vous faudra des Vid et Pid officiels. Vid Microchip : 04D8 Pid : FD0B usb_desc.asm : lignes 138 et suivantes, vous pouvez personnaliser le nom du fabricant et du produit. Notez le caractère ";" en ligne 142, il est là pour écourter la chaîne de caractères. Il semble que si la chaîne est plus grande on observe au moins un bug, si ce n'est un plantage. A vérifier ! xtea.asm : ligne 50, se trouve le code qui protège vos transferts. Il est important de le personnaliser, vous devrez renseigner une suite de 16 octets. Notez bien votre code, il vous sera nécessaire lorsque vous crypterez vos firmware-application. J'ai lu a certains endroits sur la toile des difficultés avec les caractères minuscules, donc si vous rencontrez des problèmes : passez vos lettres en majuscules. Le choix du codage pour ce fichier d'exemple est "0123456789ABCDEF" io_cfg.inc : dé-commentez ou commentez la ligne 23 pour l'utilisation ou non de l'allumage d'une LED pour indiquer le fonctionnement du bootloader. Lignes 26 et 27 renseignez le port et la ligne sur laquelle votre LED est connectée. A chaque démarrage du PIC (reset ou autre), le bootloader vérifie s'il doit lancer le mode bootloader ou lancer l'application. Vous disposez de deux possibilités pour démarrer en mode bootloader : Démarrage par hardware : dans le fichier io_cfg.inc commentez ou non la ligne 31 pour démarrage par un bouton poussoir (par exemple). Le bootloader vérifie l'état de l'entrée configurée en lignes 34 et 35. Démarrage par software : le bootloader vérifie l'état d'un octet contenu en EEPROM, si celui-ci correspond alors le bootloader démarre en mode bootloader. Dans le fichier boot.inc, commentez ou non la ligne 37 pour utiliser ce mode de démarrage, puis ligne 38 indiquez l'adresse en EEPROM où sera enregistré la "marque", et ligne 39 la valeur que devra avoir cette marque pour brancher sur le bootloader. Cette option donne la possibilité a votre firmware-application de démarrer en mode bootloader, pas mal non ? Réalisation d'un fichier bootloader 7 Thierry Lancelot Test avec un Pic 18F4550 Le dossier boot4550usb.zip contient tous les fichiers nécessaires pour un Pic 18F4550. Les bugs ont été corrigés et la configuration est adapté pour un quartz 20Mhz avec le schéma suivant : Le lancement du boot s'effectue avec RB4. En effectuant la manipulation précédente (choisir le Pic18F4550...). Vous obtenez le fichier boot4550.hex à télécharger dans le Pic18F4455 Remarque : il y a un code protect sur le fichier hex... Le Pic programmé est positionné sur la platine d'essai. La liaison USB branché est détecté et Windows (test avec XP) installe automatiquement le pilote HID : N'oubliez pas de valider le mode bootstrap en appuyant sur BP4 au démarrage. Réalisation d'un fichier bootloader 8 Thierry Lancelot Création du programme : J'effectue le projet test1.prj à l'aide de Logipic 18F Configurer les options Quartz 20MHz Le test est très simple : J'effectue l'assemblage de l'organigramme. Inutile d'effectuer la compilation. Demander la visualisation de l'assemblage : Rechercher DEMARRAGE SUR RESET Réalisation d'un fichier bootloader 9 Thierry Lancelot Pour que le programme fonctionne, il est indispensable de le positionner en 0x800 Récupérer ce dossier test1.asm et assembler le avec MPLAB L'assemblage n'est pas possible avec Logipic qui repositionne l'adresse de départ à 0x000 Injection du programme : Créer un dossier par exemple transfert Positionner tous les fichiers du répertoire 'bin' dans ce dossier, rajouter le fichier test1.hex, j'ai crée le fichier batch qui permet de transférer test1.hex dans le pic18F4455. L'injection du programme s'effectue à l'aide de de fw_update.exe, le fichier hex est codé à l'aide de encoder.exe Il doit y avoir correspondance entre le code d'encodage et le code situé en xtea.asm Le fichier batch permet d'encoder test1.hex encoder -e 30313233343536373839414243444546 -ix test1.HEX -ox test1_encoded.hex Puis de le tranférer fw_update -e -w -vid 0x04D8 -pid 0xFD0B -ix test1_encoded.hex Remarques : le codage est codé en ASCII 30 correspond à 0 31 correspond à 1 41 correspond à A etc... Le Vid doit correspondre au Vid défini dans le usb_desc.inc : lignes 22 et 25, Vid Microchip : 04D8 Pid : FD0B Le transfert s'effectue en cliquant sur transfert.batch Immédiatement le programme est transféré et les Leds clignotent... Pour remettre en route en route le bootloader, il faut appuyer sur Bp4... Réalisation d'un fichier bootloader 10 Thierry Lancelot