Forum: Mikrocontroller und Digitale Elektronik CAN-Bootloader - RESET ?


von M. B. (freiberger77)


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...

von Thomas D. (t0mmy)


Lesenswert?

Über den Watchdog einen Reset auslösen. D.h. Watchdog mit Timeout X 
aktivieren aber den Zähler nicht zurücksetzen. Dann kommt der Reset 
automatisch...

von M. B. (freiberger77)


Lesenswert?

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

Wenn alles läuft darf der Watchdog nur bei nem anstehenden 
Software-Update auslösen.

von Höffi (Gast)


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?

von TestX .. (xaos)


Lesenswert?

M. B. schrieb:
> Durch was soll der Watchdog aktiviert werden ?
> Per CAN-Nachricht ist nicht möglich...

wdt_enable() sobald ne besitmmte can nachricht empfangen wurde..
wdt timeout auf < 1s und gut :)

von Achim M. (minifloat)


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

von me (Gast)


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.

von M. B. (freiberger77)


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 ...

von H.Joachim S. (crazyhorse)


Lesenswert?

Tja - wie kommt denn der bootloader auf den Chip? Muss also auf jeden 
Fall eine Möglichkeit bestehen, auch ein Mini-Zusatzprogramm gleich mit 
draufzuspielen.
Ich kenne jedenfalls keine AVRs, die den Bootloader schon eingebaut
haben (wie z.B. M16C).

von M. B. (freiberger77)


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 ?

von me (Gast)


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...

von Achim M. (minifloat)


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

von M. B. (freiberger77)


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...

von georg (Gast)


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!

von M. B. (freiberger77)


Lesenswert?

OK, das ist sinnvoll, wenn ich es nicht innerhalb der 500ms schaffe, die 
erste Nachricht zu senden... was oft passieren wird...!
Werde ich mal im Auge behalten...
DANKE

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

von georg (Gast)


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!

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.