Accueil > µC Atmel > Utilisation d’AVRDude avec USBAsp sous GNU/Linux

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:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
olivier@leonard:~/Atmel-ATMega$ sudo avrdude -c ?
 
Valid programmers are:
  c2n232i  = serial port banging, reset=dtr sck=!rts mosi=!txd miso=!cts [/etc/avrdude.conf:791]
  dasa3    = serial port banging, reset=!dtr sck=rts mosi=txd miso=cts [/etc/avrdude.conf:778]
  dasa     = serial port banging, reset=rts sck=dtr mosi=txd miso=cts [/etc/avrdude.conf:765]
  siprog   = Lancos SI-Prog  [/etc/avrdude.conf:752]
  ponyser  = design ponyprog serial, reset=!txd sck=rts mosi=dtr miso=cts [/etc/avrdude.conf:739]
  frank-stk200 = Frank STK200                   [/etc/avrdude.conf:704]
  blaster  = Altera ByteBlaster             [/etc/avrdude.conf:691]
  ere-isp-avr = ERE ISP-AVR  [/etc/avrdude.conf:681]
  atisp    = AT-ISP V1.1 programming cable for AVR-SDK1 from   [/etc/avrdude.conf:671]
  dapa     = Direct AVR Parallel Access cable [/etc/avrdude.conf:660]
  xil      = Xilinx JTAG cable              [/etc/avrdude.conf:647]
  futurlec = Futurlec.com programming cable. [/etc/avrdude.conf:630]
  abcmini  = ABCmini Board, aka Dick Smith HOTCHIP [/etc/avrdude.conf:620]
  picoweb  = Picoweb Programming Cable, http://www.picoweb.net/ [/etc/avrdude.conf:610]
  sp12     = Steve Bolt's Programmer        [/etc/avrdude.conf:599]
  alf      = Nightshade ALF-PgmAVR, http://nightshade.homeip.net/ [/etc/avrdude.conf:583]
  bascom   = Bascom SAMPLE programming cable [/etc/avrdude.conf:573]
  dt006    = Dontronics DT006               [/etc/avrdude.conf:563]
  pony-stk200 = Pony Prog STK200               [/etc/avrdude.conf:551]
  stk200   = STK200                         [/etc/avrdude.conf:535]
  bsd      = Brian Dean's Programmer, http://www.bsdhome.com/avrdude/ [/etc/avrdude.conf:524]
  pavr     = Jason Kyle's pAVR Serial Programmer [/etc/avrdude.conf:516]
  dragon_dw = Atmel AVR Dragon in debugWire mode [/etc/avrdude.conf:509]
  dragon_hvsp = Atmel AVR Dragon in HVSP mode  [/etc/avrdude.conf:501]
  dragon_pp = Atmel AVR Dragon in PP mode    [/etc/avrdude.conf:493]
  dragon_isp = Atmel AVR Dragon in ISP mode   [/etc/avrdude.conf:485]
  dragon_jtag = Atmel AVR Dragon in JTAG mode  [/etc/avrdude.conf:477]
  jtag2dw  = Atmel JTAG ICE mkII in debugWire mode [/etc/avrdude.conf:469]
  jtag2isp = Atmel JTAG ICE mkII in ISP mode [/etc/avrdude.conf:461]
  jtag2    = Atmel JTAG ICE mkII            [/etc/avrdude.conf:453]
  jtag2fast = Atmel JTAG ICE mkII            [/etc/avrdude.conf:445]
  jtag2slow = Atmel JTAG ICE mkII            [/etc/avrdude.conf:437]
  jtagmkII = Atmel JTAG ICE mkII            [/etc/avrdude.conf:429]
  jtag1slow = Atmel JTAG ICE (mkI)           [/etc/avrdude.conf:422]
  jtag1    = Atmel JTAG ICE (mkI)           [/etc/avrdude.conf:414]
  jtagmkI  = Atmel JTAG ICE (mkI)           [/etc/avrdude.conf:406]
  avr911   = Atmel AppNote AVR911 AVROSP    [/etc/avrdude.conf:400]
  avr109   = Atmel AppNote AVR109 Boot Loader [/etc/avrdude.conf:394]
  butterfly = Atmel Butterfly Development Board [/etc/avrdude.conf:388]
  usbtiny  = USBtiny simple USB programmer, http://www.ladyada.net/make/usbtinyisp/ [/etc/avrdude.conf:382]
  usbasp   = USBasp, http://www.fischl.de/usbasp/ [/etc/avrdude.conf:376]
  avr910   = Atmel Low Cost Serial Programmer [/etc/avrdude.conf:370]
  stk500hvsp = Atmel STK500 V2 in high-voltage serial programming mode [/etc/avrdude.conf:364]
  stk500pp = Atmel STK500 V2 in parallel programming mode [/etc/avrdude.conf:358]
  stk500v2 = Atmel STK500 Version 2.x firmware [/etc/avrdude.conf:352]
  stk500v1 = Atmel STK500 Version 1.x firmware [/etc/avrdude.conf:346]
  stk500   = Atmel STK500                   [/etc/avrdude.conf:340]
  avrisp2  = Atmel AVR ISP mkII             [/etc/avrdude.conf:330]
  avrispmkII = Atmel AVR ISP mkII             [/etc/avrdude.conf:324]
  avrispv2 = Atmel AVR ISP V2               [/etc/avrdude.conf:318]
  avrisp   = Atmel AVR ISP                  [/etc/avrdude.conf:312]

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:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
olivier@leonard:~/Atmel-ATMega$ sudo avrdude -p ?
 
