Forum: Mikrocontroller und Digitale Elektronik mega2560 Programm doppelt im Flash??


von Friedhelm Altmann (Gast)


Angehängte Dateien:

Lesenswert?

Hallo,

ich habe folgendes Problem welches mich jetzt seit Tagen beschäftigt.
Es soll ein Bootloader per ISP auf einen mega2560 übertragen werden.
Der Upload funktioniert auch ohne Fehlermeldung. Laut map-Datei ist die 
Adresse für den Bootloaderbereich auch richtig.
Das Bootloaderprogramm arbeitet auch aber es schreibt nicht in den 
Flash. Ich denke weil es durch den avrisp an die falsch Adresse 
geschrieben wurde.

Im Anhang habe ich eine mit avrdude ausgelesene hex-Datei in dem das 
Programm angeblich 2x vorhanden ist.

Meiner Meinung nach kann es doch nur der avrisp sein oder was meint Ihr?
Gibt es evtl. ein Firmware Update für diesen Proger?
Oder habe ich im Makefile was falsch gemacht?

Ich hoffe jemand hat da Erfahrung.

------------------------------------------------------------------------ 
-

FUSES:
BOOTSZ0 =0
BOOTSZ1 =1
BOOTRST =0

Hardware:
mega2560 auf einem arduino Board
avrisp clone wie diesen:

http://www.srt-versand.de/index.php?sid=6ca883ea80d2057c6163b89efa433c81&cl=details&anid=8dd49932d00865747.65532223&listtype=search&searchparam=5050112

Software:
avr-gcc (GCC) 4.3.4 unter Linux
avrdude

von holger (Gast)


Lesenswert?

>Im Anhang habe ich eine mit avrdude ausgelesene hex-Datei in dem das
>Programm angeblich 2x vorhanden ist.

Nicht nur angeblich, es ist zweimal drin.

von Friedhelm Altmann (Gast)


Lesenswert?

ja im hex-File steht es 2x drin.
Aber ist das wirklich auch das was im Flash steht?
Oder bekomme ich falsche Werte vom Proger?
Und wenn es 2x drin ist wie ist es da rein gekommen?

verzwicktes Problem finde ich.

von Friedhelm Altmann (Gast)


Lesenswert?

nach vielen Stunden Internetrecherche bin ich nun immer noch nicht 
schlauer wo der Fehler zu suchen ist.

ich habe mal das hex-File so angepasst, wie es aussehen sollte 
(soll.hex) und hochgeladen. Danach wieder runtergeladen (ist.hex) und 
leider ist das Programm immer noch 2x im Flash.

Könnte bitte jemand mit einem mega2560 mal testen ob das bei Ihm auch so 
ist.

Im Internet habe ich z.B. gelesen das "nur" 128kB vom Flash genutzt 
werden können. Da das Programm ja 2x exakt am Ende der beiden 128kB 
Hälften stehen könnte ich mir das vorstellen.

Wäre auch egal weil 128kB sind eh mehr als ausreichend.

Mein Problem ist halt das der Bootloader den Flash nicht beschreibt.

Bitte um Hilfe um den Fehler weiter einzukreisen.

Vielleicht hat jemand einen Bootloader auf einem 2560 laufen und hat ein 
paar Tips.

von Friedhelm Altmann (Gast)


Angehängte Dateien:

Lesenswert?

hier noch die beiden Files und die map und lss Dateien

von Thomas E. (thomase)


Angehängte Dateien:

Lesenswert?

Ich habe mal folgendes gemacht:

deine soll.hex geflasht.
Automatisches Verify nach Programmierung: OK.
Nochmaliges Verify: Fehler.
Flash ausgelesen und abgespeichert.
Verify gegen diese Datei: OK.

Meinen Bootloader geflasht
Verify:OK.
Kann man wiederholen, bis man doof geworden ist.

Flash ausgelesen und abgespeichert, gelöscht, selbige Datei geflasht, 
Verify gegen die Originalatei: OK.

Ich würde mal tippen, daß irgendwas mit deinem Hex-File nicht stimmt.

Flash mal das angehängte Hex-File auf deinen Controller, dann auslesen, 
abspeichern und wieder anhängen. Wenn die Hardware funktionert, müsste 
dieses File dann ja mit meinem Originalfile auf meinem Controller beim 
Verify OK sein.

