ATMega32 USBasp no programando

No uso Arduino, solo trato de programar un ATMega32 simple usando USBASP. Recibiendo este mensaje:

avrdude: verifying ...
avrdude: verification error, first mismatch at byte 0x0000
         0x00 != 0x0c
avrdude: verification error; content mismatch

avrdude done.  Thank you.

Explicación:

Yo uso una placa de desarrollo AVR con 8.00:

Placa de desarrollo AVR

Para que la etiqueta del modelo AVR sea más clara, también hice esta foto ( foto )

Para programar el microcontrolador, uso un USBASP. El cristal del programador es de 12,0 MHz (aunque podría no ser relevante).

programador USBASP

Lo instalé Avrdudeen ubuntu y escribí el siguiente programa:

// main.c

#define F_CPU 8000000UL

#include <avr/io.h>
#include <util/delay.h>

int main(void) {

 DDRD = 255;
 PORTD=255;

 DDRC = 255;

 while(1){

 PORTC=255;
 _delay_ms(200);

 PORTC=0;
 _delay_ms(200);
 }

 return 0;
}

Luego compiló e hizo un archivo hexadecimal:

avr-gcc -w -Os -DF_CPU=8000000UL -mmcu=atmega32 -c -o main.o main.c
avr-gcc -w -mmcu=atmega32 main.o -o main
avr-objcopy -O ihex -R .eeprom main main.hex

Hasta ahora, main.hexel archivo se ha creado correctamente.

Luego, tratando de cargarlo en el microcontrolador:

sudo avrdude -p m32 -c usbasp -B 8 -v -e -u -U flash:w:main.hex

Y el resultado es decepcionante. Me refiero a la última parte:

avrdude: verifying ...
avrdude: verification error, first mismatch at byte 0x0000
         0x00 != 0x0c
avrdude: verification error; content mismatch

avrdude done.  Thank you.

El mensaje completo es:

avrdude: Version 6.0.1, compiled on Oct 21 2013 at 15:55:32
         Copyright (c) 2000-2005 Brian Dean, http://www.bdmicro.com/
         Copyright (c) 2007-2009 Joerg Wunsch

         System wide configuration file is "/etc/avrdude.conf"
         User configuration file is "/home/me/.avrduderc"
         User configuration file does not exist or is not a regular file, skipping

         Using Port                    : usb
         Using Programmer              : usbasp
         Setting bit clk period        : 100.0
         AVR Part                      : ATmega32
         Chip Erase delay              : 9000 us
         PAGEL                         : PD7
         BS2                           : PA0
         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    10    64    0 no       1024    4      0  9000  9000 0xff 0xff
           flash         33     6    64    0 yes     32768  128    256  4500  4500 0xff 0xff
           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
           signature      0     0     0    0 no          3    0      0     0     0 0x00 0x00
           calibration    0     0     0    0 no          4    0      0     0     0 0x00 0x00

         Programmer Type : usbasp
         Description     : USBasp, http://www.fischl.de/usbasp/

avrdude: set SCK frequency to 8000 Hz
avrdude: warning: cannot set sck period. please check for usbasp firmware update.
avrdude: AVR device initialized and ready to accept instructions

Reading | ################################################## | 100% 0.00s

avrdude: Device signature = 0x1e9502
avrdude: erasing chip
avrdude: set SCK frequency to 8000 Hz
avrdude: warning: cannot set sck period. please check for usbasp firmware update.
avrdude: reading input file "main.hex"
avrdude: input file main.hex auto detected as Intel Hex
avrdude: writing flash (162 bytes):

Writing | ################################################## | 100% 0.15s

avrdude: 162 bytes of flash written
avrdude: verifying flash memory against main.hex:
avrdude: load data flash data from input file main.hex:
avrdude: input file main.hex auto detected as Intel Hex
avrdude: input file main.hex contains 162 bytes
avrdude: reading on-chip flash data:

Reading | ################################################## | 100% 0.10s

avrdude: verifying ...
avrdude: verification error, first mismatch at byte 0x0000
         0x00 != 0x0c
avrdude: verification error; content mismatch

avrdude done.  Thank you.

Esta es la forma en que conecté el microcontrolador mientras descargaba el hexarchivo:

Descargando archivo hexadecimal

Cuando compruebo la comunicación, parece estar bien:

sudo avrdude -p m32 -c usbasp -t

La respuesta:

avrdude: warning: cannot set sck period. please check for usbasp firmware update.
avrdude: AVR device initialized and ready to accept instructions

Reading | ################################################## | 100% 0.00s

avrdude: Device signature = 0x1e9502
avrdude> 

Entonces, ¿qué está mal? ¿Qué hacer?


Parece que nada está programado. Lo comprobé con un adaptador de 5 V CC ( foto ) y una placa de pruebas con LED y condensador. Conectar el LED a VCC lo enciende ( foto ), lo que muestra que el LED está funcionando. Conectando a cualquier pin del puerto D no enciende el LED ( foto ) conectando a algunos pines del puerto C enciende el LED ( foto ) y otros no ( foto ). Pero no hay parpadeo. Tenga en cuenta que estoy usando un chip ATMega32 virgen.