Valid parts are:
  m6450 = ATMEGA6450      [/etc/avrdude.conf:12304]
  m3250 = ATMEGA3250      [/etc/avrdude.conf:12115]
  m645 = ATMEGA645       [/etc/avrdude.conf:11926]
  m325 = ATMEGA325       [/etc/avrdude.conf:11737]
  usb1287 = AT90USB1287     [/etc/avrdude.conf:11549]
  usb1286 = AT90USB1286     [/etc/avrdude.conf:11360]
  usb647 = AT90USB647      [/etc/avrdude.conf:11171]
  usb646 = AT90USB646      [/etc/avrdude.conf:10981]
  t84  = ATtiny84        [/etc/avrdude.conf:10798]
  t44  = ATtiny44        [/etc/avrdude.conf:10616]
  t24  = ATtiny24        [/etc/avrdude.conf:10434]
  m2561 = ATMEGA2561      [/etc/avrdude.conf:10241]
  m2560 = ATMEGA2560      [/etc/avrdude.conf:10048]
  m1281 = ATMEGA1281      [/etc/avrdude.conf:9860]
  m1280 = ATMEGA1280      [/etc/avrdude.conf:9671]
  m640 = ATMEGA640       [/etc/avrdude.conf:9483]
  t85  = ATtiny85        [/etc/avrdude.conf:9302]
  t45  = ATtiny45        [/etc/avrdude.conf:9123]
  t25  = ATtiny25        [/etc/avrdude.conf:8943]
  pwm3b = AT90PWM3B       [/etc/avrdude.conf:8762]
  pwm2b = AT90PWM2B       [/etc/avrdude.conf:8579]
  pwm3 = AT90PWM3        [/etc/avrdude.conf:8396]
  pwm2 = AT90PWM2        [/etc/avrdude.conf:8212]
  t2313 = ATtiny2313      [/etc/avrdude.conf:8025]
  m168 = ATMEGA168       [/etc/avrdude.conf:7837]
  m88  = ATMEGA88        [/etc/avrdude.conf:7651]
  m48  = ATMEGA48        [/etc/avrdude.conf:7464]
  t861 = ATTINY861       [/etc/avrdude.conf:7276]
  t461 = ATTINY461       [/etc/avrdude.conf:7087]
  t261 = ATTINY261       [/etc/avrdude.conf:6898]
  t26  = ATTINY26        [/etc/avrdude.conf:6741]
  m8535 = ATMEGA8535      [/etc/avrdude.conf:6583]
  m8515 = ATMEGA8515      [/etc/avrdude.conf:6425]
  m8   = ATMEGA8         [/etc/avrdude.conf:6265]
  m161 = ATMEGA161       [/etc/avrdude.conf:6125]
  m32  = ATMEGA32        [/etc/avrdude.conf:5950]
  m6490 = ATMEGA6490      [/etc/avrdude.conf:5757]
  m649 = ATMEGA649       [/etc/avrdude.conf:5572]
  m3290p = ATMEGA3290P     [/etc/avrdude.conf:5389]
  m3290 = ATMEGA3290      [/etc/avrdude.conf:5204]
  m329p = ATMEGA329P      [/etc/avrdude.conf:5019]
  m329 = ATMEGA329       [/etc/avrdude.conf:4835]
  m169 = ATMEGA169       [/etc/avrdude.conf:4655]
  m163 = ATMEGA163       [/etc/avrdude.conf:4512]
  m162 = ATMEGA162       [/etc/avrdude.conf:4316]
  m644p = ATMEGA644P      [/etc/avrdude.conf:4126]
  m644 = ATMEGA644       [/etc/avrdude.conf:3936]
  m324p = ATMEGA324P      [/etc/avrdude.conf:3745]
  m164p = ATMEGA164P      [/etc/avrdude.conf:3554]
  m16  = ATMEGA16        [/etc/avrdude.conf:3376]
  c32  = AT90CAN32       [/etc/avrdude.conf:3185]
  c64  = AT90CAN64       [/etc/avrdude.conf:2995]
  c128 = AT90CAN128      [/etc/avrdude.conf:2805]
  m128 = ATMEGA128       [/etc/avrdude.conf:2627]
  m64  = ATMEGA64        [/etc/avrdude.conf:2446]
  m103 = ATMEGA103       [/etc/avrdude.conf:2306]
  8535 = AT90S8535       [/etc/avrdude.conf:2185]
  8515 = AT90S8515       [/etc/avrdude.conf:2071]
  4434 = AT90S4434       [/etc/avrdude.conf:1988]
  4433 = AT90S4433       [/etc/avrdude.conf:1864]
  2343 = AT90S2343       [/etc/avrdude.conf:1740]
  2333 = AT90S2333       [/etc/avrdude.conf:1655]
  2313 = AT90S2313       [/etc/avrdude.conf:1542]
  4414 = AT90S4414       [/etc/avrdude.conf:1429]
  1200 = AT90S1200       [/etc/avrdude.conf:1314]
  t15  = ATtiny15        [/etc/avrdude.conf:1181]
  t13  = ATtiny13        [/etc/avrdude.conf:1008]
  t12  = ATtiny12        [/etc/avrdude.conf:875]
  t11  = ATtiny11        [/etc/avrdude.conf:811]

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:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
olivier@leonard:~/Atmel-ATMega$ sudo avrdude  -c usbasp -p m8 -U flash:w:inter_dels.hex
 