So sieht übrigends das Hexfile von meinem, funktionierenden, Bootloader 
aus.

Das map-file ist das automatisch erzeugte.

Friedhelm Altmann schrieb:
> Im Internet habe ich z.B. gelesen das "nur" 128kB vom Flash genutzt
> werden können.
das ist eine andere Geschichte. Da gibt es ein kleines Problem beim GCC. 
Das hat hiermit aber nichts zu tun.

mfg.

von Thomas E. (thomase)


Angehängte Dateien:

Lesenswert?

Hier ist das map-File.

Hardware ist auch Arduino ohne den Arduino-Kram.
XP, Studio 4.18, JTAGICE MKII

mfg.

von Thomas E. (thomase)


Angehängte Dateien:

Lesenswert?

Blödsinn. .map

Makefile!

Das steht bei dir drin:

# Linker flags.
#  -Wl,...:     tell GCC to pass this to linker.
#    -Map:      create map file
#    --cref:    add cross reference to  map file
LDFLAGS = -Wl,-Map=$(TARGET).map,--cref
LDFLAGS += $(EXTMEMOPTS)
LDFLAGS += $(PRINTF_LIB) $(SCANF_LIB) $(MATH_LIB)

Bei mir sieht das so aus:


## Linker flags
LDFLAGS = $(COMMON)
LDFLAGS += -Ttext=0x3F800 -Wl,-Map=Bootloader.map

mfg.

von Friedhelm Altmann (Gast)


Angehängte Dateien:

Lesenswert?

Hallo Thomas,

erst mal vielen Dank für deine Mühe.
Anbei das Hex-File welches ich erhalten wenn ich dein Hex-File wieder 
auslese.

Zwischenzeitlich habe ich mal den Fastbootloader von Peter Dannegger auf 
meinen µC geflasht und dann ein Blink-Programm über die UART 
aufgespielt.
Funktioniert alles nur wenn ich das HEX-File auslese ist der Bootloader 
wieder 2x im Flash und jetzt kommts -----> das Blink Programm ist nicht 
im Speicher!!!!!
müsste ja an Adresse 0000 stehen. steht es nicht und auch nirgendwo 
anders.

Ich hab nur noch ????

von Thomas E. (thomase)


Angehängte Dateien:

Lesenswert?

Friedhelm Altmann schrieb:
> Ich hab nur noch ????

Hab' ich irgendwie auch.

Die Datei macht folgenden Fehler: siehe Anhang.

Schick mal dein Projekt rüber. Ich kompilier das mal bei mir.

mfg.

von Thomas E. (thomase)


Lesenswert?

Jetzt was ganz tolles:

Die von dir zurückgesendete Datei geflasht, Verify gegen meine 
Originaldatei: OK.

Meine Originaldatei geflasht, Verify gegen die von dir zurückgesendete:
Fehler siehe letzter Post.

Hat dein Nachbar in den letzten Tagen ein Huhn geschlachtet und 
beträufelt eine Strohpuppe mit dem Blut?

mfg.

von Friedhelm Altmann (Gast)


Angehängte Dateien:

Lesenswert?

anbei meine main.c diese soll erst mal nur eine Page im Flash mit 0xABCD 
füllen. vermutlich funktioniert es sogar nur beim auslesen des Flash ist 
der Speicherbereich eben 0xFFFF

Mein Makefile liefert beim compilieren folgende Anzeige.
Evtl. sind einige Einstellungen überflüssig aber bisher hat es damit 
super geklappt.

Kannst du einen Fehler im avrisp schon ausschließen?

Compiling: main.c
avr-gcc -c -mmcu=atmega2560 -I. -gdwarf-2 -DF_CPU=16000000UL  -Os 
-funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums -Wall 
-Wstrict-prototypes -Wa,-adhlns=main.lst  -std=gnu99 
-Wp,-M,-MP,-MT,main.o,-MF,.dep/main.o.d main.c -o main.o

Linking: main.elf
avr-gcc -mmcu=atmega2560 -I. -gdwarf-2 -DF_CPU=16000000UL  -Os 
-funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums -Wall 
-Wstrict-prototypes -Wa,-adhlns=main.o  -std=gnu99 
-Wp,-M,-MP,-MT,main.o,-MF,.dep/main.elf.d main.o  --output main.elf 
-Wl,-Map=main.map,--cref -mrelax -Wl,--section-start=.text=0x03F800

