Forum: Mikrocontroller und Digitale Elektronik Bootloader ASM


von fred (Gast)


Lesenswert?

Hallo alle zusammen,

ich hoffe erstmal, dass das einigermaßen hier richtig ist.

Ich habe noch nicht besonders viel mit AVR und ASM gemacht.
Benutze zur Zeit einen Attiny 2313 und möchte einen Bootloader 
programmieren. Damit ich etwas lerne!
Das ganze soll über Terminal laufen, der mir dann ein Hex file schickt.
Soweit so gut.

Jetzt habe ich noch ein paar Fragen.

-Self programming: Kann ich (soviele wie in den Sram passen)alle Daten 
in den temporary Buffer laden und dann einen Page Write Befehl nach dem 
Anderen geben?

-Ich werde es so machen, dass ich die Pages lösche, die .hex empfange, 
die Daten aufbereite, und dann in den Buffer lade. Ist das so möglich?

Vielen Dank schon einmal

fred

von 900ss (900ss)


Lesenswert?

Informiere dich hier:
http://www.mikrocontroller.net/articles/AVR_Bootloader_in_C_-_eine_einfache_Anleitung

Dort steht grundsätzlich drin, was ein Bootloader macht und es ist auch 
eine Step-by-step Anleitung beschrieben. Allerdings in 'C'.

von fred (Gast)


Lesenswert?

Hallo,

danke für die superschnelle Antwort.
Frage zwei wäre dann geklärt. Ich glaub jetzt schaff ichs.

Werde hier dann von meinen (Miss-)erfolgen berichten.

fred

von Fred (Gast)


Lesenswert?

Ähm,

eine Frage hab ich jetzt noch.
Geht das so wie ich erst dachte mit allen Buffern laden?

von spess53 (Gast)


Lesenswert?

Hi

Sieh mal im Datenblatt vom ATMega8 nach. Da findest du einen Bootloader 
in Assembler.

MfG Spess

von Fred (Gast)


Lesenswert?

Ja, aber der lädt nur ein page.

Hab ich auch gerade neben mir liegen und Buddel mich da durch.

von fred (Gast)


Lesenswert?

Hab jetzt eine Erklärung zum Problem gefunden:
von 
http://www.avrfreaks.net/index.php?name=PNphpBB2&file=viewtopic&p=746200

Hier steht(unten):

Von clawson:

kursivAVR is Atmega168 ??

Anyway this is not in the 1024 bytes of SRAM that are visible to you in 
a 168. It's an additional 128 bytes that are set aside ONLY for use by 
SPM and that cannot be used in any other way apart from when you write 
00000001 to SPMCSR and then perform the SPM opcode. The 128 bytes are 
write only. You cannot read back what you have written so this RAM 
serves NO other purpose than performing page writes. You make 64 "word" 
(R1:R0) writes to the buffer then you invoke 00000101 and SPM to 
actually write the buffer contents to the erased flash page./

Thank you very much

von fred (Gast)


Lesenswert?

Hallo alle zusammen.

Ich hab's jetzt schon recht weit geschafft und komme dem Ziel näher.
Eines schaff ich jedoch nicht. Das schreiben. Ich kann Löschen, per UART 
kommunizieren,
und bei losgelassener Taste macht er das was er soll, aber wenn ich 
schreiben möchte hängt er sich auf.

Kann mir jemand helfen? Ich weiß nicht mehr weiter. Weil an den fusebits 
kann esja nicht mehr hängen. Der 2313 hat ja keine außer spmen und SDAX 
ist gesetzt. Sonst würde ja auch löschen nicht gehen.Oder?

Hier mein Code: Die Daten liegen aufbereitet im Sram der gleichzeitig 
Stack ist. Problem?
Flash_erase:
LDI XL, 0x60
CLR XH
ldi Loop, 16
CLR ZL
CLR ZH
eraseloop:
ld r0, X+
ld R1, X+
ldi spmval, 1
rcall do_spm
adiw ZL, 2
DEC Loop
BRNE eraseloop
Sbiw ZL, 32
ldi spmval, 0b00000101
rcall do_ spm
ret

Danke

Fred

von fred (Gast)


Lesenswert?

Kann mir keiner helfen? Haben die andersfarbigen Zeilen in ponyprog eine 
Bedeutung?

von fred (Gast)


Lesenswert?

Habe es jetzt gefunden. Er hatte schon die Funktion drinne zum normalen 
Programm zu springen wenn er fertig ist und hat daher den Flash immer 
und immer wieder gelöscht und ich hab's nicht gemerkt. Außerdem kommt 
man aus einer Schleife mit DEC und BRNE nicht raus. Summt das oder bin 
ich nur blöd? Das geht nur mit subi.

Trotzdem vielen Dank und tschuldigung, dass ich so ungeduldig bin.

von fred (Gast)


Lesenswert?

Wenn sich jemand dann für das Resultat interessiert, kann ich den Code 
auch reinstellen.

von Rene S. (gigastulle)


Lesenswert?

fred schrieb:
> Wenn sich jemand dann für das Resultat interessiert, kann ich den Code
> auch reinstellen.

Also mich würde das Brennend interessieren !!! Den so richtig sehe ich 
da nicht durch. ob woll ich eigentlich Fit in ASM bin und auch mit den 
AVR's schon viel gemacht habe. Nur den Bootloader habe ich noch nicht 
benutzt.

Habe ich das jetzt richtig verstanden, das ich in den Bootloader Secktor 
das Program schreiben muß welches mir die Daten in den Flash Brennt und 
sich die Daten auch vom PC hohlt ? Sieht das ganze nur kompliziert aus 
oder ist auch so

Danke schon mal im vorraus

von Thomas E. (thomase)


Lesenswert?

Rene Schir schrieb:
> Habe ich das jetzt richtig verstanden, das ich in den Bootloader Secktor
>
> das Program schreiben muß welches mir die Daten in den Flash Brennt und
>
> sich die Daten auch vom PC hohlt ?

Genau so ist das.

mfg.

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.