Introduction
Cette page explique comment programmer un microcontrôleur AVR
avec la méthode ISP à 6 broches (In System Programming, ce qui
veux dire programmation à même le circuit).
ISP 6 Pins pinout:
avr_isp-pinouts.html
Outils
Il faut tout d'abord un cable ISP reliant l'ordinateur au
microcontrôleur. Voici quelques options:
-
AVR ISP d'Atmel.
C'est ce que j'utilise le plus souvent. Atmel fournissent
un logiciel pour Windows nommé Avr Studio. Sous Linux, l'adaptateur
est supporté par plusieurs logiciels tels que
uisp et
avrdude.
-
AVRISP mkII d'Atmel.
Il s'agit d'une version USB d'AVR ISP. Le
logiciel d'Atmel, Avr Studio, le supporte évidemment.
Sous linux, cet adaptateur fonctionne très bien avec
avrdude.
- PonyProg.
Cet outil peut
reprogrammer certains microcontrôleurs AVR via un port parallèle (Shéma
inclus).
Exemples
Exemples utilisant UISP:
Tout d'abord, sachez que /dev/avr est un lien symbolique vers le port
série auquel l'adaptateur est branché (eg: /dev/ttyS0). Aussi, n'oubliez pas de changer
l'argument -dpart pour votre MCU si vous utilisez autre chose qu'un ATmega8.
Programmation des fuses d'un atmega8:
# uisp -dprog=stk500 -dpart=atmega8 -dserial=/dev/avr --wr_fuse_h=0xc9 --wr_fuses_l=0x9f
Programmation d'un fichier hex dans un atmega8:
# uisp -dprog=stk500 -dpart=atmega8 -dserial=/dev/avr --erase --upload --verify if=n64_to_wii.hex
Notes: --erase pour effacer la flash AVANT de programmer le fichier hex. --verify permet
de relire le contenu de la flash pour s'assurer qu'il n'y a pas eu d'erreurs.
Exemples utilisant AVRDUDE et un ISP mkII USB:
Programmation des fuses d'un Atmega8:
# avrdude -p m8 -P usb -c avrispmkII -Uhfuse:w:0xc9:m -Ulfuse:w:0x9f:m
Notes: l'option -p précise le type de microcontrôleur à programmer. Pour obtenir
la liste, essayez 'avrdude -p list -P usb -c avrispmkII' (comme 'list' est un type
invalide, avrdude liste tout les types supportés).
Programmation d'un fichier hex dans un atmega8:
# avrdude -p m8 -P usb -c avrispmkII -Uflash:w:n64_to_wii.hex -B 1.0
Note: L'argument -B permet de contrôler le rythme de l'horloge de
programmation (en microsecondes). Cette fréquence ne doit pas dépasser le quart de celle de
l'horloge du CPU.
Trucs et astuces
Voici quelques détails qui échappent souvent aux débutants:
- Alimentation: Généralement, l'outil de programmation (comme ceux ci-dessus) n'alimentent pas le microcontrôleur
à être programmé. Il faut donc mettre le circuit sous tension.
- Horloge: Pour que la programmation soit possible, le micro-contrôleur a besoin d'une horloge fonctionnelle. Lorsque la puce AVR est neuve, en raison des valeurs de "fuses" par défaut, une horloge à circuit RC interne est active. Si vous programmez les fuses pour l'emploi d'un oscillateur à cristal, il faut donc que ledit cristal soit présent pour que les opérations de programmation successives réussissent.