Colt: Bootloader pour PIC18F


Peu après le lancement de la famille PIC18F, Microchip rendit disponible un bootloader pour PIC16F/PIC18F. Ce bootloader comporte des caractéristiques intéressantes. Il tient dans l'espace réservé au secteur "boot" qui peut être protégé indépendemment du code d'application. Il supporte aussi une vaste gamme de microcontrôleur PIC à des fréquences d'exécution et vitesse de transmission variées, ce que je n'avais pas trouvé dans d'autres "bootloaders". Et en plus, il est gratuit!

Cependant, ce "bootloader" ne contient pas toutes les fonctions que je désire. Je veux pouvoir transférer le contrôle automatiquement au code application si au démarrage le "bootloader" n'était pas stimulé. Je veux aussi pouvoir reprogrammer le microcontrôleur en une seule opération (le "bootloader" de Microchip demande d'effacer toute la mémoire flash avant de reprogrammer). Finalement, je veux aussi pouvoir modifier le registre de Config et les données EEPROM à travers l'application du "bootloader".

C'est ce qui m'a mené à créer le "bootloader" Jolt. Le "bootloader" Jolt comprend deux composantes: une application fonctionnant sur un PC ou une station Unix et la partie du "firmware" (bloc boot) se trouvant sur le microntrôleur. Peu de temps après le lancement de Jolt, j'ai reçu plusieurs demandes de fournir une version qui ne requerrerait pas le Java Runtime Environment. J'ai récemment fait le port de l'application en Visual C++, ce qui permit à Colt de voir le jour.


Nouvelles

Le 27 janvier 2007: Lancement de la version 0.6b de l'application bootloader. Les paramètres de programmation de certains modèles PIC dont le bloc boot est de 2 ko ont été revus suite à une série de tests. Les modèles touchés par cette modification sont les suivants: PIC18F2585, PIC18F2680, PIC18F4585, PIC18F4680, PIC18F2420, PIC18F2520, PIC18F4420, PIC18F4520, PIC18F2455, PIC18F2550, PIC18F4455, PIC18F4550.

Le 5 juillet 2006: Ajout de plusieurs versions de firmware pour supporter l'oscillateur interne, le 4xPLL, le deuxième port USART sur certains modèles et les modes "extended" et "legacy". Mise au point du firmware pour les modèles possédant un bloc boot de 2 ko. Mise-à-jour de la documentation.

1er décembre 2005: Lancement de la version 0.6 de l'application bootloader. Introduit la possibilité de démarrer l'application en mode de commande (non-interactif) en exécutant l'application à partir de la ligne de commande. Ajout d'un dialogue pour la présentation et la modification des bits de configuration. Support des modèles PIC requérants des blocs d'écriture de 32 et 64 octets.

12 mars 2005: Lancement de la version 0.5 de l'application bootloader et de la version 0.12 du firmware pour les modèles ayant un bloc boot de 2048 octets. Correction d'un problème de lecture des bits Config pour les fichiers HEX générés par le compilateur HI-TECH.

20 août 2004: Lancement de la version 0.4 de l'application bootloader Colt. Ajout du menu Read et Save. Correction de quelques problèmes. Ajout de quelques modèles.

12 août 2004: Lancement de la version 0.3 de l'application bootloader Colt. Ajoute le support de nombreux PIC y compris le PIC18F1220 et PIC18F1320. Corrige le problème du fichier de configuration PicDevices.properties. Ajoute un effet sonore lorsqu'une opération est terminée. Ajoute la possibilité de programmer les données EEPROM et le bits Config indépendemment de la mémoire flash.

25 mai 2004: Lancement de la version 0.2 de l'application bootloader Colt. Corrige probl&egr.ve;me de transfert sous Windows XP, introduit commande de vérification, ajout de clés d'accélération et simplification des dialogues d'erreur.

14 mai 2004: Lancement de la version 0.1 de l'application bootloader Colt. Compatible avec le firmware de Jolt.


Eléments requis


Caractéristiques du bootloader

Le bootloader Colt est basé sur le firmware du bootloader PIC16F/18F de Microchip. Le firmware du bootloader peut être écrit dans le bloc boot des microcontrôleurs de la famille PIC18F. Ce bloc boot peut être protéger de fa¸on indépendante du code d'application. Une particularité de ce bootloader est qu'il détecte automatiquement la fréquence d'horloge et la vitesse de transfert. Il n'est donc pas nécessaire d'avoir plusieurs .hex différents pour chaque combinaison de fréquence d'horloge et vitesse de transfert. J'ai de plus modifier le bootloader original de Microchip afin que le bootloader quitte le mode boot après un délai de 2 secondes s'il ne reçoit pas de commande boot. De cette façon, le bootloader est complètement transparent au code d'application.

