Forum: Mikrocontroller und Digitale Elektronik Update mehrer controller


von Herbert (Gast)


Lesenswert?

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

von Rene B. (themason) Benutzerseite


Lesenswert?

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

von Frank K. (fchk)


Lesenswert?

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

von Pothead (Gast)


Lesenswert?

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
Noch kein Account? Hier anmelden.