Creating load file for Flash: main.hex
avr-objcopy -O ihex -R .eeprom main.elf main.hex

Creating load file for EEPROM: main.eep
avr-objcopy -j .eeprom --set-section-flags=.eeprom="alloc,load" \
  --change-section-lma .eeprom=0 -O ihex main.elf main.eep
avr-objcopy: --change-section-lma .eeprom=0x00000000 never used

Creating Extended Listing: main.lss
avr-objdump -h -S main.elf > main.lss

Creating Symbol Table: main.sym
avr-nm -n main.elf > main.sym

Size after:
main.elf  :
section           size     addr
.text              482   260096
.stab             1896        0
.stabstr            84        0
.debug_aranges      32        0
.debug_pubnames     49        0
.debug_info        386        0
.debug_abbrev      248        0
.debug_line        379        0
.debug_frame        48        0
.debug_str         233        0
.debug_loc         119        0
Total             3956



Errors: none
-------- end --------

von Thomas E. (thomase)


Angehängte Dateien:

Lesenswert?

Bei mir läuft das.

mfg.

von Friedhelm Altmann (Gast)


Lesenswert?

ja das dachte ich mir. so kompliziert ist das Programm ja nicht.

Jetzt sehe ich 2 mögliche Fehlerquelle

meinen avrisp

oder

avrdude: Version 5.10, compiled on Mar 23 2010 at 15:03:00
         Copyright (c) 2000-2005 Brian Dean, http://www.bdmicro.com/
         Copyright (c) 2007-2009 Joerg Wunsch

ich werde dann mal noch was googlen wegen der avrdude version

und dann muss ich wohl einen anderen proger kaufen


jedenfalls vielen dank für deine tatkräftige Hilfe

so konnte ich den Fehler stark eingrenzen

Viele Grüße

Fred

von Thomas E. (thomase)


Lesenswert?

Die von dir kompilierte soll.hex läuft bei mir auch.

Hatte nur ein Verify gemacht, daß beim ersten Mal OK war und dann nicht.

Ist ja logisch, wenn das Programm ins Flash schreibt. Da war ich etwas 
auf dem Holzweg.

Die Lösung heisst wohl AVRISP MKII.

Allerdings das Hexfile in die Binärdaten umwandeln macht ja nicht der 
Programmer, sondern der avrdude. Das würde deinen Programmer dann wieder 
entlasten.

Aber vielleicht können die auch nicht zusammen wegen der Adressen >64K.

Kannst du den Programmer nicht unter Windows mit Studio 4.18 testen?

mfg.

von Peter D. (peda)


Lesenswert?

Friedhelm Altmann schrieb:
> Funktioniert alles nur wenn ich das HEX-File auslese ist der Bootloader
> wieder 2x im Flash und jetzt kommts -----> das Blink Programm ist nicht
> im Speicher!!!!!
> müsste ja an Adresse 0000 stehen. steht es nicht und auch nirgendwo
> anders.

Dann ist ein Bug in Deinem Programmer oder in der Programmiersoftware.
Es wird 2* der ober 64kB Block ausgelesen.


Peter

von Friedhelm Altmann (Gast)


Lesenswert?

ich habe das ganze heute auf der Arbeit nochmal unter XP mit der myAVR 
Software getestet und denke es ist wohl ganz sicher der Progger.

Werde mir dann gleich mal einen bestellen.
Hat jemand Erfahrung mit denen von myAVR?

http://shop.myavr.de/index.php?sp=artlist_kat.sp.php&katID=16

Oder reicht es einen aktuelleren von Stange zu kaufen?

Vielen Dank nochmal für die Hilfe

Fred

von Thomas E. (thomase)


Lesenswert?

Friedhelm Altmann schrieb:
> Werde mir dann gleich mal einen bestellen.

Erste Wahl ist das Original, der AVRISP MKII von Atmel.

Aber Vorsicht: In der Bucht werden jede Menge Clones angeboten, die 
nicht halten, was Atmel verspricht.

mfg.

von Jens (Gast)


Lesenswert?

also ich hab den light von myAVR für 15€ und der tuts definitiv wie 
versprochen auch mit dem m2560 ;-)



Gruß Jens

von Friedhelm Altmann (Gast)


Lesenswert?

hab ich mir heute bestellt

dann kanns endlich losgehen :-)

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.