Jolt: 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" (secteur boot) se trouvant sur le microntrôleur.


Nouvelles

25 août 2005: Lancement de la version 1.2 de l'application bootloader. Offre maintenant la possibilité de télécharger directement de la ligne de commande.

12 mars 2005: Lancement de la version 1.1 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.

17 août 2004: Lancement de la version 1.0 de l'application bootloader et de la version 0.12 du firmware pour PIC18F1X20. Ajout du support de multiples modèles PIC18F ainsi que la spécification des bits de Configuration pour chaque modèle à l'aide du fichier PicDevices.properties.

14 mai 2004: Lancement de la version 0.1 de l'application de bootloader Colt. Cette version compacte ne requiert pas le Java Runtime Environment. Voir la page Web Colt.

18 novembre 2003: Lancement de la version 0.9 de l'application bootloader. Corrige le problème d'allocation de port (pour vrai). Nouvelle méthode de détection des PIC18FXX39. Modification de la configuration des bits de Config des nouveaux modèles.

18 septembre 2003: Lancement de la version 0.8 de l'application bootloader. Corrige le problème de chargement de données EEPROM. Corrige le problème d'allocation de port. Traduction de l'interface au français. Support de plusieurs nouveaux modèles.

30 août 2003: Lancement de la version 0.7 de l'application bootloader. Corrige le problème de démarrage pour les modèles PIC18FXX20. Ajustement des bits de Config pour les modèles PIC18FXX20.

23 juillet 2003: Ajout d'un schéma montrant comment interfacer un PIC muni du firmware du bootloader à un PC.

20 juillet 2003: Lancement de la version 0.6 de l'application bootloader. Ajout d'un menu pour accéder aux fichiers récents. Correction du problème avec le filtre du dialogue de chargement de fichiers. Ajout d'un fichier de configuration PIC. Création d'un installateur.

27 janvier 2003: Lancement de la version 0.5 de l'application bootloader. Corrige problème sous Linux. Corrige problème d'identification de Device ID pour la famille PIC18FXX8.

10 décembre 2002: Lancement de la version 0.4 de l'application bootloader. L'application comporte un menu d'aide.

2 décembre 2002: Lancement de la version 0.12 du firmware du bootloader. Il s'agit d'un changement mineur qui résoud les problèmes d'interaction avec certains contrôleurs de moteur (CCP1) dans le mode boot.

22 novembre 2002: Lancement de la version 0.3 de l'application bootloader. Corrige problème avec le chargement automatique et gestion de port. Test la version Linux. Ajout de texte d'aide dans la fenêtre Edit Config. Ajout de documentation pour installation sur Linux et description de comment relocaliser le code.

16 novembre 2002: Ajout d'une section de description des menus.

15 novembre 2002: Lancement de la version 0.2 de l'application bootloader et version 0.11 du firmware du bootloader. Ajout d'un délai de 2 seconde au démarrage. Ajout des options de chargement automatique et de l'application d'un reset après le téléchargement.

8 novembre 2002: Première version.


Eléments requis


Caractéristiques du bootloader

Le bootloader Jolt est basé sur le firmware du bootloader PIC16F/18F de Microchip. Le firmware du bootloader peut être écrit dans le secteur boot des microcontrôleurs de la famille PIC18F. Ce secteur 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 quelques exemples de l'interface de l'application bootloader Jolt:


Téléchargement

A partir de la version 1.1, Jolt requiert le JRE/J2SE 1.5 ou plus récent.

Application bootloader Jolt v1.2 et firmware v0.12 pour PIC18F1X20, firmware v0.12 pour modèles bloc boot 2 ko et firmware v0.12 pour autres modèles PIC18F (Windows)

Application bootloader Jolt v1.2 et firmware v0.12 pour PIC18F1X20, firmware v0.12 pour modèles bloc boot 2 ko et firmware v0.12 pour autres modèles PIC18F (Linux/Unix/Macintosh)


Directives d'installation

L'application de bootloader Jolt est une application Java. Pour pouvoir l'exécuter, il faut au préalable installer le JRE ou le J2SDK de ainsi que le "Java Communciations API" de Sun. Vous trouverez le JRE et le J2SDK sur la page Java 2 Platform Standard Edition Download.

Si vous ne planifiez pas faire le développement d'applications Java, je recommende l'installation du JRE (le J2SDK n'est utile que si vous désirez écrire des applications Java).

Le "Java Communications API" est aussi disponible sur le site de Sun sur la page Java Communications API.

Voici les instructions d'installation pour le Java Communications API (cet API ne posède pas de programme d'installation):

Windows

Linux

Sun fournit une version Linux du Java Communications API. Mais cette version n'est compatible qu'avec RedHat AS 3.0 and Java Desktop System 3.0. Pour les autres distributions de Linux, il faut utilisé le pilote RXTX de Trent Jarvi.

Voici la marche à suivre pour installer la version 2.0 du pilote RXTX:

Il est à noter que la version 2.1 du pilote RXTX n'est pas compatible avec Jolt.

Si la version Linux du Sun Java Communications API est installée, l'installation de la librairie RXTX n'est pas requise.

Une fois le JRE et les librairies "Java Communications API/RXTX" installées, vous pourrez installer l'application de bootloader. Sur Windows, lancez l'installateur JoltSetup.exe. Pour Linux, extraire les fichiers Bootloader.jar et bootloader.hex de l'archive Bootloader.zip sur votre disque.

Pour partir l'application de bootloader, exécutez la commande suivante:

Pour Windows:
Pour Windows, démarrez l'exécutable Jolt ou lancez "Jolt PIC18F Bootloader" à partir du menu "Démarrer" si n'avez pas sélectionné l'option "Do not create shortcut" au moment de l'installation.

Pour Linux avec RXTX 2.0:

java -cp Bootloader.jar Bootloader

à partir du répertoire où vous avez installer Jolt.

Pour tous les systèmes d'exploitation, il est possible de télécharger un fichier directement de la ligne de commande en utilisant la commande suivante:

java -cp Bootloader.jar Bootloader [-r | -s] -[b<baud rate>] [fichier]

L'option -r permet le reset du PIC après le téléchargement. L'option -s force le PIC à rester en mode boot après le téléchargement. L'option -h énumère les options qui peuvent être utilisées en mode ligne de commande.


Utilisation

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

Si le mode "Delayed" est actif, 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é).

Si le mode "User" est actif, vous devez fournir y\une façon pour retourner en mode boot en écrivant la valeur 0xFF dans le dernier octet du EEPROM. Autrement, il ne sera pas possible de revenir dans le mode boot.

Un fichier HEX (blink-led.hex) est inclus pour fin de test dans l'archive .zip. 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 ait passé le contrôle au code application.

J'ai l'intention de supporter le bootloader Jolt 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 256 octets. La plupart des nouveaux modèles ont un bloc boot de 1024 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 1024 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

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

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_c.lkr pour ptotéger le secteur boot et rebâtir les objets de démarrage C18 c018.o and c018i.o. Assurez-vous que vous n'avez pas défini d'adresse absolue faisant référence au secteur boot dans votre code d'application. Par exemple:

#pragma code InterruptVectorHigh = 0x08

doit être changé à

#pragma code InterruptVectorHigh = 0x208

ou pour les modèles possédant un bloc boot de 2048 octets:

#pragma code InterruptVectorHigh = 0x808
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

Fichier

Ouvrir fichier Hex...
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.

Enregistrer fichier Hex
Enregistrer le contenu du tampon de mémoire dans un fichier de destination indiqué sur la barre titre de la fenêtre.

Enregistrer fichier Hex sous...
Enregistrer le contenu du tampon de mémoire dans un fichier de destination.

Edition

Config
Edition des bits Config. Les changements sont conservés dans le tampon de m&ecute;moire et peuvent être transférer sur le PIC en utilisant la commande Programmation des bits Config. Notez que lorsque la boîte est crochetée, la valeur du bit Config bit est 1. Par exemple, si le bit CPB is sélectionné, la valeur du CPB est 1 ce qui veut dire que le secteur boot n'est pas protégé.

