SD Bootloader kompiliert, schreibt sich in den Speicher aber tut NIX, Atmega32, C, AVRStudio

Gast #1008750
Lesenswert?

Hallo Gemeinde!
Ich brauche mal wieder Hilfe. Ich fertige ein Update nach dem anderen 
für meine Anwendung und die soll auf 12 verschiedenen Megas laufen. Nur 
2 davon haben einen Programmieradapter in Reichweite. Da eine SD-Karte 
angeschlossen ist lag es nahe an den Bootloader von Stefan zu denken.
Ich kompiliere den Bootloader und spiele das .hex-file auf. Danach lese 
ich testweise aus und erhalte ein hex-file was ca. so aussieht:

...
1077B000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD9
:1077C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC9
:1077D000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB9
:1077E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA9
:1077F000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF99
:107800000C942A3C0C94473C0C94473C0C94473C09
:107810000C94473C0C94473C0C94473C0C94473CDC
:107820000C94473C0C94473C0C94473C0C94473CCC
...

Für mich heisst das, das die Anwendung wie gewollt ab 0x7800 in den Mega 
geschrieben wurde. Fuses im Anhang.

Leider macht er nichts. Ich habe Testweise mal gleich zu Beginn der main 
einen Pin high gesetzt. Er kommt nicht einmal da an.

Hat jemand eine Idee, wo der Fehler liegen könnte?

Ich danke Euch!
Angehängte Dateien:
Gast #1008780
Lesenswert?

Ich habe nun einmal testweise eine funktionierende Anwendung ab 0 
geschrieben. Die wird nicht gestartet. Der Mega sucht also im Bootsektor 
wie er soll. Der Bootloader ab 0 geschrieben startet (natürlich ohne 
bootrst) auch nicht. Das Problem scheint also das Kompilat des 
Bootloaders zu sein.
Hier habe ich nur die empfohlenen Dinge im Makefile geändert:

MCU = atmega32
F_CPU =  4000000
FORMAT = ihex
DEVID = 0x12345678
TARGET = bootloader
BOOTLOADERSTARTADR = 0x7800 (bzw. derzeit testweise 0x0000)
BOOTLDRSIZE = 0x800

und dann mit make all kompiliert (keine Warnings,Errors oÄ). Das 
hex-file habe ich dann aus AVR Studio gebrannt. (USBProg mit AVRISP mk 
II clone).

Was kann da falsch gelaufen sein?
Gast #1008830
Lesenswert?

Ok, ich bin jetzt weiter. Der Bootloader startet. Nun habe ich ein neues 
Problem. Mein Programm das aus AVR Studio kompiliert 22k braucht 
benötigt nun wenn ich das hex mit hex2bin bearbeite über 30k und passt 
darum nicht mehr. Gibt es ein brauchbareres Tool dafür oder muss ich von 
Hand aus kompilieren. Ein Makefile für mein doch recht umfassendes 
Projekt zu erstellen scheint mir sehr aufwändig...
Gast #1008851
Lesenswert?

Ah, ok. Danke, cool. Man braucht also nen Hellseher um zu erfahren ob 
jemand ein Tool kennt das aus hex-files .bins in anständiger Größe 
macht. Oder hast Du einfach nur die ersten paar Zeilen gelesen und Dir 
gedacht: "mann, da muss ich jetzt aber unbedingt austeilen. ich fühl 
mich heute wieder so klein"?
Gast #1008855
Lesenswert?

>Oder hast Du einfach nur die ersten paar Zeilen gelesen und Dir
>gedacht: "mann, da muss ich jetzt aber unbedingt austeilen. ich fühl
>mich heute wieder so klein"?

Nein. Möglicherweise benutzt du sogar mein hex2bin ;)
Ich hab jetzt aber keinen Bock mehr dir zu antworten.
#1008951
Lesenswert?

HeGr wrote:
> Mein Programm das aus AVR Studio kompiliert 22k braucht
> benötigt nun wenn ich das hex mit hex2bin bearbeite über 30k und passt
> darum nicht mehr.

Da hilft kein Tool, zu groß bleibt zu groß.
Vermutlich hast Du den Bootloader mit reingemanscht.

Der Bootloader darf nie in die Applikation mit rein !!!

Entweder verweigert er dann das Programmieren oder er zerstört sich 
selber.


Peter
Gast #1009160
Lesenswert?

@ HeGr

>Wer lesen kann ist klar im Vorteil: Fillbytes. Hmm... sollte ich die aus
>dem Hex einfach entfernen?

Nein das geht nicht. Die Bin Datei muß so groß sein (30720 Bytes).
Ich frag mich nur was bei dir da jetzt nicht passt?
Die höchste eingelesene Adresse ist 0x77FF und passt damit
bis aufs Byte genau vor den Bootloader.
Gast #1009349
Lesenswert?

Ich suche den Fehler noch ein bisschen. Ich habe halt einfach mal eine 
Funktion geschrieben die 5 mal einen Pin toggled und ne LED 
angeschlossen.
Den Aufruf habe ich vor den return bei checkfilesize geschrieben. Die 
Led blinkt also und es passiert weiter nichts.
Ich habe das Hex (kompiliert mit dem wie in dem howto manipulierten 
Makefile) mal selbst aufgespielt und leider einige Probleme. Die 
Anwendung läuft zwar aber nicht wie gewohnt. Worans da hapert weiss ich 
absolut nicht aber auf einmal wird nur noch die Hälfte dargestellt oder 
bestimmte Funktionsaufrufe führen auf einmal zum Reset. Ich wünschte, es 
gäbe einen deutlich simpleren Bootloader. Alles was mit der Manipulation 
des Hauptprogramms zu tun hat ist für mich nämlich völlig unnötig. Ich 
bräuchte was, was überprüft ob es eine Datei bestimmten Namens auf der 
SD-Karte gibt und diese dann einspielt. Existiert die Datei nicht, 
startet er an 0x0000. Versioning etc. sind für mich gar nicht wirklich 
wichtig...
Leider bin ich zu unbedarft um das selbst zu realisieren. Ich melde mich 
wenn ich auf der fehlersuche weiterkomme.
Danke!

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren