Forum: Mikrocontroller und Digitale Elektronik AVR1 programmiert sich selbst und/oder AVR2? Multi-Bootloadersystem?


von Spice (Gast)


Lesenswert?

Hallo Zusammen,

ich möchte folgendes realisieren, brauch aber eventuell einen kleinen 
Denkanstoss...
Ein AVR1 besitzt einen Bootloader, der entscheiden kann, ob das über die 
UART eintrudelnde HEX-File für sich selbst ist, oder aber für einen AVR2 
bestimmt ist.
AVR2 besitzt ebenfalls einen Bootloader, der allerdings über die SPI mit 
AVR1 kommuniziert (Hardware-RESET von AVR2 leider nicht steuerbar).
Wenn das ankommende HEX-File für AVR1 bestimmt ist, flash er sich mit 
dem HEX-File selbst, führt ein reset aus und die Applikation läuft.
Wenn das über die UART ankommende HEX-File (an AVR1) allerdings für AVR2 
bestimmt ist, soll AVR1 das HEX-File über die SPI an AVR2 "tunneln" und 
AVR2 soll sich mit dem HEX-File flashen.
Dies setzt voraus, dass der Bootloader in AVR2 die Daten über die 
SPI-Schnittstelle entgegennimmt, nicht aber über die UART.
Meine frage wäre nun, ob das so überhaupt funktionieren würde, was man 
beachten müsste und ob es bereits ähnliche Projekte gibt. Wie aufwändig 
wäre es vorhandene Bootloader (zb. AVRootload) mit der Funktion zu 
erweitern. Ist es sinnvoller, den AVR2 mit dem ISP-Protokoll zu flashen, 
also ohne Bootloader für AVR2.
Quasi ein stinknormaler Bootloader für die serielle Schnittstelle mit 
einem zusatzfeature, das HEX-File über die SPI (später vielleicht I2C) 
weiterreichen zu können, oder aber das ISP-Protokoll zusätzlich zu 
unterstützen...

Danke und Gruß
Spice

von Thomas E. (thomase)


Lesenswert?

Spice schrieb:
> (Hardware-RESET von AVR2 leider nicht steuerbar).

Damit scheidet ISP schon mal aus.

Spice schrieb:
> Wie aufwändig wäre es vorhandene Bootloader (zb. AVRootload) mit der
> Funktion zu erweitern

Nicht erweitern. Du musst die Kommunikation, die beim Bootloader über 
den UART läuft, ersetzen durch SPI.

Du kannst aber auch den UART nehmen. Spart sogar noch eine Leitung. Dann 
musst du am AVR2 gar nichts ändern. Im AVR1 muß dann ein Softare-UART 
integriert werden, falls er nur 1 Hardware-UART hat.

mfg.

von Spice (Gast)


Lesenswert?

Vielen Dank für die Infos,

allergings habe ich vergessen zu erwähnen, dass das Design bereits 
fertig ist. Also es muss schon so laufen wie beschrieben, der 
Bootloader1 muss Daten über die UART entgegennehmen und über SPI an 
Bootloader2 durchreichen können... Bootloader2 muss quasi auf SPI 
umprogrammiert werden und Bootloader1 muss um eine Funktion erweitert 
werden, wo das Hexfile über die SPI-Schnittstelle "durchgeschliffen" 
wird. Ist sowas möglich? Reichen da die Bootsektoren aus um einen 
angepassten Bootloader zu flashen?

Danke und Gruß
Spice

von Thomas E. (thomase)


Lesenswert?

Spice schrieb:
> Ist sowas möglich?

Sicher.

>Reichen da die Bootsektoren aus um einen
> angepassten Bootloader zu flashen?

Um welche Controller geht es überhaupt?

mfg.

von Spice (Gast)


Lesenswert?

AVR1 ist ein mega1284 und avr2 ist ein mega32

von Thomas E. (thomase)


Lesenswert?