avrdude: AVR device initialized and ready to accept instructions
 
Reading | ################################################## | 100% 0.02s
 
avrdude: Device signature = 0x1e9307
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 "inter_dels.hex"
avrdude: input file inter_dels.hex auto detected as Intel Hex
avrdude: writing flash (110 bytes):
 
Writing | ################################################## | 100% 0.53s
 
avrdude: 110 bytes of flash written
avrdude: verifying flash memory against inter_dels.hex:
avrdude: load data flash data from input file inter_dels.hex:
avrdude: input file inter_dels.hex auto detected as Intel Hex
avrdude: input file inter_dels.hex contains 110 bytes
avrdude: reading on-chip flash data:
 
Reading | ################################################## | 100% 0.47s
 
avrdude: verifying ...
avrdude: 110 bytes of flash verified
 
avrdude: safemode: Fuses OK
 
avrdude done.  Thank you.

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:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
olivier@leonard:~/Atmel-ATMega$ sudo avrdude  -c usbasp -p m8 -U flash:r:inter_dels_lec.hex:i
 
avrdude: AVR device initialized and ready to accept instructions
 
Reading | ################################################## | 100% 0.02s
 
avrdude: Device signature = 0x1e9307
avrdude: reading flash memory:
 
Reading | ################################################## | 100% 35.10s
 
avrdude: writing output file "inter_dels_lec.hex"
 
avrdude: safemode: Fuses OK
 
avrdude done.  Thank you.

É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:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
olivier@leonard:~/Atmel-ATMega$ sudo avrdude  -c usbasp -p m8 -U lfuse:w:0x43:m -U hfuse:w:0xd9:m 
 
avrdude: AVR device initialized and ready to accept instructions
 
Reading | ################################################## | 100% 0.02s
 
avrdude: Device signature = 0x1e9307
avrdude: reading input file "0x43"
avrdude: writing lfuse (1 bytes):
 
Writing | ################################################## | 100% 0.02s
 
