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
>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.
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.
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.
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.
Hier ist das map-File. Hardware ist auch Arduino ohne den Arduino-Kram. XP, Studio 4.18, JTAGICE MKII mfg.
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.
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 ????
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.
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.
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 --------
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
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.
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
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
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.
also ich hab den light von myAVR für 15€ und der tuts definitiv wie versprochen auch mit dem m2560 ;-) Gruß Jens
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.