Flasher un bootloader sur ATtiny

Besoin d’installer un bootloader sur ATtiny85 ? C’est par ici…

Micronucleus

HW-260

Ce bootloader inclut une émulation USB au démarrage qui permet au microcontrôleur d’être mis à jour facilement, par exemple quand il se trouve sur une carte de type HW-260.

Il nous faut pour commencer une version à jour de ce bootloader. Allons voir GitHub, et récupérons la dernière version du code zippé que l’on décompactera :

https://github.com/micronucleus/micronucleus/archive/refs/heads/master.zip

Arduino as ISP

Il nous faudra ensuite un peu de hardware pour flasher le microcontrôleur cible. La base c’est un Arduino UNO et une plaquette d’essais (breadboard).

Regardez là, le brochage nécessaire : Programming ATTiny Using Arduino as ISP – Arduino Project Hub

Arduino UNO as ISP pour ATtiny

Avant de placer le condensateur (qui évite le reset de l’Arduino), il faut le charger avec le programme ISP de la manière suivante.

Charger le programme/croquis ArduinoISP

Puis le téléverser vars la carte Arduino UNO qui assurera la fonction d’ISP.

On n’oubliera pas de remettre le condensateur en place avant de poursuivre.

Flasher le microcontrôleur

Et là, c’est le drame !

Pierre BELLEMARE

Effectivement car il va falloir quitter l’IDE Arduino et passer en ligne de commande et lancer 2 commandes avrdude qui nous donneront un bien meilleur contrôle du flashage.

Flasher le bootloader

La commande suivante est à réaliser dans la fenêtre de commande de Windows.

On commencera par se placer dans le répertoire d’installation de l’IDE Arduino avec une ou des commandes cd ; pour moi, c’est : C:\Program Files (x86)\Arduino\hardware\tools\avr\bin

Puis on devra savoir :

  1. Quel est le type de microcontrôleur que l’on veut flasher (ici ATtiny85 –> t85) ;
  2. Quel est le port COM sur lequel est associé la carte Arduino UNO utilisée comme ISP ;
  3. L’emplacement du fichier à flasher que l’on trouvera dans le répertoire Micronucleus que l’on a précédemment décompressé (ici \Users\xxxx\Downloads\micronucleus-master\micronucleus-master\firmware\releases\t85_default.hex)

Dans mon cas, on aura donc en gras la ligne complète, par exemple :

> avrdude -C ../etc/avrdude.conf -c arduino -p t85 -P COM7 -b 19200 -U flash:w:\Users\xxxx\Downloads\micronucleus-master\micronucleus-master\firmware\releases\t85_default.hex

avrdude: AVR device initialized and ready to accept instructions

Reading | ################################################## | 100% 0.01s

avrdude: Device signature = 0x1e930b (probably t85)
avrdude: NOTE: "flash" memory has been specified, an erase cycle will be performed
         To disable this feature, specify the -D option.
avrdude: erasing chip
avrdude: reading input file "\Users\marc\Downloads\micronucleus-master\micronucleus-master\firmware\releases\t85_default.hex"
avrdude: input file \Users\marc\Downloads\micronucleus-master\micronucleus-master\firmware\releases\t85_default.hex auto detected as Intel Hex
avrdude: writing flash (8170 bytes):

Writing | ################################################## | 100% 0.08s

avrdude: 8170 bytes of flash written
avrdude: verifying flash memory against \Users\marc\Downloads\micronucleus-master\micronucleus-master\firmware\releases\t85_default.hex:
avrdude: load data flash data from input file \Users\marc\Downloads\micronucleus-master\micronucleus-master\firmware\releases\t85_default.hex:
avrdude: input file \Users\marc\Downloads\micronucleus-master\micronucleus-master\firmware\releases\t85_default.hex auto detected as Intel Hex
avrdude: input file \Users\marc\Downloads\micronucleus-master\micronucleus-master\firmware\releases\t85_default.hex contains 8170 bytes
avrdude: reading on-chip flash data:

Reading | ################################################## | 100% 0.08s

avrdude: verifying ...
avrdude: 8170 bytes of flash verified

avrdude: safemode: Fuses OK (E:FF, H:DF, L:F1)

avrdude done.  Thank you.

La réponse donnée par avrdude nous indique :

  1. Qu’il a bien détecté un ATtiny85 et qu’il l’a effacé ;
  2. Qu’il a écrit environ 8 ko dans le circuit ;
  3. Qu’il a pu vérifier que le contenu est conforme au fichier indiqué (.hex)
  4. Enfin qu’il a placé les « fuses » (fusibles) dans un état par défaut (E:FF, H:DF, L:F1)

Paramétrer correctement les fusibles

En effet, les fusibles sélectionnés ne vont pas convenir pour fonctionner sur la carte HW-260 qui par exemple l’a pas d’horloge ou de quartz pour cadencer le microcontrôleur. Il faut donc repréciser les valeurs attendues.

Un site permet de la faire facilement en précisant le type de microcontrôleur : AVR® Fuse Calculator – The Engbedded Blog.

Dans mon cas, j’ai choisi la configuration suivante :

Qui donne :

  • Utilisation de l’oscillateur interne à 8 MHz (avec des temps de démarrage plutôt longs) ;
  • Pas de sortie de l’horloge ;
  • Pas de division de l’horloge inter par 8 (pour rester à 8MHz) ;
  • Pas de détection de sous-tension ;
  • Pas de préservation de l’EEPROM lors des cycles d’effacement du chip ;
  • Pas de Watchdog en démarrage automatique (toujours possible de l’activer par programmation) ;
  • Activation de la programmation par SPI (si besoin de reflasher le bootloader) (impératif) ;
  • Pas de “DEBUG WIRE” ;
  • Pas de désactivation du RESET (Attention en cas de désactivation du RESET, on ne peut plus flasher le bootloader) ;
  • Activation de l’autoprogrammation ; impératif pour que le bootloader puisse reflasher le composant.

Ce qui nous donne les valeurs des fuses : L: E2, H: DF, E: FE

Il faudra donc maintenant relancer avrdude avec la commande suivante :

C:\Program Files (x86)\Arduino\hardware\tools\avr\bin>avrdude -C ../etc/avrdude.conf -c arduino -p t85 -P COM7 -b 19200 -U lfuse:w:0xe2:m -U hfuse:w:0xdf:m -U efuse:w:0xfe:m

Pour obtenir un compte-rendu décrivant le changement des valeurs des fusibles.

Attention toutefois aux valeurs que vous choisissez car elles peuvent rendre le microcontrôleur impossible à reflasher une nouvelle fois (désactivation du SPIEN par exemple).

Références

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *