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