LPC2478 - Problem mit Bootloader

Gast #2593824
Lesenswert?
• ▲
▼
Hallo,

ich habe derzeit ein Problem mit einem LPC2478.

Meine Applikation (einige Daten über die UART empfangen, ein paar Tasten 
auslesen und diverse Werte auf einem TFT ausgeben) habe ich soweit 
ziemlich stabil in Betrieb.

Jetzt habe ich noch einen SD-Karten Bootloader (NXP Application Note 
AN10835) implementiert.

Den Bootloader habe ich fix und fertig so übernommen - habe nur ein paar 
Anpassungen bzgl. der Ports usw. getätigt.

Den Bootloader habe ich erstmal mit der Keil Demo übersetzt, meine 
eigentliche Applikation habe ich aber mit WinArm erstellt.

Der Bootloader funktioniert auch soweit. Ich kann mein 
Applikationsprogramm mit WinArm übersetzen, die Binätdatei auf die 
SD-Karte schieben und anschließend den Controller über das Bootloader 
Terminal flashen.

Das Applikationsprogramm wird eigentlich auch korrekt ausgeführt, 
allerdings mit einem kleinen (oder besser gesagt GROßEN) Haken...

Ich habe im internen RAM ein paar große Arrays angelegt, in denen ich 
div. Werte zwischenspeichere.
Nun tritt das Phänomän auf, dass diese Werte teilweise willkürlich 
überschrieben und verändert werden.
Die Größen der Arrays und auch der Zugriff über irgendwelche Pointer 
etc. habe ich bereits mehrmals überprüft - alles io.

Ich steh inzwischen wirklich auf dem Schlauch...

Noch ein paar Fakten:
---------------------
Der Bootloader ist auf 0x00000000 gelinkt.
Die Applikation ist auf 0x10000 gelinkt.
Der RAM-Bereich der Appliaktion beginnt ab 0x40000040
Im Startup File der Applikation kopiere ich die Exception Vectors nach 
0x40000000 und aktiviere das Memory Mapping.

Was ich nun durch rumspeilen festgestellt habe ist folgendes:
Wenn ich im Linkerskript des Applikationsprogrammes den RAM-Bereich erst 
bei 0x40000100 (anstatt bei 0x40000040) beginnen lasse, funktioniert 
alles einwandfrei.
Irgenwo und irgendwie kommt sich etwas in die Quere.
Im MAP-File konnte ich allerdings nichts Verdächtiges feststellen.

Probleme mit dem Stack schließe ich inzwischen auch aus, da ich diese 
Bereich zum testen z. Zt. alle auf 0x400 stehen habe...

Hat jemand von Euch eine Iddee?

Gruß,

Christian
Gast #2594051
Lesenswert?
• ▲
▼
>Was ich nun durch rumspeilen festgestellt habe ist folgendes:
>Wenn ich im Linkerskript des Applikationsprogrammes den RAM-Bereich erst
>bei 0x40000100 (anstatt bei 0x40000040) beginnen lasse, funktioniert
>alles einwandfrei.
>Irgenwo und irgendwie kommt sich etwas in die Quere.
>Im MAP-File konnte ich allerdings nichts Verdächtiges feststellen.

Wenn der Bootloader das neue Programm geflasht hat solltest
du dringend einen Reset z.B. durch Watchdog oder so durchführen.
Machst du das?
Gast #2594067
Lesenswert?
• ▲
▼
Hallo Holger,

erstmal danke für die Rückmeldung.

Nein, z. Zt. springe ich nach dem Flashen direkt zur Applikation.

Deinen Vorschlag werde ich mal ausprobieren.

Du meinst also, dass nach dem Flashen evtl. irgendwelche Resourcen noch 
nicht freigegeben sind?

Gruß,
Christian
Gast #2594099
Lesenswert?
• ▲
▼
>Du meinst also, dass nach dem Flashen evtl. irgendwelche Resourcen noch
>nicht freigegeben sind?

Nein, ich meine das dein Bootloader dieselben Resourcen
benutzt wie deine Applikation. Der weiss möglicherweise
gar nichts von deiner Applikation. Und dann überschreibt er
dir halt RAM Bereiche weil er sie selber auch nutzt.

Also sauberen Reset hinlegen damit aufgeräumt wird.
Gast #2594126
Lesenswert?
• ▲
▼
Achso - nein.

Der Ablauf bei meinem Prog. ist folgender:

1. Reset
2. Bootloader startet (immer)
3. Flashen der Applikation (falls gewünscht)
4. Sprung nach 0x10000
4.1 Neuinitialisieung des Controllers, Applikation

Die Applikation selbst kann den BL nicht mehr aufufen.
Das heißt, dass der BL nach dem Start der Applikation tod da liegt - der 
wird bis zum nächsten Reset ja nicht mehr verwendt und läuft ja nicht 
mehr.

Hab ich da evtl. noch was nicht beahtet?

Gruß,
Chistian
Gast #2594179
Lesenswert?
• ▲
▼
>Der Ablauf bei meinem Prog. ist folgender:
>
>1. Reset
>2. Bootloader startet (immer)
>3. Flashen der Applikation (falls gewünscht)
>4. Sprung nach 0x10000
>4.1 Neuinitialisieung des Controllers, Applikation

Ok, räumt der Bootloader auch hinter sich auf?
Also benutzte Interrupts ausschalten, UART abschalten,
DMA abschalten usw? Das volle Programm. Bevor du in
die Applikation springst sollte der Controller so
sauber sein wie nach einem Reset.

Antwort schreiben

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.