(Loading...)

jeudi 22 mars 2012

Le bootloader


La présente expérimentation est particulièrement intéressante, dans le sens où elle permet de réaliser une application, qui par la suite, pourra voir la mise à jour du micro-code (Firmware) se faire sans passer par un programmateur de PIC, uniquement par le port série.
Cela présente un avantage double, si l'application en question nécessitait déjà l'utilisation du port série.
En effet, ce même port servira pour l'application, mais aussi pour sa re-programmation.







L'utilisateur final une fois le bootloader intégré dans le PIC n'aura pas besoin de posséder un programmateur de PIC pour mettre à jour les modifications qui surviendraient sur votre code.

Il existe sur le net, différents type de bootloaders, chacun apportant ses particularités.
J'ai, après quelques recherches/essais, adopté ce modèle de bootloader.
Tiny BootLoader qui ne prend que très peu de place dans la mémoire du PIC et qui répond parfaitement à ce que j'en attends.

Il se compose donc d'un petit code à télécharger avec un programmateur, sur le PIC (vierge) et d'un petit logiciel sous Windows, le chargeur, qui fera office de logiciel de transfert de votre propre code.
Oui pour être clair, une fois le bootloader chargé, vous n'enverrez plus votre code via le programmateur de PIC mais par le port série.

Le petit code permettant le bootloading, à télécharger dans le PIC sera différent selon le PIC utilisé.
Sur le site de l'auteur vous en trouverez quelques-un pré-compilés pour des PIC courants.

Vous y trouverez également les codes sources en assembleurs, qui vous permettront de compiler votre propre bootloader pour un PIC qui ne serait pas listé, ou encore pour une vitesse de quartz ou de transfert, non pré-compilé (la procédure y est même expliquée).

Dans le cas de cette présente expérimentation, l'affaire est facile, un PIC 16F876A (pour changer) cadencé au moyen d'un quartz de 20Mhz. Le site propose un fichier Hex qui conviendra tout fait. :)


  
UTILISATION DU CHARGEUR WINDOWS



Le logiciel sous Windows est simple mais très complet.
Il intègre la fonction de vérification de PIC, la fonction de transfère du code d'application, un terminal, et comporte différents éléments de paramétrages que vous pourrez approfondir sur le site de l'auteur.
Si tout se passe bien au lancement du programme, ce dernier détecte le port COM sur lequel est branché le PIC.







Le bootloader prend la main au tout début de la mise sous tension du PIC, ou encore immédiatement après une remise à zéro (RAZ), durant quelques millisecondes, si aucune instruction du chargeur sous Windows n'est détectée, le PIC passe au programme normal du PIC.

Que ce soit pour vérifier si le PIC est détecté en utilisant le bouton "Check PIC" ou pour envoyer un programme dans le PIC avec le bouton "Write Flash", on appuie et reste appuyé sur le bouton RAZ, puis Write Flash ou Checkpic, et l'on relache le bouton RAZ, la procédure se lance alors.

Vous devez toujours respecter ce timing.



Sur le visuel ci-contre, le PIC est bien détecté au lancement du logiciel.
En cas de non détection, vérifier que la platine électronique est bien alimentée, connectée et que le port correspond à celui sur lequel la carte électronique et branché.
Puis, utiliser le bouton "Check PIC", toujours en respectant le timing, afin de vérifier que le PIC est reconnu.




 

Une fois le PIC reconnu, cliquer sur "Browse" et sélectionner le fichier du firmware à mettre à jour. 









 




Le PIC est reconnu, le firmware est sélectionné, maintenant  on appui et reste appuyé sur le bouton RAZ, puis clique sur "Write Flash" pour l'envoi de l'Hex et ensuite lâche le bouton RAZ.











 le transfert s'effectue alors.
Si la carte électronique ne comporte pas de bouton RAZ, on fait de même avec la mise sous tension,
on envoi l'Hex, puis immédiatement après on met la platine sous tension.
Le transfert est extrêmement rapide, et vous serez averti du bon déroulement du transfert comme le montre l'image.





 
Si le chargeur envoie un message d'erreur, recommencer, si l'erreur persiste, relancer le logiciel chargeur et vérifier que le bon port COM est sélectionné, la vitesse également.



 
Une fois le transfert effectué, le chargeur comporte un terminal, permettant ainsi de vérifier le fonctionnement du PIC.
Si votre application utilise le port série pour transférer des informations au PC, la gestion de la vitesse est indépendante du bootloader.
Si vous utilisez un bootloader fonctionnant à 115000 Bauds et que votre application fonctionne à 38400 Bauds, cela ne pose aucun problème.



 


Sur l'exemple présent  la vitesse de transfert du bootloader et de l'application est la même, donc
on garde 115200 bauds sous le bouton "Open" pour se connecter avec le terminal.
La seule condition, évidemment, mais je le précise au cas où, vous ne pouvez utiliser le port simultanément pour votre application et pour mettre à jour le firmware. donc pensez à déconnecter ou fermer votre application si vous utilisez le chargeur pour une mise à jour. Et vice-versa.





Une fois connecté via le terminal au PIC, vous pourrez effectuer vos essais d’émissions/réceptions.












 
On peut donc dorénavant imaginer différentes formes d'utilisations du bootloader, telles que des platines d'essais se passant de programmateur de PIC, une sorte de pseudo Arduino, un Picduino personnel.




10 commentaires :

lamsalli a dit…

merci pour le partage
est ce qu'il y a une version usb?
merci d'avance

HeartyGFX a dit…

Bonsoir,

Il existe différentes versions également en USB.
D'ailleurs MicroChip en fournit un sur son site.
Cependant, les PIC intégrants l'USB sont dans les gammes 18F.

Le port série reste une excellente alternative pour les PIC plus petits, et surtout extrêmement rapide.
Peut-être plus rapide que l'ICSP finalement.

Merci de l'intérêt porté,
à bientôt.

;)


lamsalli a dit…

bonjour
est le schéma électronique pour le port série?

HeartyGFX a dit…

Bonsoir,

Il existe plusieurs options pour connecter un PIC au port série.

- FTDI232
- MAX232 ou 233
- Module Bluetooth.
- Adaptateur basés sur des composants classiques, transistors, résistances, condensateurs...

Les trois premiers peuvent être fait par vous ou encore acheté tout fait, sur Ebay par exemple,
il ne valent que 2 ou 3 euros.

Dans l'article "Carte de contrôle Imprimante 3D UV"
il y a un schéma à télécharger où l'on peut voir l'utilisation d'un MAX232 avec un PIC 16F876A.

Dans l'article "Module Bluetooth" on y voit l'exemple d'un module Bluetooth que j'utilise dans certaines expérimentations.

Quoiqu'il en soit, j'ai encore sous forme de brouillon, quelques articles à publier sur la liaison série.

En attendant, une petite recherche sur google vous permettra de trouver les renseignements que vous demandez.

Merci de votre visite.

A bientôt,


;)


Anonyme a dit…

Bonjour

J'utilise un 16F887
Curieusement le programme tinybldwin ne me reconnait pas le PIC. Réponse :
Connected to \\.\COM8 at 115200
Searching for PIC ...
pic sending unknown data: "K" <> 49h=I
Check baudrate & Start Write while PIC is not sending serial data (e.g. in reset)
ERROR!

Pourtant, en mode terminal le dialogue avec le PIC fonctionne parfaitement.

Quelqu'un a une idée du dialogue initié par tinybldwin ?

SL

HeartyGFX a dit…


Bonjour,

Juste pour être sur,
la version du bootloader chargée dans le PIC
est bien une version pour le 16F887?

Également, la vitesse de transmission est bien réglée sur celle du Bootloader?

;)


Anonyme a dit…

Après quelques essais, le problème vient du bootloader 8 MHz que j'utilisais car mon appli tournait à cette vitesse.
Avec une appli 4 MHz et le .asm "standard" du bootloader, tout fonctionne correctement.
Soit il y a un soucis avev spbrg que j'avais pourtant vérifié, soit le 115200 bauds est bien accepté par l'onglet terminal mais pas en bootloader.

Je vais refaire quelques tests

HeartyGFX a dit…


Bonsoir,

Ravi de voir que tout est rentré dans l'ordre.

Juste par curiosité, à quelle application est destinée ce montage?

A bientôt,

;)


Unknown a dit…

En fouillant j'ai trouvé comment programmer le PIC, mais d'après ce que j'ai pu comprendre je dois pour la première fois avoir un graveur de PIC? :-(

HeartyGFX a dit…


Bonsoir,

Oui c'est indispensable, dans le cas présent il te faut charger le Bootloader à l'aide d'un programmateur de PIC, une fois ceci fait, pour charger le code de l'application définitive, (Hcard dans ton cas) tu ne seras plus obligé de passer par le programmateur de PIC, mais directement par le port série de la Hcard, (voir l'article consacré).

Tu as une voie cependant pour programmer un PIC sans trop de composant.
Pour inscrire le Bootloader dans le PIC, consulte cet article "Programmateur de PIC/EEPROM USB " au paragraphe suivant :
"Comment programmer le PIC sans programmateur !?"

Tu trouveras la solution pour le Bootloader, une fois ceci fait, tu pourras charger le programme de la Hcard via le port série.

;)