J'ai de plus conçu une application bootloader pour faciliter le téléchargement et supporter les fonctions suivantes:

Voici un écran de l'interface de l'application bootloader Colt:


Téléchargement

Application bootloader Colt v0.6b (Windows)


Utilisation

Pour utiliser le bootloader Colt, il faut suivre les étapes suivantes:

Firmware Modèles PIC Notes
bootload.hex PIC18F242/252/442/452,
PIC18F6390/6490/8390/8490,
PIC18F6520/6620/6720/8520/8620/8720,
PIC18F248/258/448/458,
PIC18F2331/2341/4331/4341,
PIC18F2439/2539/4439/4539
Bloc boot 512 octets
bootloaduart2.hex PIC18F6390/6490/8390/8490,
PIC18F6520/6620/6720/8520/8620/8720
Bloc boot 512 octets,
USART2
bootload1x20.hex PIC18F1220/1320 USART sur Port B
bootload2k.hex PIC18F2220/2320/4220/4320,
PIC18F2410/2510/2515/2610/4410/4510/4515,
PIC18F2420/2520/4420/4520,
PIC18F2455/2550/4455/4550,
PIC18F2525/2620/4525/4620,
PIC18F6525/6621/8525/8621,
PIC18F6585/8585/6680/8680
Bloc boot 2 ko,
Legacy Mode
bootload2kuart2.hex PIC18F6525/6621/8525/8621,
PIC18F6585/8585/6680/8680
Bloc boot 2 ko,
USART2
bootload2k_e.hex PIC18F2410/2510/2515/2610/4410/4510/4515,
PIC18F2420/2520/4420/4520,
PIC18F2455/2550/4455/4550,
PIC18F2525/2620/4525/4620
Bloc boot 2 ko,
Extended Mode
bootloadint.hex PIC18F2220/2320/4220/4320,
PIC18F2455/2550/4455/4550*,
PIC18F2525/2620/4525/4620*
Bloc boot 2 ko,
Oscillateur interne,
4xPLL*,
Legacy Mode
bootloadint_e.hex PIC18F2455/2550/4455/4550,
PIC18F2525/2620/4525/4620
Bloc boot 2 ko,
Oscillateur interne,
4xPLL,
Extended Mode

Table 1 - Sèlection du firmware

