Forum: Mikrocontroller und Digitale Elektronik Problem Atmega Bootloader Flash schreiben


von Gad Z. (gad)


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.

: Verschoben durch User
von c-hater (Gast)


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.

von der alte Hanns (Gast)


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.

von Gad Z. (gad)


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

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.