Spice schrieb:
> AVR1 ist ein mega1284 und avr2 ist ein mega32

Ein normaler Bootloader sollte 1KB nicht überschreiten. Beim AVR1 kommt 
dann noch das "Weiterreichen" dazu. Das ist aber auch kein 
Riesenprogramm.

Beim AVR2 wird die UART-kommunikation durch SPI ersetzt, sodaß sich da 
+-0 ergeben sollte.

Das passt.
Der 32 hat 4KB, vom 1284 habe ich gerade kein Datenblatt da, aber der 
644 hat 8KB. Die hat der 1284 mindestens auch.

mfg.

von Tobias F. (coldtobi)


Lesenswert?

Thomas Eckmann schrieb:
> Spice schrieb:
>> AVR1 ist ein mega1284 und avr2 ist ein mega32
>
> Ein normaler Bootloader sollte 1KB nicht überschreiten. Beim AVR1 kommt
> dann noch das "Weiterreichen" dazu. Das ist aber auch kein
> Riesenprogramm.
>
> Beim AVR2 wird die UART-kommunikation durch SPI ersetzt, sodaß sich da
> +-0 ergeben sollte.
>
> Das passt.
> Der 32 hat 4KB, vom 1284 habe ich gerade kein Datenblatt da, aber der
> 644 hat 8KB. Die hat der 1284 mindestens auch.
>
> mfg.

Das "Weiterreichen" könnte auch im Applikationsbereich implementiert 
werden... AVR1 muss also nicht unbedingt einen Bootloader-Abstieg 
machen, wenn AVR2 programmiert werden muss.

von Thomas E. (thomase)


Lesenswert?

Tobias Frost schrieb:
> Das "Weiterreichen" könnte auch im Applikationsbereich implementiert
> werden...

Welchen Sinn soll das haben?
Die Kommunikation mit dem PC ist im Bootloader implementiert. Warum also 
nochmal in der Applikation?

mfg.

von Spice (Gast)


Lesenswert?

...Weil AVR1 dann nicht in den Bootloader-Modus gehen muss um AVR2 zu 
programmieren... AVR1 könnte den Code abarbeiten und zusätzlich den AVR2 
"flashen" bzw mit dem Hexfile versorgen... Die Idee ist nicht 
schlecht... Vielen Dank...


Gruß Spice

von Spice (Gast)


Lesenswert?

@thomase: ich habe schneller geantwortet, als ich lesen bzw. gerade 
denken konnte... Du hast natürlich recht, der AVR1 muss eh im 
Bootloadermodus sein um das hexfile entgegen nehmen zu können :-)
Danke auch für den Hinweis...

von Spice (Gast)


Lesenswert?

Gibts so ähnliche Projekte eigentlich?

Die Bootloader sind ja meistens in ASM geschrieben, kann man da 
vielleicht auch mit C-Code zwischen funken, oder müsste man das alles in 
ASM implementieren?

Danke und Gruß
Spice

von Joghurt3000 (Gast)


Lesenswert?

Selbstverständlich kann man mit C dazwischen funken. Ich habe mich nie 
mit dem AVR gcc intensiv beschäftigt aber Du mußt Dir die "calling 
convention" angucken (wie die Paramter übergeben werden, wo wird der 
Rückgabewert gespeichert wird) und evtl. welche Register Du verwenden 
und von welchen Du ein Backup (Stack) erstellen mußt.
Wenn Du keine Literatur findest, einfach ein minimales C Programm 
schreiben und mit "-S" kompilieren, dann bekommst Du die Ausgabe in 
Assembler und kannst nachgucken wie es funktioniert.

von Spice (Gast)


Lesenswert?

Vielen Dank für die Infos,
ich werde mich da mal schlaulesen/probieren...
Wenn jemand mehr Informationen darüber hat, wäre ich über jeden 
"Schnipsel" oder Link dankbar...

Schoenes WE, Gruß
Spice

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.