Forum: Mikrocontroller und Digitale Elektronik Problem mit Bootloader SD/ATMega168


von Niklaus S. (niklaus_s)


Lesenswert?

Hallo,

ich weiss nicht mehr weiter.

Ich habe einen Bootloader geschrieben der von einer SD Karte (Danke an 
Stefan Seegel für die mmc_lib.h) ein intel hex file auf den ATMega 
schreibt. Das funktioniert soweit auch. Mein Problem ist nun:

Wenn ich den Bootloader mit avrdude flashe, und dann den Strom wegnehme 
und wieder anschalte, schreibt der Bootloader das File von der Karte in 
den Flash, startet den auch, der hängt dann aber irgendwie.
Wenn ich nun den gleichen Code manuell mit avrdude flashe dann läuft der 
tiptop.

Den Dump vom Flash (0000 - 3k, so gross ist das Programm) ist beide Male 
identisch, ob vom Bootloader oder manuell.

Der Bootloader wird in beiden Fällen durchlaufen und endet mit einem

void (*app_start)(void) = 0x0000;

Den einzigen Unterschied den ich sehe ist, dass nach dem 
Bootloaderflashen nach dem Code alles mit FF aufgefüllt ist, beim 
manuellen flashen der avrdude nur bis zum Ende des Codes dumpt.

Gruss
 Nik

von Sascha W. (sascha-w)


Lesenswert?

Niklaus S. schrieb:
> Wenn ich den Bootloader mit avrdude flashe, und dann den Strom wegnehme
> und wieder anschalte, schreibt der Bootloader das File von der Karte in
> den Flash, startet den auch, der hängt dann aber irgendwie.
> Wenn ich nun den gleichen Code manuell mit avrdude flashe dann läuft der
> tiptop.
wenn ich das richtig verstehe:
Nach dem Reset Flash't der Bootloader jedesmal das File von der Karte 
(wenn vorhanden)!?
dann teste doch mal folgendes:
Flashen von Karte, dann Strom weg, Karte raus und wieder starten ...
das währen doch dann die selben Bedingungen wie nach dem flashen mit 
avrdude da der Inhalt des Flash's ja offenbar identisch ist sollte es 
eigentlich laufen

> Den einzigen Unterschied den ich sehe ist, dass nach dem
> Bootloaderflashen nach dem Code alles mit FF aufgefüllt ist,
FF sollte bis mindestens zur nächsten Page zu finden sein
> beim
> manuellen flashen der avrdude nur bis zum Ende des Codes dumpt.
beim zurücklesen sollt er doch bis zum Flashende auslesen - oder nicht

Sascha

von Maxx (Gast)


Lesenswert?

Hast du die Interrupt Vectoren in den Bootloader verlegt und nicht 
wieder zurück?
Die Interruptquellen deaktiviert bevor du in die Applikation springst?

von Niklaus S. (niklaus_s)


Lesenswert?

Hallo Sascha,

1. Der Bootloader Vergleicht das File, uns sucht sich einen SysID Tag 
mit Version, nur wenn die verschieden sind wird geflash't. (Das bracht 
ca. 1. sec.)

2. Habe ich natürlich auch schon probiert.
- Karte raus
- Bootloader flashen
- dump
- Karte rein
- dump komplettes Prog. mit folgenden FF
  hängt aber irgendwie
- Strom hin - Strom weg
  hängt immer noch
- Prog flashen
  läuft
- dump (diesmal ohne FF nach dem Prog - könnte am avrdude liegen
        aber myAVR ProdTool mach das auch so)
- dumps verglichen - sind identisch

und immer noch das grosse ?

Danke

von holger (Gast)


Lesenswert?

>- dump komplettes Prog. mit folgenden FF
>  hängt aber irgendwie

Wer macht den dump? Avrdude oder dein Programm?

Vorschlag:

Dein Programm (nicht den Bootloader) flashen mit Avrdude.
Dann das geflashte Programm mit Avrdude in eine HEX-Datei auslesen und 
sichern.

Bootloader flashen. Programm von Karte mit Bootloader flashen.
Stecker raus, Karte raus. Stecker rein und das geflashte Programm mit 
Avrdude in eine HEX-Datei auslesen und sichern.

Die beiden HEX Dateien stellst du dann mal hier rein.

von Niklaus S. (niklaus_s)


Lesenswert?

Hallo Holger, und die anderen ..

Habe den Fehler gerade gefunden:

Wenn ich das Prog mit avrdude flashe dann finded zuerst ein erase cycle 
statt, der dann den Bootloader löscht. Wenn kein Bootloader da ist, ist 
der ATmega so intelligent es bei 0000 zu probieren.
Da der Bootloader in den 2k so knapp ist habe ich alle Blinker 
abgestellt.

Das erklärt auch die Dumps: wenn nichts mehr kommt wird abgeschnitten. 
Mit myAVR ProgTool und avrdude.

Das nächste Problem wäre dann rauszufinden warum der mmc_init blockiert 
wenn ich den 2* aufrufe. Da werde ich dann aber selber weitersuchen 
müssen.

Danke allen.

Sollte das mal fertig sein, werde ich dann den Bootloader hier 
reinstellen. Ist im Prinzip der gleiche wie der von Holger, aber er 
arbeitet mit unveränderten Intel.hex files, und vergleicht einen 
SysID-Version String im Code. Den kann man dann einfach via ftp auf das 
MyEthernet oder den AVR-Net-IO hochladen und gut is.

Noch einen schönen Abend.

Nik

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.