Utilisation d’AVRDude avec USBAsp sous GNU/Linux

Avertissement : Ce qui suit a été testé avec un programmateur USBASP sous GNU/Linux Debian Lenny, cependant toutes les commandes présentées sont utilisables avec n’importe quel programmateur ainsi que sous environnement Microsoft Windows.

AVRDude est sans aucun doute le meilleur logiciel pour utiliser votre programmateur USBAsp. Je présente ci-dessous plusieurs cas concrets d’utilisation de ce logiciel. En fin d’article, je présente aussi l’utilisation d’une fonction nouvelle du programmateur USBAsp utilisable uniquement avec la version CVS d’AVRDude : le réglage de la vitesse d’horloge du programmateur de façon totalement logiciel et les avantages de cette méthode. Souvenez-vous aussi que vous disposez d’une aide en ligne sous GNU/Linux: man avrdude

Informations importantes à savoir sur les ATmel ATMega et le programmateur USBAsp

Lorsque vous achetez un ATMega celui-ci est configuré pour utiliser l’ocillateur interne à 1MHz. Vous ne pouvez donc pas le programmer en vitesse rapide mais en vitesse lente uniquement la première fois. Si vous changez les fusibles de configuration afin d’utiliser un quartz externe (>= à 4MHz) ou si vous choisissez une fréquence plus élevé pour l’oscillateur interne alors vous pouvez passer le programmateur en vitesse rapide. Le choix de la vitesse de programmation s’effectue avec l’interrupteur à glissière en haut du programmateur. A droite vous êtes en vitesse lente, à gauche en vitesse rapide.

Position de l'interrupteur à glissière pour le choix de la vitesse de programmation

Position de l'interrupteur à glissière pour le choix de la vitesse de programmation

Obtenir la liste des programmateurs gérés par AVRDude

Pour obtenir la liste des programmateurs supportés par AVRDude V4.5, il suffit de taper la commande suivante:

Liste des µC supportés par AVRDude

Pour obtenir la liste des microcontrôleurs supportés par AVRDude v4.5, il faut taper la commande suivante:

Transfert d’un fichier HEX vers le µC

Pour transférer un fichier hexadécimal vers le microcontrôleur, il suffit de taper la ligne suivante en changeant « inter_dels.hex » par votre fichier:

Une petite explication de la ligne de commande:

  • sudo : permet de passer en mode superutilisateur
  • avrdude : le nom du programme
  • -c usbasp : le type du programmateur (ici usbasp !)
  • -p m8 : le type de µC (ici un ATMega8)
  • -U flash:w:nom.hex : indique que l’on écrit (w:write) un programme (nom.hex) en mémoire flash

Sans modifier les fusibles, l’ATMega8 tourne sur son oscillateur RC interne à 1MHz.

Lecture du contenu de la mémoire flash du µC

Pour obtenir une image de la mémoire flash (mémoire de programme) d’un µC et en écrire le contenu dans un fichier au format Intel HEX, il faut taper la commande suivante:

Écrire les fusibles de configuration du µC

Pour faire fonctionner correctement le µC, il faut configurer un certain nombre de ces paramètres internes. Ceux-ci sont accessibles sous forme de « fusibles à griller ». La description de ces fusibles est donnée dans la documentation technique et dépend du type de µC. Ces fusibles sont regroupés dans des registres spéciaux appelés lfuse (low fuses), hfuse (high fuses) voire efuse (extended fuses). Les possibilités sont très nombreuses et les risques de se tromper aussi. Heureusement des « calculettes » à fusibles sont disponibles sur Internet. Celle-ci est bien faite et en plus elle donne le résultat pour AVRDude ! Pour écrire les fusibles dans un ATMega8 afin qu’il utilise l’oscillateur interne en mode 4MHz avec le chien de garde désactivé, vous taperez la ligne suivante:

Explication de la ligne de commande « lfuse:w:0x43:m »:

  • lfuse : écriture des fusibles « bas » (low fuses)
  • w : write, écriture
  • 0x43 : la valeur en hexadécimal à écrire, vous pouvez aussi l’écrire en binaire en préfixant par 0b
  • m : indique qu’il faut prendre la valeur précédente comme « fichier » à envoyer dans le fusible bas

Lire les fusibles de configuration du µC

Pour lire les fusibles de configuration du µC et les afficher dans le terminal vous taperez la ligne suivante:

Pour afficher les fusibles en binaire, il suffit juste de changer la lettre ‘h’ par ‘b’.

Le mode interactif d’AVRDude

AVRDude propose un mode en « ligne de commande » ou mode interactif. Ce mode est accessible en tapant la ligne ci-dessous. Pour accéder à la liste des commandes disponibles tapez « help ».

Trois commandes sont particulièrement interessantes dans ce mode:

  • part : permet d’obtenir des renseignements sur le µC (types de mémoires et taille de celles-ci)
  • dump ou read : permet d’obtenir à l’écran le contenu de la mémoire concernée. C’est interessant en particulier pour lire la mémoire EEPROM du µC
  • write : permet d’écrire des données dans la mémoire concernée. Ce mode est utile par exemple pour écrire des données rapidement dans la mémoire EEPROM du µC.

Je vous présente ci-dessous un exemple d’utilisation de ces trois commandes pour écrire et lire directement en EEPROM:

  1. Lecture des caractéristiques du µC.
  2. Lecture des 16 premiers octets de la mémoire EEPROM à partir de l’adresse 0. Ces octets n’ont pas été programmé car ils sont tous à 0xFF.
  3. Ecriture de 5 octets dans la mémoire EEPROM à partir de l’adresse 0 avec comme valeur 0, 1, 2, 3 et 4.
  4. Relecture de la mémoire EEPROM pour vérification.
  5. Demande d’effacement du µC (mémoire flash et eeprom)
  6. Vérification que la mémoire EEPROM a bien été effacé. (C’est le cas car on lit comme valeur 0xFF)

Nouvelles fonctions avec USBAsp et AVRDude

La dernière version du firmware d’USBASP accepte de faire varier la fréquence d’horloge de programmation (signal SCK) de manière logiciel grace à un paramètre d’AVRDude. Pour profiter de cette fonction, il faut la version SVN d’AVRDude. En fait j’ai téléchargé la dernière version disponible « normale » (la 5.6 à la date de l’article) puis j’ai récupéré les deux fichiers modifiés (usbasp.c et usbasp.h) pour qu’AVRDude fonctionne correctement avec USBASP. J’ai recompilé le tout et obtenu une « nouvelle » version d’AVRDude. Du coup vous devez laisser l’interrupteur de vitesse de programmation en position rapide pour choisir la fréquence de l’horloge de programmation. Si vous mettez l’interrupteur en position « horloge lente » le paramètre passé par AVRDude sera tout simplement ignoré et la programmation s’effectuera avec une fréquence d’horloge basse (8KHz) compatible avec des AVR qui utilisent une fréquence d’horloge inférieure à 1,5Mhz.
Le paramètre d’AVRDude qui permet de faire varier la fréquence d’horloge de programmation est « -B xx » ou xx est une durée exprimée en µs. Toutes les fréquences d’horloge ne sont pas disponibles. Dans le tableau ci-dessous, vous avez celles supportés par USBASP:

Fréquence de l’horloge de programmation Valeur du paramètre -B Remarque(s)
1,5MHz 0.66 Vitesse maximale de l’horloge. Même si vous mettez un chiffre plus petit que 0.66, celui-ci sera ramené à cette valeur.
750KHz 1.33
375KHz 2.66 Ancienne vitesse rapide de programmation
187,5KHz 5.33
93,75KHz 10.66
32KHz 31.25
16KHz 62.5
8KHz 125 Ancienne vitesse lente de programmation
4KHz 250
2KHz 500
1KHz 1000
500Hz 2000 Vitesse la plus lente possible pour l’horloge de programmation. Toute valeur supérieure à 2000 sera ramené à cette valeur.
pas de paramètre ou 0 La vitesse d’horloge de programmation est fonction de la position de l’interrupteur

Par exemple vous avez ci-dessous, la trace de deux programmations du même programme en utilisant deux vitesses d’horloge différentes. Le paramètre « -v -v » permet d’activer le mode verbeux d’AVRDude:

Si vous obtenez une erreur lors de la programmation, c’est que votre horloge de programmation est soit trop rapide, soit trop lente ! Notez tout de même la différence importante pour le temps de programmation.

Vous trouverez ci-dessous la version d’AVRDude modifié par mes soins pour supporter la dernière version du firmware d’USBASP.

Executable AVRDude modifié pour Debian GNU/Linux Lenny
Titre: avrdude (452 clics)
Légende: Executable AVRDude modifié pour Debian GNU/Linux Lenny
Nom du fichier: avrdude.
Taille: 616 KB

Laisser un commentaire

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