Forum: Mikrocontroller und Digitale Elektronik AVRDUDE verification error; content mismatch


von HUE (Gast)


Lesenswert?

Hallo,

ich habe ein Problem mit AVRDUDE. Ich habe einen neuen AVR ATmega8 in 
meine bereits funktionierende Schaltung gewechselt und ihn mit AVRDUDE 
zu programmieren versucht, doch leider bricht das Programm mit folgender 
Fehlermeldung ab:

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

avrdude: safemode: Fuses OK

avrdude done.  Thank you.

*** Error code 1

Mein Makefile sieht folgendermaßen aus:

MCU=atmega8

all:    logger.S
        avr-gcc -mmcu=${MCU} logger.S -o logger.elf
        avr-objcopy -O ihex logger.elf logger.hex

install:
        sudo avrdude -p m8 -P /dev/ttyU0 -b 115200 -c avr109 -U 
flash:w:logger.hex

Das Assemblerfile sieht so aus:

;
;   $Id: logger.S,v 1.2 2009/07/09 09:52:58 wolfram Exp $
;
#define ASSEMBLER 1
#define __SFR_OFFSET 0
#include <avr/io.h>

.text
                                        ; was nun folgt, gehört in den 
FLASH-Speicher

.global main
                                        ; main ist auch in anderen 
Modulen bekannt

main:
;.INCLUDE         "../include/m8def.inc"
;.CSEG
;.ORG        0x0000
            rjmp     reset               ; RESET         0x0000
            reti                         ; INT0          0x0001
            reti                         ; INT1          0x0002
            reti                         ; TIMER2 COMP   0x0003
            reti                         ; TIMER2 OVF    0x0004
            reti                         ; TIMER1 CAPT   0x0005
            rjmp     timer1_compare      ; TIMER1 COMP A 0x0006
            reti                         ; TIMER1 COMP B 0x0007
            reti                         ; TIMER1 OVF    0x0008
            rjmp     timer_0_overfl      ; TIMER0 OVF    0x0009
            reti                         ; SPI, STC      0x000A
            rjmp     receive_byte        ; USART RXC     0x000B
            reti                         ; USART URDE    0x000C
            reti                         ; USART TXC     0x000D
            rjmp     ADC_complete        ; ADC           0x000E
            reti                         ; EE_RDY        0x000F
            reti                         ; ANA_COMP      0x0010
            reti                         ; TWI           0x0011
            reti                         ; SPM_RDY       0x0012
reset:




Für Eure Hilfe bedanke ich mich im voraus.

HUE

: Verschoben durch User
von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Dein ISP-Takt ist zu schnell für die 1 MHz CPU-Frequenz, mit denen
ein AVR typischerweise ausgeliefert wird.  Füge mal -B10 in die
Kommandozeile hinzu.

von HUE (Gast)


Lesenswert?

Hallo,

leider hat -B10 keine Auswirkung auf das Ergebnis. Der Fehler ist immer 
noch der gleiche.

Hat noch jemand eine Idee?

Mit freundlichen Grüßen

HUE

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Dann musst du wohl mal dein Programmiergerät befragen.  Ich sehe
gerade, dass es ja ein AVR109 ist, da wirkt der Parameter -B10
auch nicht, da es bei AVR109 keine im Protokoll vorgesehene
Methode gibt, den ISP-Takt zu modifizieren.

von HUE (Gast)


Lesenswert?

Hallo,

ich habe schon verschiedene Settings probiert, doch keinen Erfolg. Mir 
ist auch ein Rätsel, warum vorher die Schaltung programmiert werden 
konnte, jetzt nach dem Chipwechsel nicht mehr.

Ich habe auf dem Board einen 16Mhz Quartz verbaut. Kann dies das Problem 
für die fehlschlagende Kommunikation sein?

MfG

HUE

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

HUE schrieb:

> Ich habe auf dem Board einen 16Mhz Quartz verbaut. Kann dies das Problem
> für die fehlschlagende Kommunikation sein?

Die Kommunikation (mit dem Programmer) schlägt ja gar nicht fehl.

