PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : ATMEGA16 bootloader



baracuda
05.06.2005, 22:54
Hallo Leute!

Mich würde interssieren wie man es zu stande bringt ein Programm in die bootloader section reinzuspielen.
Wie bestimme ich was in den Bootloader kommt?
Kann mir jemand vielleicht ein kleines Beispiel geben.

becki
06.06.2005, 13:25
Was ist das genau für ein Chip? z.B. beim ATmega8-16PDIL / ATmega8L-8PDIL kann man nich ohne weiteres auf die bootloader section zugreifen. Um genaueres zu erfahren, müsstetst du im Datenblatt nachlesen.

Gruß becki

baracuda
08.06.2005, 09:42
Ich verwende den ATMEGA16 16PL.

Ich habe mir im Manual das setzen von den fuses angeschaut. Sollte klar sein. Auch ein asm Beispiel (/muss das noch ausproibieren) ist gegeben wie man ein Programm für die bootsection screibt. (und zwar mit .org SMALLBOOTSTART).
Allerdings wie gehe ich vor wenn ich ein c programm schreibe?

Zum Programmieren verwend ich uisp.

becki
08.06.2005, 15:48
Meinst du jetzt generell ein Programm?

baracuda
08.06.2005, 19:31
Yo.

Im Prinzip möcht ich einen booloader programieren der über uart Daten (ganzes Programm) empfängt und nacher in den flash reinschreibt. Da gibt es zwar den Megaload glaub ich (werd ausprobieren) möcht das ganze mal aber selber machen.
Nur steh ich halt jetzt mal schon beim bootloader an. Zum testen würd ich gern mal ein einfaches Programm in C schreiben das halt beispielsweise paar Leds leuchten lässt jedes mal bevor dann ein Programm ausgeführt wird. Nur find ich leider nirgends einen Leitfaden wie ich C Programm in die Bootsection bekomm. Ich mein ist das allein durch die fusebits und das Programm bestimmt oder muss man dem Programmer das auch noch irgenwie sagen?

becki
09.06.2005, 12:39
Ähm, so gut kenne ich mich damit noch nicht aus, leider.

RCO
09.06.2005, 18:20
Frank hatte irgendwann mal einen Artikel dazu geschrieben, den ich ich auch schon die ganze Zeit suche. Dort waren alles Fusebits etc. angezeigt.

baracuda
19.06.2005, 22:30
Ich hab jetzt mal ein kleines Testprogramm in den loader gespielt. Ich hab mit Ponyprog geprüft ob es wirklich an der gewollten Adresse ist. Danach habe ich versucht ein normgales Programm raufzuspieln. Jetzt hab ich das Problem, dass wenn ich was neues raufspiel der ganze Flash überschrieben wird (mache davor kein erase, er überspielt einfach alles). Woran kann das liegen. Auch schein es egal zu sein ob ich das BOOTRST setze oder nicht. Er führt das bootloaderporgramm immer aus. Kann mir vielleicht jemand weiterhelfen?

linux_80
19.06.2005, 22:48
Wegen dem überschreiben,
Welche Fusebits hast Du sonst noch geändert, das BOOTRST alleine wird nicht reichen, so wie ich das verstanden habe.
Boot size und Boot Lock Bits sollen auch noch angepasst werden.

Mit dem Rest bin ich selber noch nicht soweit um weiterzuhelfen !

baracuda
19.06.2005, 23:08
Erstmal vielen Dank für die wirklich flotte Antwort.
Meine fusebits sind im Anhang. Also mit diesen Settings ist laut Manual der Start des Bootsektors auf 0x1C00. Mein recht primitives Demoprogramm schaut so aus


.org 0b1110000000000
Init_led:
ldi 0x10, 0xff
out 0x14, 0x10

ldi 0x10, 0xaa
out 0x15, 0x10
Im code fehlt halt noch ein Srpung auf den Afang von der Application section. Ist vorerst nur ein Test ob er mir das Bootloaderprogramm nicht überspielt und schaltet nur paar leds ein.