Forum: Mikrocontroller und Digitale Elektronik Bootloader per Infrarot


von Armin Kniesel (Gast)


Lesenswert?

Hallo,

wäre das möglich, daß man das Programm per Infrarot in den AVR flasht?
Was bräuchte man dafür? Einen IrDA-Empfänger?
Oder reicht da ein normales Fotomodul wie TSOP1836 oä?

Mich nervt, daß man ständig das Kabel zum programmieren einstecken muß,
ich kann in meinem Fall das Kabel aus mechanischen Gründen nicht drin
stecken lassen beim Betrieb.

Armin.

von Armin Kniesel (Gast)


Lesenswert?

Mein Gedankengang war der, ein IrDA-Modul am PC habe ich schon, einen
virtuellen COM-Port auch, somit müsste PC-seitig das Problem nicht
liegen. Nur wie sieht das AVR-seitig aus? In einem anderen Thread habe
ich verschiedene Meinungen über RS232 über IrDA gelesen.

Armin

von Arvid Teichtmann (Gast)


Lesenswert?

Ich setze an einem MSP430 einen IrDA Controller MCP2150 von Microchip
ein. Allerdings nicht zum Flashen, sondern zur Datenübertragung. Ich
plane, eine In-System-Update Funktion zu integrieren, mit der der
Controller sich selber mit einem neuen Programm über IrDA flashen
kann.

Was Du vorschlägst, wird so einfach wahrscheinlich nicht funktionieren.
Du verlierst über IrDA Pakete, d.h. Du must ein Protokoll aufsetzen, um
sicherzustellen, dass alle Pakete angekommen sind (es sei denn, es gibt
IrDA-Controller, die diesen Part übernehmen können).
Dazu must Du auf der PC-Seite Software schreiben und auf AVR-Seite auch
Routinen für den Software-Update haben. Möglicherweise sogar einen
extra AVR, der das Protokoll und das flashen des eigentlichen
AVR-Controllers übernimmt.

Wenn Du eine gute Lösung gefunden haben solltest, würde mich
interessieren, wie Du es gelöst hast.


Gruss
Arvid

von Markus Kaufmann (Gast)


Lesenswert?

@Armin:
Man könnte das Signal auch mit dem TSOP1836 empfangen, aber nicht per
IRDA. Die Übertragungsrate ist wohl deutlich geringer als bei Irda,
könnte aber vermutlich mit der normalen ISP-Programmierung mithalten.

Wie Arvid schon erwähnt hat, braucht man im Prinzip einen Rückkanal,
damit man sehen kann, ob die Programmierung funktioniert hat. Man
könnte darauf verzichten, wenn man eine fehlerhafte Übertragung
anderweitig erkennen kann, d.h. wenn man z.B. eine sowieso vorhandene
LED zur Statusanzeige verwendet. Man muß dann aber eine fehlgeschlagene
Übertragung nochmal komplett wiederholen und die Programmiersoftware
weis nicht, ob die Übertragung geklappt hat.

Nur Hin-Kanal: IR-LED an PC, TSOP an AVR.
Hin- und Rückkanal: IR-LED und TSOP an PC und AVR.

Prinzipiell mußt Du aber auf jeden Fall einen Bootloader für den AVR
schreiben und beim PC ein Programm, daß die Daten übertragen kann.


Bei IRDA (mit passendem Chip) könnte es sein, daß Du den
RS232-Bootloader verwenden kannst, aber da bin ich mir nicht sicher, da
ich nicht weis, wie der Bootloader erkennt, daß Daten anliegen.

Markus

von Armin Kniesel (Gast)


Lesenswert?

Und wie schreibt man so einen Bootloader?
Wenn Infrarot Daten -> Dann kopieren ins Flash?
Geht das so einfach? Ich habe noch nie mit dem Bootloader gearbeitet
und weiß nicht was man dem sagen muß.

Aber schonmal Danke für die Tipps.

Armin

von Steffen (Gast)


Lesenswert?

Vor allem solltest Du erst einmal absolut (soweit wie möglich)
sicherstellen, das sich der Bootloader nich alleine aktivieren kann
(EMV-Probleme ect.).
Sogar Atmel hat ja Probleme damit.
Ich habe zwar meinen Bootloader (allerdings PIC) eigentlich fertig,
scheue mich aber trotzdem (noch) diesen befehlsgesteuert zu aktivieren.
Ich habe schon überlegt einen speziellen Header zu verwenden und die
Programmierung nur durchzuführen wenn der stimmt. Aber was ist, wenn
aus irgendeinem nichterfindlichen Grund der Programmcounter genau
hinter die Abfrage zeigt (besser gesagt durch irgendeine Störung
dahingeworfen wird)?