avrdude: 1 bytes of lfuse written
avrdude: verifying lfuse memory against 0x43:
avrdude: load data lfuse data from input file 0x43:
avrdude: input file 0x43 contains 1 bytes
avrdude: reading on-chip lfuse data:
 
Reading | ################################################## | 100% 0.01s
 
avrdude: verifying ...
avrdude: 1 bytes of lfuse verified
avrdude: reading input file "0xd9"
avrdude: writing hfuse (1 bytes):
 
Writing | ################################################## | 100% 0.01s
 
avrdude: 1 bytes of hfuse written
avrdude: verifying hfuse memory against 0xd9:
avrdude: load data hfuse data from input file 0xd9:
avrdude: input file 0xd9 contains 1 bytes
avrdude: reading on-chip hfuse data:
 
Reading | ################################################## | 100% 0.01s
 
avrdude: verifying ...
avrdude: 1 bytes of hfuse verified
 
avrdude: safemode: Fuses OK

Explication de la ligne de commande “lfuse:w:0×43:m”:

  • lfuse : écriture des fusibles “bas” (low fuses)
  • w : write, écriture
  • 0×43 : 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:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
olivier@leonard:~$ sudo avrdude  -c usbasp -p m8 -U lfuse:r:-:h -U hfuse:r:-:h
 
avrdude: AVR device initialized and ready to accept instructions
 
Reading | ################################################## | 100% 0.02s
 
avrdude: Device signature = 0x1e9307
avrdude: reading lfuse memory:
 
Reading | ################################################## | 100% 0.01s
 
avrdude: writing output file ""
0x43
avrdude: reading hfuse memory:
 
Reading | ################################################## | 100% 0.01s
 
avrdude: writing output file ""
0xd9
 
avrdude: safemode: Fuses OK
 
avrdude done.  Thank you.

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
olivier@leonard:~$ sudo avrdude -c usbasp -p m8 -t
 
avrdude: AVR device initialized and ready to accept instructions
 
Reading | ################################################## | 100% 0.03s
 
avrdude: Device signature = 0x1e9307
avrdude> help
>>> help
Valid commands:
 
  dump   : dump memory  : dump
  read   : alias for dump
  write  : write memory : write     ...
  erase  : perform a chip erase
  sig    : display device signature bytes
  part   : display the current part information
  send   : send a raw command : send
  parms  : display adjustable parameters (STK500 only)
  vtarg  : set  (STK500 only)
  varef  : set  (STK500 only)
  fosc   : set  (STK500 only)
  sck    : set  (STK500 only)
  spi    : enter direct SPI mode
  pgm    : return to programming mode
  help   : help
  ?      : help
  quit   : quit
 
Use the 'part' command to display valid memory types for use with the
'dump' and 'write' commands.

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)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
avrdude> part
 
>>> part 
 
AVR Part              : ATMEGA8
Chip Erase delay      : 10000 us
PAGEL                 : PD7
BS2                   : PC2
RESET disposition     : dedicated
RETRY pulse           : SCK
serial program mode   : yes
parallel program mode : yes
Timeout               : 200
StabDelay             : 100
CmdexeDelay           : 25
SyncLoops             : 32
ByteDelay             : 0
PollIndex             : 3
PollValue             : 0x53
 
Memory Detail         :
                         Block Poll               Page                       Polled
  Memory Type Mode Delay Size  Indx Paged  Size   Size #Pages MinW  MaxW   ReadBack
  ----------- ---- ----- ----- ---- ------ ------ ---- ------ ----- ----- ---------
  eeprom         4    20   128    0 no        512    0      0  9000  9000 0xff 0xff
  flash         33    10    64    0 yes      8192   64    128  4500  4500 0xff 0x00
  lfuse          0     0     0    0 no          1    0      0  2000  2000 0x00 0x00
  hfuse          0     0     0    0 no          1    0      0  2000  2000 0x00 0x00
  lock           0     0     0    0 no          1    0      0  2000  2000 0x00 0x00
  calibration    0     0     0    0 no          4    0      0     0     0 0x00 0x00
  signature      0     0     0    0 no          3    0      0     0     0 0x00 0x00
 
avrdude> dump eeprom 0 16
 
>>> dump eeprom 0 16
 
0000  ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff  |................|
 
avrdude> write eeprom 0 0 1 2 3 4
 
>>> write eeprom 0 0 1 2 3 4 
 
avrdude> dump eeprom 0 16
 
