Hi @ all, habe eine Steuerung mit einem mega8, diesen kann ich ueber Peters bootloader updaten. Jetzt sollen aber noch mindestens zwei controller hinzukommen, die an einem datenbus des erst genannten haengen, es sollen alle upgedatet werden koennen {ueber den mega8 und dessen externe schnittstelle}. die FW der einzelnen controller unterscheidet sich, weil verschiedene aufgaben. kann mir jemant ratschlaege geben? Danke, Herbert
Ich habe auch ein System in dem mehrere (2 ;-)) Controller mit unterschiedlichen Updates gefahren werden müssen. Im Moment stecke ich immer um. Aber es soll nachher schon so sein das die alle über eine Schnittstelle oder noch besser SD/MMC Karte geupdatet werden. Ich plane dazu einen 3. Mikrocontroller der von sich aus die anderen Controller flasht. Damit dieser Controller nicht nur diesen einen Zweck erfüllt, plane ich das der "Update-Controller" nach den (ggf) Updates sich per I2C als FAT16/32-Slave für die SD Karte verhält. Ansonsten hätte ich keine Idee, aber ich habe auch noch nicht soviel mit Bootloadern und In-System-Updates gemacht. Nur mal so als Anregung
Wie läuft die Kommunikation mit den anderen Controllern ab? Per SPI*? Dann hast Du doch schon fast alles. Wenn Du dann noch die Reset-Pins der Controller zu Deinem Mega8 führst, hast Du alles, was Du für ein ISP-Download brauchst. *Aufpassen, daß die SPI und ISP-Pins gleich sind. Beim Mega128 ist das z.B. nicht der Fall, da hängt ein UART mit auf den ISP-Pins (was auch seine Vorzüge hat). fchk
Ich habe es kürzlich folgendermaßen gemacht: Das Programmupdate kommt über irgendeine Schnittstelle (in meinem Fall UART) in den Controller. Die goldene Version schreibt den Datenstrom ab eine bestimmte (freie) Stelle ins Flash. Der Datenstrom (update Version) besteht aus dem ausführbaren Code gefolgt (einfach hinten drangelinkt) von den neuen Interruptvectoren und einer 16Bit CRC. Hat der Controller alles geschrieben dann führt er einen Softwarereset aus. In der low-level-init der goldenen Version wird nun geprüft, ob im besagten Updatespeicherbereich ein gültiges Programm liegt (dazu die CRC). Wenn die update Version als gültig erkannt wird, werden ebenfalls in der low-level-init der goldenen Version die Interruptvectoren auf die update Version umgebogen, anschließend kontrolliert und wieder ein Softwarereset ausgeführt. Da die Reseteinspungadresse nun auf die update Version zeigt läuft von nun an die update Version. In der low-level-init der update Version werden nochmals Gültigkeit und Interruptvektoren geprüft. Falls hier ein Fehler entdeckt wird, werden wieder die alten Interruptvektoren der goldenen Version hergestellt (welche in einem speziell geschützten Bereich des Flashs liegen). Vorteile: - Es wird immer eine lauffähige goldene Version vom Auslieferzeitpunkt vorgehalten, was die Ausfallsicherheit massiv erhöht. - Man bedient sich einfacher Schnittstellen (UART, SPI, ...). - Während die Daten rübergeschaufelt werden läuft parallel das normale Programm, also minimierte blackout-Zeit. Nachteile: - Doppelte Speicherbelegung, was bei heutigen Controllern verkraftbar ist. - Unterschiedliche Kompilate/Linkerscripte für goldene und update Version.
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.