Dazu würden mich eure Meinungen interessieren.

Zurück zur eigentlichen Frage:

Der Bootloader ist im Prinzip nur ein kleines Programm, was in der Lage
ist Befehlsgesteuert (vom PC z.B. über RS232) den restlichen Flash des
Prozessors zu programmieren. Der Schnittstellentyp zum PC ist dabei
eigentlich egal. Wichtig ist nur, das der Prozessor nach dem Schreiben
eines Datenblockes ein Prüflesen durchführt und das Resultat an den PC
zurückmeldet. Kommt keine Rückmeldung oder ein Fehler, dann wird
einfach versucht den Block nochmal zu programmieren. Ohne
Bidirektionale Datenübertragung funktioniert das natürlich nicht.

Steffen

von Peter D. (peda)


Lesenswert?

@Steffen,


"Aber was ist, wenn
aus irgendeinem nichterfindlichen Grund der Programmcounter genau
hinter die Abfrage zeigt (besser gesagt durch irgendeine Störung
dahingeworfen wird)?"


Das darf einfach nicht passieren !
Also immer schön einen ordentlichen Reset-IC nehmen oder den internen
Brown-Out.

Ansonsten kannst Du doch jedes Programm vergessen, wenn Du erwartest,
daß der PC kreuz und quer an eine beliebige Stelle hüpft.


Ich habe mir auch einen Bootloader für den Mega8 geschrieben,
funktioniert super.
Er ist aber nur für 200ms nach dem Einschalten aktiv und versucht die
Baudrate zu erkennen und das Paßwort.
Die PC-Software versucht ständig das Paßwort zu senden, d.h. das
PC-Programm muß zuerst gestartet werden.

Super ist am Mega8, daß auch der Botloader Interrupts benutzen kann,
d.h. während eine Page geschrieben wird, können schon die Bytes für die
nächste Page empfangen werden.
Man muß bloß vor dem Start der Anwendung die Interruptvektoren wieder
zurück in den User-Flash setzen.


Peter

von Steffen (Gast)


Lesenswert?

"Das darf eigentlich nicht passieren !"

Sollte es eigentlich auch nicht. Aber was wenn das System irgendwo
extremsten Störungen ausgesetzt ist?

Ich erwarte nicht, das der PC kreuz und quer springt aber eine 100%-ige
Sicherheit habe ich eigentlich nicht.

Aus dem Grund sperre ich den Flash gegen Schreibzugriffe. Das hat
natürlich den Nachteil, dass ich das System nur über die
ICSP-Schnittstelle programmieren kann. Über den Bootloader geht es
etwas ellegannter.

Steffen

von Markus Kaufmann (Gast)


Lesenswert?

@Steffen:
Entweder Deine Schaltung ist für diese "extremsten Störungen"
ausgelegt, dann darf der PC auch unter diesen Bedingungen nicht
springen. Oder die Schaltung ist nicht dafür ausgelegt, dann sind diese
Störungen ganz klar außerhalb des Spezifikation und dann kann eben
alles passieren.

Außerdem stellt sich die Frage, ob der Schutz gegen Schreibzugriffe
überhaupt noch funktioniert, wenn die Störungen so stark sind, daß
Register willkürlich verändert werden.

Markus

von Steffen (Gast)


Lesenswert?

Hallo Markus,

das ist soweit richtig. Es ist nur so, das wir teilweise Baugruppen,
die ich leider auch nicht in einem geschirmten Gehäuse unterbringen
kann, als OEM-Produkte (Platine zum Einbau in andere Systeme)
verkaufen.

Gerade eine dieser Installationen ist problematisch. Ich habe noich
nicht den blassesten Schimmer was da genau passiert. Es ist auch nur
eine von mehreren Hundert. Ein EMV-Test wurde natürlich nach allen
Normen ohne Probleme durchgeführt.

Wie gesagt eigentlich hab ihr beide Recht aber ich bin da lieber
vorsichtig.

Steffen

von Daniel Roth (Gast)


Lesenswert?

Hi !

In der AppNote AVR109 "Self Programming" ist ein Bootloader mit
C-Quelltext beschrieben, der über die serielle Schnittstelle läuft. Als
Software auf dem PC kommt AVR Prog (im Studio integriert) zum Einsatz.
Vielleicht hilft's !? Für die Übertragung müsste dann ein fertiger
IR-Adapter, der einen Com-Port emuliert, funktionieren.

Daniel

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.