www.mikrocontroller.net

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


Autor: Alexander E. (avr-alex)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Alexander E. (avr-alex)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ideen?

Autor: Alexander E. (avr-alex)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hat keiner eine Idee?

Autor: Knut Ballhause (Firma: TravelRec.) (travelrec) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Alexander E. (avr-alex)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Knut Ballhause (Firma: TravelRec.) (travelrec) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Spess53 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi

Wie soll den eigentlich deine Funkverbindung aussehen?

MfG Spess

Autor: Alexander E. (avr-alex)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Alexander E. (avr-alex)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Knut Ballhause (Firma: TravelRec.) (travelrec) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Alexander E. (avr-alex)
Datum:

Bewertung
0 lesenswert
nicht 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

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.