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.
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: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:
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:
- Lecture des caractéristiques du µC.
- 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.
- Ecriture de 5 octets dans la mémoire EEPROM à partir de l’adresse 0 avec comme valeur 0, 1, 2, 3 et 4.
- Relecture de la mémoire EEPROM pour vérification.
- Demande d’effacement du µC (mémoire flash et eeprom)
- 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.