Wo ist der 16-MHz-Quarz drauf, auf dem Programmer oder auf dem
Targetboard?

Ein frischer AVR wird mit 1 MHz getaktet und muss mit weniger als
250 kHz ISP-Takt programmiert werden.  Das muss den Programmer
beherzigen -- AVRDUDE kann (beim AVR109-Protokoll) da nichts dran
ändern.

von HUE (Gast)


Lesenswert?

Hallo und guten Abend,

ich habe soeben die Fuse Bytes High and Low gelesen und festgestellt, 
daß sie den Werkseinstellungen entsprechen. Dies ging ohne Probleme zu 
Lesen, wenn ich aber diese Bytes schreiben will, geht es wieder schief?

Was soll denn das sein, das ich hier so mit Mißerfolg verwöhnt werde. 
;-)

MfG

HUE

von HUE (Gast)


Lesenswert?

Hallo,

ich konnte die Fuse Bytes doch noch setzen, ich hatte nur einen Fehler 
in der Anweisung zum Setzen. Leider bleibt das Problem des Flashens von 
Programmen ein Problem.

Fazit: Die Einstellungen von AVRDUDE sind in Ordnung, da die Fuse Bytes 
ordnungsgemäß gelesen und geschrieben werden.

Nur das Updaten des Flash funktioniert nicht.

Hat jemand noch einen Tip zum Schluß?

Mit freundlichen Grüßen

HUE

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

HUE schrieb:

> Hat jemand noch einen Tip zum Schluß?

Ja, den, den ich dir die ganze Zeit schon gebe und den du beharrlich
ignorierst: bring deinen Programmer dazu, den ISP-Takt runterzudrehen.

Ja, man kann mit etwas zu viel Takt trotzdem noch fuses lesen, aber
beim Programmieren von Massendaten kracht es dann.

Alternativ kannst du die Fuses so stellen, dass der AVR höher getaktet
wird (vom externen Quarz betreiben oder schnelleren RC-Oszillator
wählen).

Falls es das nicht ist (d. h., du hast es nachgemessen), dann müsstest
du deinen Programmer überprüfen.  Welchen du genau benutzt, hast du
uns bislang sowieso noch nicht verraten.

von HUE (Gast)


Lesenswert?

Hallo nochmals,

ich habe, da ich sehr unter Zeitdruck stand, die Stategie geändert und 
meine Schaltung mit GAVRASM und PONYPROG zum laufen gebracht. Ich habe 
echt Nerven gelassen, da ich auch noch die Rechner und das OS wechseln 
mußte.

Doch nun zum alten Problem:

Ich habe eine Testschaltung mit einem Mega8 ohne ext. Oszillator oder 
Quartz. Zum Flashen nehme ich einen Programmer aus dem Internetshop: 
www.myirshop.de, welcher heißt: 'ISP USB Programmer für Atmel AVR 
Studio'.

Dann habe ich meine Quellen mit folgendem Makefile erzeugt und geflasht:

MCU=atmega8

all:    logger.S
        avr-gcc -mmcu=${MCU} -c logger.S
        avr-ld -mavr2 logger.o -o logger.elf
        avr-objcopy -O ihex logger.elf logger.hex

install:
        sudo avrdude -p m8 -P /dev/ttyU0 -b 115200 -c avr109 -U 
flash:w:logger.hex:i

Die Assembler Datei habe ich angehängt. Der Fehler ist immer der 
gleiche:


avrdude: 244 bytes of flash written
avrdude: verifying flash memory against logger.hex:
avrdude: load data flash data from input file logger.hex:
avrdude: input file logger.hex contains 244 bytes
avrdude: reading on-chip flash data:

Reading | ################################################## | 100% 
0.14s



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

avrdude: safemode: Fuses OK

avrdude done.  Thank you.

*** Error code 1

Stop in /home/wolfram/source/avr/logger_mega8 (line 9 of Makefile).

Für Eure Hilfe danke ich im Voraus.

MfG

HUE

von HUE (Gast)


Angehängte Dateien:

Lesenswert?

Anhang vergessen!

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.