Forum: Mikrocontroller und Digitale Elektronik Bootloader an Bussystem - Idee gesucht


von Micha68 (Gast)


Lesenswert?

Hi!

Habe ein kleines Problemchen:

Anzahl X Atmegas hängen über einen RS485-Bus an einem PC.
In Normalfall werden die einzelnen Atemgas vom PC aufgefordert, Daten zu 
senden. Es kommt also nicht zu Kollisionen.

Wie könnte ich denn realisieren, alle Atmegas einzeln oder sogar alle 
zusammen per Bootloader upzudaten?

Bei einem einzeln an den PC angeschlossenen Atmega klappt das per 
AVRootloader von Hagen super :)

Danke und Gruss,
Micha
von Detlef W. (detlef_412)


Lesenswert?

Moin

Bei mir wird das so umgesetzt:

Zunachst sende ich vom PC den normalen Befehl „BOOTLOADER_START“ an 
einen bestimmten Teilnehmer (ATMege16). Dieser Teilnehmer führt einen 
Reset aus. Alle anderen Teilnehmer (ebenfalls ATMega16) gehen durch 
diesen Befehl für eine Dauer von 2 Minuten in den Ruhemodus (Gemeint ist 
hier: Es wird keinerlei Botschaft gesendet)

Jetzt betätige ich eine Taste an meinem RS232-RS485 Umsetzer (Ist ein 
ATMega162). Damit weiß der Umsetzer, daß jetzt ein Datenstrom (eben die 
main.hex) gesendet wird, und nicht eine normale Botschaft (Ich habe hier 
den Taster gewählt an Stelle einer bestimmten Kennung, da ich nicht 
ausschließen kann, dass die Kennung irgendwo zufällig auch in der 
main.hex enthalten ist.

Innerhalb von 10 Sekunden betätige ich den „Flash“ button auf meinem PC 
und die Daten werden gesendet. Der Bootloader des Teilnehmers (ist ja 
aktiv nach Reset) nimmt die Daten auf und beschreibt das Flash.

Ist zwar noch nicht vollständig umgesetzt, aber das wird schon…

Gruß
Detlef
von Micha68 (Gast)


Lesenswert?

Hi!

Danke für die Info!

Stimmt, so könnte es gehen. Nur einen ansprechen, alle anderen für die 
Dauer x in die Pause schicken.

Dann muss ich nur mal sehen, wie die Kommunikation zwischen PC und 
Bootloader aussieht und kann das Update als Teil meines Programms 
aufnehmen. Einmal gestartet geht er einfach Conbtroller für Controller 
durch. Ein gut codiertes "kommt-aus-der-Pause" würde dann sogar 
schneller gehen als eine feste eingestellte Zeit.

Danke,
Micha
von Stefan P. (form)


Lesenswert?

Detlef Wilken schrieb:
> Jetzt betätige ich eine Taste an meinem RS232-RS485 Umsetzer (Ist ein
> ATMega162). Damit weiß der Umsetzer, daß jetzt ein Datenstrom (eben die
> main.hex) gesendet wird, und nicht eine normale Botschaft (Ich habe hier
> den Taster gewählt an Stelle einer bestimmten Kennung, da ich nicht
> ausschließen kann, dass die Kennung irgendwo zufällig auch in der
> main.hex enthalten ist.


Nimm doch als Kennung etwas, was nicht nur ":",CR/LF,0-9 und A-F enthält 
:)
von Micha68 (Gast)


Lesenswert?

Hi!
Genau das meinte ich  mit einer gut codierten Kennung ;)

Gruss,
Micha
von Markus M. (Firma: EleLa - www.elela.de) (mmvisual)


Lesenswert?

Ich habe mal einen CAN-Bootloader für Massen-Update geschrieben. Im Feld 
sind bis zu 400 Steuerungen, vernetzt über CAN.
Der Update lief dann Gruppenweise mit 100 Stück. Man hätte auch alle 
gleichzeitig machen können.

Als Codierung einer seriellen Schnittstelle verwende ich gerne das 
UU-Format.
Damit kann man parallel zu den Daten auch Text-Botschaften verschicken, 
js sogar könnte man problemlos unterschiedliche Daten-Telegramme 
verschicken.
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.