Problem Atmega Bootloader Flash schreiben

OP #3365389
Lesenswert?
• ▲
▼
Hallo,
ich habe einen Bootloader in Assembler für ein Atmega1284P programmiert.
Dazu habe ich in VB ein Programm geschrieben, was die Binärdatei an den 
Bootloader sendet (PC=>USB=>UART).

Der Ablauf funktioniert auch aber der Flash wird nicht beschrieben.

Ich bekomme die richtigen Binärdaten in meinen Sram (jeweils eine Page).
Danach fülle ich die temporäre Page.
Anscchließend lösche ich den Flash.
Zum Schluß schreibe ich die temporäre Page in den Flash.
Es funktioniert alle bis zum Löschen der Page im Flash.
Nach dem Schreiben stehen aber immernoch 0xFF auf der ganzen Page.

An dem Z-Pointer kann es doch eigentlich nicht liegen, da ja der gleiche 
Z-Pointer die Page richtig löscht.
Dummerweise kann man den Inhalt der temporären Page nicht einsehen.
Könnte ich da etwas übersehen haben?


Wäre nett wenn jemand einen Tipp oder Beispiel zum Füllen der temporären 
Page geben kann.
Gast #3365401
Lesenswert?
• ▲
▼
Gad Zinkler schrieb:

> Wäre nett wenn jemand einen Tipp oder Beispiel zum Füllen der temporären
> Page geben kann.

Wäre viel netter, wenn du deinen Code gepostet hättest. Dann bräuchten 
wir nämlich nur noch die Bugs ankreuzen...

Aber schon von deiner Beschreibung her kann man sagen, daß es ganz 
sicher zu Problemen kommen wird, wenn das Ziel des Flashvorgangs der 
Bootloaderbereich ist. Du hast nicht angegeben, ob das Ziel im 
BL-Bereich oder im App-Bereich liegt.

Außerdem ist auch schon klar, daß die Zwischenspeicherung im RAM 
komplett überflüssig ist. Das Zeug kann man natürlich auch direkt in die 
temporäre Flash-Page schreiben. Naja, gut, der 1284P hat wenigstens eine 
brauchbare Menge RAM. Aber so einen Bootloader schreibt man ja nicht nur 
für ein Target, sondern möglichst universell.
Gast #3365422
Lesenswert?
• ▲
▼
Sie haben das Beispiel unter 'spm' in der 
AVR-instruction-set-Beschreibung durchgearbeitet?

Desweiteren kann ich dem:

> Wäre viel netter, wenn du deinen Code gepostet hättest. Dann bräuchten
> wir nämlich nur noch die Bugs ankreuzen...

nur zustimmen.
OP #3365424
Lesenswert?
• ▲
▼
Danke für die Antwort.
Natürlich liegt das Ziel unterhalb des Bootloaderbereiches.
Das wird aber schon im PC-Programm überwacht, wo ja die Pagenummer mit 
übergeben wird.
Daher braucht der Bootloader das nicht zu prüfen.


In den Sram speichere ich es deshalb, weil die Daten sehr schnell über 
USB übertragen werden (1250000 Baud).
Außerdem ist das völlig egal ob ich da 256 Byte im Ram habe.
Wenn der Bootloader läuft sind sowieso alle Interrupts aus und der ganze 
Speicher gehört dem Bootloader.
Das ginge also auch bei wit kleineren AVR's.

Ich denke ich habe den Fehler gefunden.
Meine Reihenfolge war falsch weil ich nach dem Füllen der temporären 
Page die RWW Sektion wieder reaktiviert hatte und Das die temporäre Page 
löscht.

Vorher:
1. temporäre Page füllen
2. Flash Page löschen
3. Re-Enable RWW Section
4. Flash Page schreiben
5. Re-Enable RWW Section

Jetzt:
1. Flash Page löschen
2. Re-Enable RWW Section
3. temporäre Page füllen
4. Flash Page schreiben
5. Re-Enable RWW Section

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.