>>> dump eeprom 0 16
 
0000  00 01 02 03 04 ff ff ff  ff ff ff ff ff ff ff ff  |................|
 
avrdude> erase
 
>>> erase
 
avrdude: erasing chip
 
avrdude> dump eeprom 0 16
 
>>> dump eeprom 0 16
 
0000  ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff  |................|

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:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
leonard:/home/olivier/avrdude-5.6# ./avrdude -C /etc/avrdude.conf -c usbasp -p m8 -B 1 -U flash:w:/home/olivier/Atmel-ATMega/CommandeRGB/RGB.hex -v -v
 
avrdude: Version 5.6, compiled on Apr 27 2009 at 19:27:53
         Copyright (c) 2000-2005 Brian Dean, http://www.bdmicro.com/
 
         System wide configuration file is "/etc/avrdude.conf"
         User configuration file is "/root/.avrduderc"
         User configuration file does not exist or is not a regular file, skipping
 
         Using Port                    : /dev/parport0
         Using Programmer              : usbasp
         Setting bit clk period        : 1.0
avrdude: seen device from vendor ->www.fischl.de<-
avrdude: seen product ->USBasp<-
         AVR Part                      : ATMEGA8
         Chip Erase delay              : 10000 us
         PAGEL                         : PD7
         BS2                           : PC2
         RESET disposition             : dedicated
         RETRY pulse                   : SCK
         serial program mode           : yes
         parallel program mode         : yes
         Timeout                       : 200
         StabDelay                     : 100
         CmdexeDelay                   : 25
         SyncLoops                     : 32
         ByteDelay                     : 0
         PollIndex                     : 3
         PollValue                     : 0x53
         Memory Detail                 :
 
                                  Block Poll               Page                       Polled
           Memory Type Mode Delay Size  Indx Paged  Size   Size #Pages MinW  MaxW   ReadBack
           ----------- ---- ----- ----- ---- ------ ------ ---- ------ ----- ----- ---------
           eeprom         4    20   128    0 no        512    0      0  9000  9000 0xff 0xff
           flash         33    10    64    0 yes      8192   64    128  4500  4500 0xff 0x00
           lfuse          0     0     0    0 no          1    0      0  2000  2000 0x00 0x00
           hfuse          0     0     0    0 no          1    0      0  2000  2000 0x00 0x00
           lock           0     0     0    0 no          1    0      0  2000  2000 0x00 0x00
           calibration    0     0     0    0 no          4    0      0     0     0 0x00 0x00
           signature      0     0     0    0 no          3    0      0     0     0 0x00 0x00
 
         Programmer Type : usbasp
         Description     : USBasp, http://www.fischl.de/usbasp/
 
avrdude: try to set SCK period to 1e-06 s (= 1000 kHz)
avrdude: set SCK frequency to 750 kHz
avrdude: AVR device initialized and ready to accept instructions
 
Reading | ################################################## | 100% 0.01s
 
avrdude: Device signature = 0x1e9307
avrdude: safemode: lfuse reads as 43
avrdude: safemode: hfuse reads as D9
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: try to set SCK period to 1e-06 s (= 1000 kHz)
avrdude: set SCK frequency to 750 kHz
avrdude: reading input file "/home/olivier/Atmel-ATMega/CommandeRGB/RGB.hex"
avrdude: input file /home/olivier/Atmel-ATMega/CommandeRGB/RGB.hex auto detected as Intel Hex
avrdude: writing flash (640 bytes):
 
Writing | ################################################## | 100% 0.15s
 
avrdude: 640 bytes of flash written
avrdude: verifying flash memory against /home/olivier/Atmel-ATMega/CommandeRGB/RGB.hex:
avrdude: load data flash data from input file /home/olivier/Atmel-ATMega/CommandeRGB/RGB.hex:
avrdude: input file /home/olivier/Atmel-ATMega/CommandeRGB/RGB.hex auto detected as Intel Hex
avrdude: input file /home/olivier/Atmel-ATMega/CommandeRGB/RGB.hex contains 640 bytes
avrdude: reading on-chip flash data:
 
Reading | ################################################## | 100% 0.11s
 
avrdude: verifying ...
avrdude: 640 bytes of flash verified
 
avrdude: safemode: lfuse reads as 43
avrdude: safemode: hfuse reads as D9
avrdude: safemode: Fuses OK
 
avrdude done.  Thank you.
 
leonard:/home/olivier/avrdude-5.6# ./avrdude -C /etc/avrdude.conf -c usbasp -p m8 -B 500 -U flash:w:/home/olivier/Atmel-ATMega/CommandeRGB/RGB.hex -v -v
 
avrdude: Version 5.6, compiled on Apr 27 2009 at 19:27:53
         Copyright (c) 2000-2005 Brian Dean, http://www.bdmicro.com/
 
         System wide configuration file is "/etc/avrdude.conf"
         User configuration file is "/root/.avrduderc"
         User configuration file does not exist or is not a regular file, skipping
 
         Using Port                    : /dev/parport0
         Using Programmer              : usbasp
         Setting bit clk period        : 500.0
avrdude: seen device from vendor ->www.fischl.de<-
avrdude: seen product ->USBasp<-
         AVR Part                      : ATMEGA8
         Chip Erase delay              : 10000 us
         PAGEL                         : PD7
         BS2                           : PC2
         RESET disposition             : dedicated
         RETRY pulse                   : SCK
         serial program mode           : yes
         parallel program mode         : yes
         Timeout                       : 200
         StabDelay                     : 100
         CmdexeDelay                   : 25
         SyncLoops                     : 32
         ByteDelay                     : 0
         PollIndex                     : 3
         PollValue                     : 0x53
         Memory Detail                 :
 
                                  Block Poll               Page                       Polled
           Memory Type Mode Delay Size  Indx Paged  Size   Size #Pages MinW  MaxW   ReadBack
           ----------- ---- ----- ----- ---- ------ ------ ---- ------ ----- ----- ---------
           eeprom         4    20   128    0 no        512    0      0  9000  9000 0xff 0xff
           flash         33    10    64    0 yes      8192   64    128  4500  4500 0xff 0x00
           lfuse          0     0     0    0 no          1    0      0  2000  2000 0x00 0x00
           hfuse          0     0     0    0 no          1    0      0  2000  2000 0x00 0x00
           lock           0     0     0    0 no          1    0      0  2000  2000 0x00 0x00
           calibration    0     0     0    0 no          4    0      0     0     0 0x00 0x00
           signature      0     0     0    0 no          3    0      0     0     0 0x00 0x00
 
         Programmer Type : usbasp
         Description     : USBasp, http://www.fischl.de/usbasp/
 
avrdude: try to set SCK period to 0.0005 s (= 2 kHz)
avrdude: set SCK frequency to 2 kHz
avrdude: AVR device initialized and ready to accept instructions
 
Reading | ################################################## | 100% 0.06s
 
avrdude: Device signature = 0x1e9307
avrdude: safemode: lfuse reads as 43
avrdude: safemode: hfuse reads as D9
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: try to set SCK period to 0.0005 s (= 2 kHz)
avrdude: set SCK frequency to 2 kHz
avrdude: reading input file "/home/olivier/Atmel-ATMega/CommandeRGB/RGB.hex"
avrdude: input file /home/olivier/Atmel-ATMega/CommandeRGB/RGB.hex auto detected as Intel Hex
avrdude: writing flash (640 bytes):
 
Writing | ################################################## | 100% 11.07s
 
avrdude: 640 bytes of flash written
avrdude: verifying flash memory against /home/olivier/Atmel-ATMega/CommandeRGB/RGB.hex:
avrdude: load data flash data from input file /home/olivier/Atmel-ATMega/CommandeRGB/RGB.hex:
avrdude: input file /home/olivier/Atmel-ATMega/CommandeRGB/RGB.hex auto detected as Intel Hex
avrdude: input file /home/olivier/Atmel-ATMega/CommandeRGB/RGB.hex contains 640 bytes
avrdude: reading on-chip flash data:
 
Reading | ################################################## | 100% 10.63s
 
avrdude: verifying ...
avrdude: 640 bytes of flash verified
 
avrdude: safemode: lfuse reads as 43
avrdude: safemode: hfuse reads as D9
avrdude: safemode: Fuses OK
 
avrdude done.  Thank you.

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.

Titre: avrdude
Légende: Executable AVRDude modifié pour Debian GNU/Linux Lenny
Fichier: avrdude
Taille: 616 Ko
Author: Olivier Categories: µC Atmel Tags: , ,
  1. Pas encore de commentaire
  1. Pas encore de trackbacks