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
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.
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
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.
Hi Wie soll den eigentlich deine Funkverbindung aussehen? MfG Spess
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
@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
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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.