Hallo, ich habe ein CAN-Netzwerk mit 64 Knoten mittels Infineon XC886 am laufen. Ich suche nach einer Möglicheit, die Knoten von einer Zentraleinheit aus zu programmieren. Alle Knoten arbeiten mit derselben Software. Das Ganze müßte vermutlich so aussehen: - In einem Sektor der Knoten, der nicht gelöscht wird, stehen die Flash-Routinen - Die Knoten werden über eine Broadcast Nachricht von der Zentraleinheit aus in den Programmiermode versetzt und warten dort auf die Datenblöcke. - Die Zentraleinheit sendet die Datenblöcke (Broadcast Nachricht) zum Flashen über CAN, alle Knoten werden gleichzeitig programmiert. - Da alles über Broadcast Nachrichten erfolgt, spielen die Identifier im Programmiermode keine Rolle. - Eventuell könnte noch eine Checksumme mitübertragen werden, die nach der Programmierung jeder Knoten an die Zentraleinheit sendet. Hat jemand schonmal so etwas ähnliches realisiert bzw. Erfahrung damit, wie solche Flash-Updates in der Praxis durchgeführt werden?
Einen solchen Bootloader kann man über CAN bedienen. Das geht, wird z.B. im Automobilumfeld sehr häufig gemacht. Allerdings würde ich auf das gleichzeitige Flashen aller Teilnehmer via Broadcast verzichten. Lieber jeden einzeln ansprechen und updaten. So kann der entsprechende Teilnehmer sich melden wenn was schiefläuft oder er nicht hinterherkommt, oder die Botschaft nicht korrekt empfangen wurde, oder oder oder .... Ansonsten funktioniert das prinzipiell so wie du beschrieben hast.
Kennst du die Seite schon? Kannst ja hier was abkupfern http://www.kreatives-chaos.com/artikel/can-bootloader
Hallo Holger, das Szenario was du beschreibst ist, gelebte Praxis im Automobil. Auch hier werden (sogar verschiedene) "Controller" über den CAN (inzwischen auch FlexRay) geflasht. Bei allen passiert so ungefähr das gleiche. a) Bestimmte Dienste, wie auch der des Reprogramierens sind durch ein "Seed&Key" Mechanismus geschützt. Dieser soll verhindern das "jederman" das aufspielen kann was er will. b) Das Steuergerät wird durch ein Kommando in die sogenannte Programming Session geschickt. Dies ist eine Minimal-Software (ein Bootloader) der eben auch das Kommunikationsprotokoll (in reduzierten Umfang) kennen muss. Das ist vor allem bei FlexRay wichtig, bei CAN geht es nur um die IDs. -> Das SG fällt von allein wieder zurück in den Normalen Betrieb wenn es nicht explizit in der Programming Session gehalten wird. Wie es dort gehalten wird hängt von der Situation ab. Das "nichts-tuende-warten" heißt hier "TesterPresent". Aber auch eine laufende Datenübertragung hält die Session aufrecht. c) die Routinen zum Beschreiben (und Löschen) des Flashs liegen NIEMALS im SG. Sie werden erst am Anfang der Programming Session in das SG geladen. -> Sicherheit geht vor. Die Routinen werden im RAM abgelegt und dort auch ausgeführt. Manche Controller können eben nicht gleichzeitig aus dem Flash lesen und hinein schreiben (ist der Fall, wenn die Flash-Routine selber auch im Flash liegt und von dort ausgeführt wird) d) Jetzt erst wird die eigentliche Applikation übertragen und in den Flash geschrieben. e) Nach dem Schreiben wird anhand einer Checksumme geprüft ob der Flash-Vorgang erfolgreich war. Das Ergebnis wird auch irgendwo im SG abgelegt (EEPROM oder Flash). f) Im EEPROM wird noch eine Kennung abgelegt, die beschreibt, wann und wer das SG zuletzt geflasht hat. g) Das SG startet die Applikation nur dann, wenn das in e) beschriebene Ergebnis positiv ist. Sonst verbleibt das SG auch nach einem Reset im Bootloader. Welches SG, bzw welcher Controller die neue Software bekommt wird durch den Mechanismus im Schritt b) bestimmt. Hier muss bei "nur" jeder Controller auf den gleichen Befehl reagieren. Da CAN selber sicherstellt, dass alle Controller alle Packete korrekt erhalten braucht man sich in der SW darüber nicht den Kopf zerbrechen. Man muss nur zusehen dass alle schnell genug die Daten in den Flash bekommen oder rechtzeitig, zB durch eine Nachricht signalisieren das es eng wird. Gruß, TManiac
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.