Le mode "Delayed" est le seul mode de supporté. Le microcontrôleur tombe en mode boot au démarrage pendant deux secondes. Si aucune command boot n'est reçue, le bootloader redonne le contrôle au code d'application (saute à l'adresse 0x0200 ou 0x0800 dépendamment du firmware utilisé).

Colt peut être appelé à partir de la ligne de commande. Si la forme suivante est utilisée:

Colt [fichier]
Le fichier spécifié en paramètre est téléchargé en mode non-interactif.

Deux fichiers HEX (blink-led.hex et blink-led2k.hex) sont inclus pour fin de test lors de l'installation de Colt. blink-led2k.hex est fourni pour tester les PIC ayant un bloc boot de 2 ko. Vous pouvez télécharger de programme avec l'application boot. Les LED connectés aux broches B0 to B3 devraient commencer à clignoter une fois que le code boot aie passé le contrôle au code application.

J'ai l'intention de supporter le bootloader Colt de façon active. S'il y a d'autres modèles PIC que vous aimeriez que je supporte ou vous avez des suggestions de nouvelles fonctions, envoyez-moi un courriel.


Comment relocaliser le code d'application

Le code applicatif doit être relocalisé à l'adresse 0x0200 ou 0x0800 dépendamment du modèle et du firmware utilisé. L'adresse de début du code applicatif dépend de la taille du bloc boot. Les premiers modèles PIC18F avaient un bloc boot de 512 octets. La plupart des nouveaux modèles ont un bloc boot de 2048 octets. Pour déterminer la taille du bloc boot de votre microcontrôleur, vous pouvez consulter le fichier PicDevices.properties.

Si vous ne comptez pas protéger le bloc boot, il vous est toujours possible de relocaliser le code applicatif à l'adresse 0x0200 même avec les modèles ayant un bloc boot de 2048 octets, mais il faudra mettre l'entrée appropriée à jour dans le fichier PicDevices.properties et il faudra utiliser le firmware approprié (bootload.hex).

CCS

Pour les modèles ayant un bloc boot de 512 octets, ajoutez les directives suivantes dans votre code source .c:

#build(reset=0x200)
#build(interrupt=0x208)
#org 0x0000,0x01ff
void bootloader() {
#asm
  nop
#endasm
} // Reserve l'espace pour le bootloader

Pour les modèles ayant un bloc boot de 2048 octets, ajoutez les directives suivantes dans votre code source .c:

#build(reset=0x800)
#build(interrupt=0x808)
#org 0x0000,0x07ff
void bootloader() {
#asm
  nop
#endasm
} // Reserve l'espace pour le bootloader

Remplacer 0x200 et 0x208 par 0x800 et 0x808 pour les modeles utilisant un bloc boot de 2048 octets.

SDCC

Utilisez la directive du compilateur --ivt-loc 0x200.

PICC-18 d'HI-TECH

Durant l'étape du link, utilisez la directive du linker -a200h.

Microchip C18

Editez le script du Linker 18f452.lkr afin d'ajouter une entrée pour le bloc boot. Pour les modèles utilisant 2 ko pour le secteur boot tel le PIC18F4620, utilisez le script du Linker 18f4620.lkr.

Copiez ou générez les objets de démarrage dans le répertoire MCC18\lib. Pour générer les objets, consultez la fin de la présente section.

Dans le script du linker, changez la référence à l'objet de démarrage. Utilisez c018_200.o ou c018i_200.o pour les microcontrôleurs ayant un bloc boot de 512 octets. Utilisez c018_800.o, c018_800_e.o, c018i_800.o ou c018i_e_800.o pour les microcontrôleurs ayant un bloc boot de 2 ko (les objets ayant _e dans leur nom utilise le mode étendu (extended mode).

Aussi, assurez-vous de ne pas avoir défini des sections de code absolues dans votre code source qui utilisent des adresses du bloc boot. Par exemple, la directive suivante:

#pragma code InterruptVectorHigh = 0x08

doit être changée pour:

#pragma code InterruptVectorHigh = 0x208

ou pour les modèles ayant un bloc boot de 2 ko:

#pragma code InterruptVectorHigh = 0x808

ou, à partir de la version 3.0:

#pragma code low_vector = 0x18

doit être changée pour;

#pragma code low_vector = 0x218

ou pour les modèles ayant un bloc boot de 2 ko:

#pragma code low_vector = 0x818

Pour générer les fichiers objets C18 de démarrage:

Naviguez au répertoire où le MCC18 a éteacute; installé (i.e.: C:\MCC18), puis dans src\traditional\startup

Il y a 3 fichiers. Vous pouvez tous les changer ou simplement ceux que vous utilisez.

Trouvez la ligne suivante:

#pragma code _entry_scn=0x000000

Changez la pour:

#pragma code _entry_scn=0x000200

ou

#pragma code _entry_scn=0x000800

dépendemment de la taille bloc boot.

Ensuite, naviguez au répertoire supérieur (C:\MCC18\src\traditional) et exécutez le fichier batch makestartup.bat. Ce script copiera les librairies dans le répertoire approprié (C:\MCC18\lib).

PIC Basic Pro

Ajouter la ligne suivante:
DEFINE  RESET_ORG  200h  
ou
DEFINE  RESET_ORG  800h  

Le fichier include 18F452.inc (ou le fichier include approprié) doit aussi être modifié. Dans la première ligne '__config', la directive "XT" doit être remplacé par "HS" si les bits de configuration du PIC ne sont pas modifiés pour utiliser le mode d'oscillateur XT.


Description des menus

Le menu de l'application Colt est accessible en cliquant sur l'icône de Colt dans le coin supérieur droit de la fenêtre principale de Colt.

Load File...
Charger un fichier hex dans la tampon de mémoire. Si l'option Reload before Program est sélectionnée, ce fichier est rechargé avant chaque exécution de la commande Programmation.

Edit Config...
Edition des bits de configuration. Désélectionner l'option Reload before Program pour pouvoir reprogrammer les bits de configuration selon les nouvelles valeurs entrées dans ce dialogue.

Program
Programmer le PIC en utilisant le contenu du tampon de mémoire. Si l'option Program Data EEPROM est sélectionnée, les données EEPROM sont aussi programmées. Si l'option Program Config est sélectionnée, les bits Config sont aussi programmés. Si l'option Reload before Program est sélectionnée, le contenu du tampon de mémoire est mis à jour avec la plus récente version du fichier affiché sur la barre titre de la fenêtre avant l'exécution de la commande. Si l'option Reset after Program est sélectionnée, le PIC redémarre automatiquement après le téléchargement.

Program Data EEPROM
Programmer les données EEPROM du PIC en utilisant le contenu du tampon de mémoire. Si l'option Reset after Program est sélectionnée, le PIC redémarre automatiquement après le téléchargement.

Program Config
Programmer les bits Config du PIC en utilisant le contenu du tampon de mémoire. Si l'option Reset after Program est sélectionnée, le PIC redémarre automatiquement après le téléchargement.

Verify
Vérifie que le "firmware" sur le microcontrôleur correspond au contenu du fichier chargé en mémoire.

Run
Redémarrer le microcontrôleur. Il n'est pas nécessaire d'exécuter cette commande aprés Programmation si l'option Reset après programmation est s&eactionnée.

Options

Reload before Program
Lorsque cette option est sélectionnée, l'application bootloader recharge le programme affiché sur la barre titre de la fenêtre avant l'exécution de la commande Program.

Reset after Program
Lorsque cette option est sélectionnée, l'application bootloader redémarre le PIC après l'exécution de la commande Program.

Program Config
Lorsque cette option est sélectionnée, l'application bootloader programme les bits Config en plus du code application lorsque la commande Program est exécutée.

Program EEPROM Data
Lorsque cette option est sélectionnée, l'application bootloader programme les données EEPROM en plus du code application lorsque la commande Program est exécutée.

Baudrate
Spécifie la vitesse de transmission. Le firmware de Colt détecte automatiquement la vitesse de transmission telle que configurée dans Colt. A une fréquence de 20 MHz, une vitesse de 115,200 devrait être possible. Pour un cristal de 4 ou 8 MHz, la vitesse devrait être plus basse. Par exemple, si on utilise l'oscillateur interne RC sur un PIC18F1320 à 8 MHz, le taux de transfert maximum est de 38,400. Ma recommandation est d'essayer un baudrate de 115 200 et diminuer graduellement si le transfert ne s'effectue pas sans problème.


Information sur l'origine du bootloader Colt pour PIC18F

Le firmware du bootloader Colt est basé sur le firmware du bootloader de Microchip conçu par Ross Fosler. Le firmware de Microchip et l'application de bootloader correspondante se trouvent sur l'archive de la note d'application AN851.

Le firmware du bootloader et l'application du bootloader sont décrits dans cette note d'application. Le code source est disponible dans l'archive ZIP sur cette page.


Microcontrôleurs testés

Voici la liste des modèles PIC testés avec le bootloader Colt pour PIC18F.

Le firmware du bootloader Colt est générique et devrait pouvoir fonctionner avec d'autres modèles PIC.

Le support de nouveaux microntrôleur PIC peut être ajouté en modifiant le fichier PicDevices.properties. Chaque entrée a le format suivant:

<DEVICE_NAME>=<DEVICE_ID>,<LO_PROGRAM>,<HI_PROGRAM>,<LO_CONFIG>,<HI_CONFIG>,<LO_EEPROM>,<HI_EEPROM>,<READ>,<WRITE>,<ERASE>

où DEVICE_NAME est utilisé pour décrire le nom du microcontrôleur, DEVICE_ID pour identifier le Device ID, LO_PROGRAM et HI_PROGRAM pour définir l'espace programme (adresse basse et haute) excluant le bloc boot. LO_CONFIG et HI_CONFIG spécifie les adresses où se retrouvent les bits de Configuration et LO_EEPROM and HI_EEPROM spécifient les adresses des données EEPROM. DEVICE_NAME est sous forme décimale tandis que les autres champs sont sous forme hexadécimale.

Par exemple, l'entrée suivante décrit le PIC18F452:

PIC18F452=33,200,7fff,300000,30000d,0,ff,1,8,64

Cette entrée informe l'application bootloader que le PIC avec un Device ID de 33 est un PIC18F452 avec un espace programme débutant à l'adresse 0x0200 et se terminant à l'adresse 0x7FFF. Ses bits de Configuration se retrouvent entre les adresses 0x300000 et 0x30000D et ses données EEPROM entre les adresses 0 et 0xFF. Le PIC utilise un bloc de lecture de 1 octet, un bloc d'écriture de 8 octets et un bloc d'effacement de 64 octets.


Pour me contacter

Pour me contacter, envoyez un courriel à l'usager mdubuc au domaine freeshell.org.

Nombre de visiteurs: 29882

Dernière mise-à-jour: Le 27 janvier 2007

PIC est une marque déposée de Microchip Technology Inc.