CAN-Bootloader - RESET ?

OP #2379488
Lesenswert?

Hallo,
ich habe mehrere Geräte (ATMEGA32 + MCP2515) an einen CAN-Bus, welche 
mittels Bootloader
http://www.kreatives-chaos.com/artikel/can-bootloader
programmiert werden sollen.

Wie kann ich die Geräte reseten, um den Bootloader zu starten ?

Probleme:
* 5V abschalten geht nicht, da Batterie-Puffer an einigen Geräten
* Reset am Gerät später nicht möglich, da schwer zugänglich (deswegen 
Bootloader)

* Die Geräte sind über eine 4-adrige Telefon-Leitung verbunden.
  +5V, GND, CANH, CANL

Hat jemand ne Idee, habe im Netz nichts sinnvolles gefunden...
Gast #2379502
Lesenswert?

> Per CAN-Nachricht ist nicht möglich...

Dann gehts nicht.
Du musst ja irgendwie den Reset auslösen (= in den Reset Vektor springen 
egal ob per Watchdog oder anders) wenn nicht per CAN wie denn dann wenn 
die einzige Verbindung ist?
#2379509
Lesenswert?

M. B. schrieb:
> Durch was soll der Watchdog aktiviert werden ?
> Per CAN-Nachricht ist nicht möglich...
> Ganz am Anfang hat die Schaltung nur den Bootloader...

Musst du halt einen kleines Urprogramm mit auf die Controller brennen, 
bevor du sie einbaust. Der Bootloader muss ja auch mal geflasht werden, 
da hängt man einfach dem HEXfile das Urprogramm an é voila...
Das Urprogramm muss ja nicht viel können und kann erstmal nur aus 
aktivieren des Watchdogs nebst leerer Mainloop bestehen.

mfg mf
Gast #2379511
Lesenswert?

Wie wär's wenn Du den Bootloader dahingehend erweiterst, dass der 
Watchdog im Bootloader läuft und zyklisch getriggert wird. Bei Empfang 
des Befehls "Start Application" stellst Du das Triggern ein und bekommst 
dadurch den Reset.
OP #2379515
Lesenswert?

OK, das Urprogramm kann ich aber auch nur per Bootloader aufspielen, 
oder ?

Der Bootloader müßte sich solange selbst resetten, bis das Urprogramm 
aufgespielt wurde.

Die "richtige" Software muß dann aber unbedingt eine 
"Software-Reset-Variante" haben, sonst kann die Schaltung später nicht 
mehr geladen werden.

Alternativ dachte ich an folgende Hardware-Lösung:
.....an einen Transistor, welcher an der CANH-Leitung hängt.
Wenn ich CANH kurzzeitig auf +5V lege, soll der Transistor den 
Kondensator an der Resetschaltung kurzschließen ...
OP #2379524
Lesenswert?

Die Schaltungen sind sich alle sehr ähnlich und können später 
verschieden Funktionen übernehmen.
Deswegen will ich nur den Bootloader per ISP aufspielen und später den 
Rest per CAN, je nach Verwendung...

Aber das Urprogramm könnte ich ja gleich danach drauf spielen...

könnte das Urprogramm auch ein paar Bytes im Bootloader überschreiben, 
z.B. um die ID der Schaltung zu ändern ???
Oder ist der Bootloader in einem geschützten Bereich ?
Gast #2379534
Lesenswert?

Der Bootloader liegt im Flash und kann daher durch die Applikation nicht 
direkt geändert werden. Du könntest Daten, die für den Bootloader und 
die Applikation relevant sind, z.B. in das EEPROM auslagern...
#2379542
Lesenswert?

Prozessor startet

Bootloader wird angesprungen
Bootloader wartet 500ms auf CAN-Kommando zum Programmiermodus
Watchdog wird angeschaltet

Zielprogramm wird angesprungen
Zielprogramm macht den Watchdog aus bzw resettet periodisch, es sei denn 
programmierung ist gewünscht

-------------

Wenn jetzt nur der Bootloader drauf ist und kein Zielprogramm, greift 
der Watchdog.

mfg mf

PS: ich meinte damit: modifiziere den Bootloader so, dass er den 
Watchdog nach den 500ms anschaltet, wenn kein Zielprogramm vorhanden ist 
startet die Mühle von vorn. Du hast ohne Zielprogramm regelmäßig 500ms
OP #2380601
Lesenswert?

Vielen Dank erstmal für die Vielen Antworten.

Die Sache mit dem Watchdog scheint die beste Lösung zu sein.
Ich werde die ID auf dem Eprom speichern und im Bootloader auslesen.

So kann auch auch später die Schaltungen zu Software laden einfach 
resetten, indem ich den Bootloader nicht resette...

EINFACH und GUT...
Gast #2380626
Lesenswert?

i.d.R. setzt man im Parameterspeicher des userprogramms noch ein flag 
das der bootloader beim nächsten bootup nicht in das userprogramm 
springt sondern im bootloader verweilt und auf das firmwareupdate 
wartet!

ansosnten macht dein gerät ein reset, springt in den bootloader und von 
dort dann ja gleich wieder in dein userprogramm, dann klappt das update 
ja wieder nicht!
Gast #2380746
Lesenswert?

>Setze ich das Flag auf dem EEProm oder gibt es andere Flags für sowas?

Das setzt man im Parameterspeicher, hast Du den keine Parameter die Du 
in Deinem userprogramm speichern muss? (z.B. seriennummer des Gerätes, 
die adresse des gerätes...)
das kann z.B. ein eeprom oder ein flash sein.

Wenn Du keine userparameter hat, gibt es noch einen anderen Trick:
Du hinterlegst im bootloader die Prüfsumme von deinem userprogramm, im 
bootloader prüfst du dann den Speicherbereich wo dein userprogramm liegt 
und wenn die Prüfsumme übereinstimmt springst du in das userprogramm.
Beim firmwareupdate kannst du geziel ein byte im userprogramm 
zerschiesen, nach dem reset wird dein loader dann bemerken dass die 
prüfsumme falsch ist und verweilt dann im bootloader!

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren