Forum: Mikrocontroller und Digitale Elektronik Bootolader für ATMega48


von Rene (Gast)


Lesenswert?

Hallo,

der ATMega48 hat ja keinen Bootloader Bereich implementiert.

Gibt es eine Möglichkeit auch für diesen Controller eine Art Bootloader 
zu machen?

von Edi R. (edi_r)


Lesenswert?


von B. G. (smarti)


Lesenswert?

mhm... in der Tat. Wollte gerade vorschnell Antworten, dass der 
48/88/168 doch identisch sind, aber das Datenblatt sagt was anderes:

> In ATmega48, there is no Read-While-Write support and no separate Boot
> Loader Section. The
> SPM instruction can execute from the entire Flash.

Würd ich auch interessieren, ob es da eine Möglichkeit gibt!

von B. G. (smarti)


Lesenswert?

Ui, okey ging ja schnell hier der entscheidende Hinweis:

> Bei AVRs ohne "boot reset vector fuse" (BOOTRST) wie beispielsweise
> ATtinys und kleinen ATmegas (ATmega48) muß der erste Befehl ein RJMP sein. > Für 
C-Programme ist das automatisch sichergestellt (und für Assembler-
> Programme leicht selbst sicherzustellen).

von Tom M. (tomm) Benutzerseite


Lesenswert?

Klar kann man, welche Features sollte er denn haben?

Als Problem sehe ich die Interrupt-Vektoren, weil der BL diese ja 
bereits überschreibt bzw. in Beschlag nimmt. Würde mir auch schwer tun, 
ein C-Programm so zu compilieren/linken, dass es in den noch freien 
Flash-Bereich passt und den BL nicht überschreibt.

Angesichts der Preise für die grösseren atmega würd ich eher nen 88 oder 
höher kaufen und darauf einen "richtigen" BL einsetzen. :)

von Rene (Gast)


Lesenswert?

Also bis jetzt habe ich immer den ATMega88 mit dem AES-Bootloader von 
Atmel(AVR231)benutzt und würde diesen auch gerne weiter verwenden.

Leider ist für das Projekt der ATMega48 vorgesehen.

Wäre es denn möglich den Bootloader Bereich von Hand festzuelegen und 
dann immer nur den Bereich bis zur Bootloader Adresse neu zu 
beschreiben? Das Hauptprogramm für den ATMega48 ist nicht sehr groß und 
würde locker in die 3kB passen.

von Peter D. (peda)


Lesenswert?

Tom M. schrieb:
> Als Problem sehe ich die Interrupt-Vektoren, weil der BL diese ja
> bereits überschreibt bzw. in Beschlag nimmt.

Nein tut er nicht.
Ein Bootloader hat nur eine einzige Aufgabe, daher braucht er keine 
Interrupts, er pollt einfach.
Der Bootloader tauscht auch nur den RJMP am Resetvektor aus, die anderen 
Vektoren bleiben original in der Applikation.


Peter

von Tom M. (tomm) Benutzerseite


Lesenswert?

Peter Dannegger schrieb:
> Tom M. schrieb:
>> Als Problem sehe ich die Interrupt-Vektoren, weil der BL diese ja
>> bereits überschreibt bzw. in Beschlag nimmt.
>
> Nein tut er nicht.
> Ein Bootloader hat nur eine einzige Aufgabe, daher braucht er keine
> Interrupts, er pollt einfach.
> Der Bootloader tauscht auch nur den RJMP am Resetvektor aus, die anderen
> Vektoren bleiben original in der Applikation.

Wir sprechen immer noch über den atmega48, oder?

Kannst du ein Binary/Hexfile erzeugen, das nur den Resetvektor tauscht, 
die übrigen Vektoren unangetastet lässt und dann im höheren 
Adressbereich den Bootloader ablegt? Oder ähnliches für ein 
"User-Programm" bewerkstelligen, sodass nur die nötigen Vektoren 
geflasht werden und das Programm dann in einem freien Speicherbereich 
abgelegt wird?

Ich denke zwar schon, dass es möglich ist, traue es mir aber nicht zu. 
Oder hab ich was einfache(re)s übersehen?

von Peter D. (peda)


Lesenswert?

Lies Dir mal die Beschreibung von Bootloadern durch.

Es gibt prinzipiell 2 Wege:

1. Der Bootloader patcht den RJMP selber (so mache ich es).
Also auch, wenn Mumpitz gesendet wird, schreibt der Bootloader immer den 
richtigen RJMP zu sich selber an 0x0000.

2.
Ein PC-Programm patcht den RJMP (so macht Hagen es).
Potentiell besteht dabei die Gefahr, daß man sich aussperren kann.


Der Applikation ist das Schnuppe, sie weiß nix vom Bootloader.


Peter

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.