Données EEPROM
Edition des données EEPROM. Les changements sont sauvés dans le tampon de mémoire et peuvent être actualiser sur le PIC en exécutant la commande Programmation des données EEPROM.

Commande

Lecture
Lire la mémoire du programme, des données EEPROM et des bits de Config et copier cette information dans le tampon de mémoire. Il est possible de voir le résultat de cette lecture dans l'espace réservé à cet effet dans la fenére de l'application bootloader.

Programmation
Programmer le PIC en utilisant le contenu du tampon de mémoire. Si l'option Recharger avant programmation 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 après programmation est sélectionnée, le PIC redémarre automatiquement après le téléchargement.

Programmation Config
Programme les bits Config selon le contenu du tampon de mémoire. Les options Recharger avant programmation et Reset après programmation n'ont aucun effet sur cette commande.

Programmation EEPROM Data
Programme les données EEPROM selon le contenu du tampon de mémoire. Les options Recharger avant programmation et Reset après programmation n'ont aucun effet sur cette commande.

Vérification
Comparer le contenu du tampon de mémoire avec le contenu du microcontrôleur.

Exécution
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.

PropriÉtés

Mode boot
Indique le mode boot sélectionné. Délai est utilsé pour maintenir le PIC dans le mode boot 2 secondes après le démarrage. Contrôlé par le code application indique que le code d'application gère le mode de démarrage du PIC. Ce code doit être capable d'écrire la valeur 0 dans le dernier octet des données EEPROM (adresse 0xff) afin de d'établir le transfert automatique du contrôle au démarrage et 0xff pour rester en mode boot.

Recharger avant programmation
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 Programmation.

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

Enable 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.

Enable 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.

Notez que les touches CTRL-Home, CTRL-End, Page Up et Page Down permettent de naviguer au début, à la fin, à la page suivante et précédente de l'espace réservé pour afficher le contenu de la mémoire flash, des données EEPROM et des bits Config.


Information sur l'origine du bootloader Jolt pour PIC18F

Le firmware du bootloader Jolt 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 la page 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 Jolt pour PIC18F.

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

Jolt supporte actuellement plus de 60 modèles PIC. Le support de nouveaux microntrôleurs PIC peut être ajouté en modifiant le fichier PicDevices.properties. Chaque entrée a le format suivant:

=<DEVICE_ID>,<LO_PROGRAM>,<HI_PROGRAM>,<LO_EEPROM>,<HI_EEPROM>,<CONFIG_BITS>

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 secteur boot. 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 numériques sont sous forme hexadécimale.

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

PIC18F458=67,200,7fff,0,ff,OSCSEN,FOSC20,BORV,BOREN,PWRTEN,WDTPS20,WDTEN,CCP2MX,DEBUG,LVP,STVREN,CP3,CP2,CP1,CP0,CPD,CPB,WRT3,WRT2,WRT1,WRT0,WRTD,WRTB,WRTC,EBTR3,EBTR2,EBTR1,EBTR0,EBTRB

Cette entrée informe l'application bootloader que le PIC avec un Device ID de 67 est un PIC18F458 avec un espace programme débutant à l'adresse 0x0200 et se terminant à l'adresse 0x7FFF. Ses données EEPROM sont enregistrées entre les adresses 0 et 0xFF. Les bits de Configuration supportés et qui se retrouvent entre les adresses 0x300000 et 0x30000D sont les suivants: OSCSEN, FOSC20, BORV, BOREN, PWRTEN, WDTPS20, WDTEN, CCP2MX, DEBUG, LVP, STVREN, CP3, CP2, CP1, CP0, CPD, CPB, WRT3, WRT2, WRT1, WRT0, WRTD, WRTB, WRTC, EBTR3, EBTR2, EBTR1, EBTR0, EBTRB.


Pour me contacter

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

Nombre de visiteurs: 17240

Dernière mise-à-jour: Le 16 octobre 2006

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