Forum: Mikrocontroller und Digitale Elektronik Bootloader für AVR zu AVR über SPI oder TWI


von Alexander E. (avr-alex)


Lesenswert?

Hallo,
ich arbeite gerade an einer Platine mit mehreren AVR´s. Diese AVR´s 
sollen via Funk-Empfänger ein Firmware Update erhalten können. Es soll 
also möglich sein das Empfangene Update über einen Bus dem jeweiligen 
AVR zuzuweisen und entsprechend das Update zu fahren. Da ich 8 AVR´s 
verwende fällt die USART-Schnittstelle raus und die Bootloader Beispiele 
aus dem Netz beziehen sich meist auf die PC-RS232 zu µC-USART 
kommunikation oder USB. Ich verwende derzeit den ATmega324A, welcher 
zusätzlich einen Boot Loader Support anbietet(habe ich bisher noch nie 
genutzt und muss mich erst in diesen Teil einarbeiten). Bisher habe ich 
die fertigen Lösungen aus dem Netz für Bootloader Applikationen 
verwendet. Da dies nun leider nicht geht und ich mich bis auf die 
Standart Bootloader nicht weiter auskenne, hoffe ich das einer von euch 
eine Lösung oder zumindest einen Tip geben kann.
Ich könnte mir vorstellen, dass die SPI Schnittstelle des AVR der die 
Firmware per Funk empfangen hat als ISP verwendet wird, um die anderen 
AVR´s zu updaten oder ein TWI Bootloader verwendet wird. Leider habe ich 
bisher nichts in der Art gefunden und habe in diesem Bereich auch keine 
weiteren erfahrungen. Deshald binn ich für jede Hilfe dankbar.

Gruß
Alex

von Alexander E. (avr-alex)


Lesenswert?

Ideen?

von Alexander E. (avr-alex)


Lesenswert?

Hat keiner eine Idee?

von Knut B. (Firma: TravelRec.) (travelrec) Benutzerseite


Lesenswert?

Wenn Du einen Bootloader verwendest, kannst Du alle Interface-Varianten 
anwenden, die dir einfallen. Du bist nicht auf ISP/SPI angewiesen. Ich 
würde an Deiner Stelle eine 2-Draht-Synchronschnittstelle anwenden, also 
Takt und Daten. Dies lässt sich wunderbar und unkompliziert in Software 
handhaben und alle AVRs können leicht an diese 2 Leitungen angeklemmt 
werden. Über eine eindeutige Adresse können die Slave-AVRs vom Master 
angesprochen und so die passende Firmware auf den passenden Chip geladen 
werden. Wenn die Leitungen ähnlich I2C mit Pullups versehen werden und 
nur mit Ausgang-Low an der jeweiligen Leitung gezogen wird (Open 
Collector Emulation), ist sogar Multimaster-Busbetrieb möglich.

von Alexander E. (avr-alex)


Lesenswert?

Danke für deine Antwort.
Wie ich schon schrieb kenne ich mich mit Bootloadern nicht so gut aus 
und frage deshalb noch einmal nach.
Habe ich dich richtigverstanden, dass ich die neue Firmware halt 
irgendwie im Kontroller bringen und ablegen muss um dann das Update zu 
fahren?
Ich könnte also um die neue Firmware in den AVR zu bekommen ganz einfach 
TWI verwenden? Würde dann die neue Firmware im EEPROM ablegen(muss groß 
genug sein) und dann den Flash neu beschreiben.
Richtig so?

Gruß
Alex

von Knut B. (Firma: TravelRec.) (travelrec) Benutzerseite


Lesenswert?

Alexander E. schrieb:
> Ich könnte also um die neue Firmware in den AVR zu bekommen ganz einfach
> TWI verwenden?

Kannst Du, ist aber leicht komplexer, als eine eigene synchrone 
Softwarelösung. Geht nur, wenn Deine empfangenden AVRs genug 
Bootcode-Platz haben.