Actualizar

Inspirándome en este sitio web (por cierto, ¡no sé alemán!) y algunos otros, finalmente usé el siguiente comando:

sudo avrdude -p m32 -c usbasp -v -b 19200 -B5 -e -U flash:w:main.hex -U lfuse:w:0xe4:m -U hfuse:w:0x99:m

Respuesta:

avrdude: Version 6.0.1, compiled on Oct 21 2013 at 15:55:32
         Copyright (c) 2000-2005 Brian Dean, http://www.bdmicro.com/
         Copyright (c) 2007-2009 Joerg Wunsch

         System wide configuration file is "/etc/avrdude.conf"
         User configuration file is "/home/me/.avrduderc"
         User configuration file does not exist or is not a regular file, skipping
     Using Port                    : usb
     Using Programmer              : usbasp
     Overriding Baud Rate          : 19200
     Setting bit clk period        : 5.0
     AVR Part                      : ATmega32
     Chip Erase delay              : 9000 us
     PAGEL                         : PD7
     BS2                           : PA0
     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    10    64    0 no       1024    4      0  9000  9000 0xff 0xff
       flash         33     6    64    0 yes     32768  128    256  4500  4500 0xff 0xff
       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
       signature      0     0     0    0 no          3    0      0     0     0 0x00 0x00
       calibration    0     0     0    0 no          4    0      0     0     0 0x00 0x00

     Programmer Type : usbasp
     Description     : USBasp, http://www.fischl.de/usbasp/

avrdude: set SCK frequency to 187500 Hz
avrdude: warning: cannot set sck period. please check for usbasp firmware update.
avrdude: AVR device initialized and ready to accept instructions

Reading | ################################################## | 100% 0.00s

avrdude: Device signature = 0x1e9502
avrdude: safemode: lfuse reads as E4
avrdude: safemode: hfuse reads as 99
avrdude: erasing chip
avrdude: set SCK frequency to 187500 Hz
avrdude: warning: cannot set sck period. please check for usbasp firmware update.
avrdude: reading input file "main.hex"
avrdude: input file main.hex auto detected as Intel Hex
avrdude: writing flash (162 bytes):

Writing | ################################################## | 100% 0.11s

avrdude: 162 bytes of flash written
avrdude: verifying flash memory against main.hex:
avrdude: load data flash data from input file main.hex:
avrdude: input file main.hex auto detected as Intel Hex
avrdude: input file main.hex contains 162 bytes
avrdude: reading on-chip flash data:

Reading | ################################################## | 100% 0.07s

avrdude: verifying ...
avrdude: 162 bytes of flash verified
avrdude: reading input file "0xe4"
avrdude: writing lfuse (1 bytes):

Writing | ################################################## | 100% 0.00s

avrdude: 1 bytes of lfuse written
avrdude: verifying lfuse memory against 0xe4:
avrdude: load data lfuse data from input file 0xe4:
avrdude: input file 0xe4 contains 1 bytes
avrdude: reading on-chip lfuse data:

Reading | ################################################## | 100% 0.00s

avrdude: verifying ...
avrdude: 1 bytes of lfuse verified
avrdude: reading input file "0x99"
avrdude: writing hfuse (1 bytes):

Writing | ################################################## | 100% 0.00s

avrdude: 1 bytes of hfuse written
avrdude: verifying hfuse memory against 0x99:
avrdude: load data hfuse data from input file 0x99:
avrdude: input file 0x99 contains 1 bytes
avrdude: reading on-chip hfuse data:

Reading | ################################################## | 100% 0.00s

avrdude: verifying ...
avrdude: 1 bytes of hfuse verified

avrdude: safemode: lfuse reads as E4
avrdude: safemode: hfuse reads as 99
avrdude: safemode: Fuses OK (H:FF, E:99, L:E4)

avrdude done.  Thank you.

¡¡¡Parece que funciona!!!

Ahora, todos los pines encendidos portDencienden el LED brillante y pin C0, y parpadean brillantemente mientras , , dan una luz tenue pero constante al LED y C1no enciende el LED en absoluto.C6C7C2C3C5C4

Sin embargo, estoy muy feliz de escribir algo en el chip, ¿alguien podría explicar qué sucedió?

Respuestas (2)

Parece que el problema estaba en la tasa de baudios. "-b 19200" fue la solución.

Había un aviso en línea: "avrdude: advertencia: no se puede establecer el período de sck. Verifique la actualización del firmware de usbasp".

La configuración de la velocidad en baudios no hace nada con USBasp, que yo sepa. El USBasp es un dispositivo USB y no utiliza un convertidor de USB a serie internamente. Lo mismo se aplica a -B, que establece la tasa de bits pero funciona solo con Atmel JTAG ICE. Para reducir la velocidad de datos con un USBasp, debe haber un puente o una almohadilla de soldadura que necesite cortocircuitar si la frecuencia de reloj objetivo es demasiado baja (<~2MHz).

¡Tuve el mismo problema y cambiar el lfuse a E4 lo solucionó! Creo que 1Mhz puede ser demasiado lento para el programador y la configuración interna de 8Mhz lo soluciona.