Alexander E. schrieb:
> Würde dann die neue Firmware im EEPROM ablegen(muss groß
> genug sein) und dann den Flash neu beschreiben.

Na das wird wohl nichts werden. Wenn Deine Slaves zum Beispiel 8kiB 
Flash enthalten, findest Du schon keinen Master-Controller mehr, der 
genug EEPROM hätte. Nein, Du musst die Firmware zur Laufzeit des 
Bootloaders in eine RAM-Seite des betreffenden Controllers schreiben und 
von dort aus direkt in den Flash-Seiten-Puffer kopieren und das 
Schreiben einer Flash-Seite auslösen. Während das Flash schreibt, 
sortierst Du ankommende Daten schon wieder in die RAM-Seite ein.
Der Master muss also die Daten vom sendenden Gerät sofort an den 
betreffenden Slave weitergeben. Ein bisschen puffern kann er den 
Datenstrom im RAM, aber sicher nicht die gesamte Firmware. Die Daten 
müssen halt gleich weiterverarbeitet werden.

von Spess53 (Gast)


Lesenswert?

Hi

Wie soll den eigentlich deine Funkverbindung aussehen?

MfG Spess

von Alexander E. (avr-alex)


Lesenswert?

Noch mal danke für deine Antwort.
Muss ich mir den Bootloader selbst schreiben oder kennst du zumindest 
ein How to do für solch eine Anwendung. Ich denke es wird mich einiges 
an nerven kosten, wenn ich anfange mich mit dem Speichermanagment 
auseinander zu setzen. Über die USART wars halt schön einfach, da schon 
fertig. Einfach das Statkomando für den Bootloader abwarten und mit jump 
an die Speicherstelle des Bootloader springen und dann die Daten 
übertragen fertig.
Zurzeit habe ich noch nicht den Geistesblitz um zu einer Lösung zu 
kommen. Irgendwie fehlt mir die zündende Idee und die Erfahrung in 
diesem Bereich und frage mich wie ich das, was du mir vorgeschlagen 
hast, umsetzen kann.

Gruß
Alex

von Alexander E. (avr-alex)


Lesenswert?

@Spess53

Die Funkverbindung wird über das 70cm und 13cm Band realisiert. Die 
empfangenen Daten werden vor der Weitergabe zwischengespeichert. So kann 
sicher gestellt werden, dass auch alle Packete mit der richtigen Cheksum 
empfangen wurden.

Gruß
Alex

von Knut B. (Firma: TravelRec.) (travelrec) Benutzerseite


Lesenswert?

Alexander E. schrieb:
> oder kennst du zumindest
> ein How to do für solch eine Anwendung.

Das Datenblatt des Controllers: Self programming the Flash...

Alexander E. schrieb:
> Die
> empfangenen Daten werden vor der Weitergabe zwischengespeichert.

Dann brauchst Du genug Speicher für alle AVRs. Ich würde Dir ein 
DataFlash empfehlen.

Alexander E. schrieb:
> Ich denke es wird mich einiges
> an nerven kosten, wenn ich anfange mich mit dem Speichermanagment
> auseinander zu setzen.

Wenn Du keine Lust hast, dann lass es halt. Ansonsten: Nervenfasern 
wachsen nach, wenn man sie oft und ausdauernd trainiert.

von Alexander E. (avr-alex)


Lesenswert?

Um lust geht es nicht. Ist ehr ein muss. Bitte verstehe meine Fragen 
nicht falsch. Ich möchte nicht, dass jemand meine Arbeit macht. Jedoch 
hoffte ich, dass jemand so etwas schon mal gemacht hat. Dies würde mir 
viel Arbeit und Zeit sparen. Ansonsten würde ich das Rad neu erfinden. 
Es hat aber den Anschein, dass das was ich vorhabe nur sehr selten 
eingesetzt wird und es deshalb noch keiner gemacht hat.
Vieleicht sollte man daraus mal ein Projekt machen, die nächsten freuen 
sich bestimmt über eine einfache und schnelle Lösung.

Gruß
Alex

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.