mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Verzögerung durch Bootloader normal ?


Autor: Peter F. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich hab von der Seite http://www.microsyl.com/megaload/megaload.html den
dort angebotenen Bootloader runtergeladen und meinen Mega16 erfolgreich
damit geflasht.
Das Problem ist nun das bei einem Reset des MCs ca 15 Sekunden vergehen
bis der MC Starklar ist. (Ich hab den MC per RS232 am PC angeschlossen
und beim Programmstart wird eine Meldung ausgegeben.Daher weiß ich das
mit den 15 Sekunden.)
Darum die Frage ob das normal ist oder nicht ?

Autor: Joerg Wunsch (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Nun, irgendwie mußt der Bootloader ja eine Chance bekommen, daß man
ihn nach dem Reset ansprechen kann, um den Flash neu zu schreiben.
Entweder löst man das mit einer Verzögerung, innerhalb derer die
serielle Schnittstelle dann abgefragt wird, ob jetzt jemand den
Bootloader angeworfen haben möchte (wobei 15 Sekunden exzessiv
erscheint, andere benutzen hier ein bis zwei Sekunden), oder man
springt den Bootloader auf andere Weise aus dem Programm heraus an, so
daß er normalerweise transparent bleibt und keine Zeit warten muß.
Letzteres wird beispielsweise beim AVR JTAG ICE gemacht: es gibt einen
Befehl für das JTAG ICE, mit dem der Bootloader explizit aktiviert
wird, danach kann man einen Firmwareupdate durchführen.

Dritte Variante wäre eine hardwaremäßige Aktivierung z. B. mittels
Jumper.  Die braucht ein Portpin, damit der Bootloader den Jumper
abfragen kann.

Wichtig bei der Variante mit Wartezeit ist natürlich, daß sie nur bei
externem oder Power-On-Reset warten sollte, bei einem Watchdog-Reset
sollte sie wohl sofort in die eigentliche Applikation springen.

Autor: Thorsten Eichner (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

die Verzögerung ist normal. Sie kommt von der automatischen Erkennung
der Baudrate. Die Windowssoftware wartet darauf, das ein bestimmtes
Byte vom Bootloader kommt. Zu diesem Zweck sendet der Bootloader dieses
Byte mit allen möglichen Baudraten (UBRR0L-Register), irgendwann hat er
dann die richtige Einstellung gefunden. Das kann dann halt schonmal ein
paar Sekunden dauern.

Gruß
Thorsten

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ja, der Megaload geht da sehr einfach vor.
Er sendet einfach mit 256 verschiedenen Baudraten und das dauert eben.

Wenn Du das nicht willst, dann nimm doch meine Routine.
Die ist etwas komplizierter, weil sie, sobald der PC was sendet, die
Baudrate mit dem Timer echt ausmißt und dann die UART sofort auf die
richtige Baudrate setzt.

Deshalb reichen ihr auch nur 0,2s Startverzögerung aus, was bei kaum
einer Anwendung stören wird.


Peter

Autor: Sven Müller (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Peter, wo gibts denn deine Routine?

Gibts da auch ne gute Dokumentation zu? suche etwas wo ich den MC Teil
übernehmen kann und die PC Software selbst schreibe.

Danke schonmal.

Autor: Sven Müller (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ah, schande über mich..

Natürlich in der Codesammlung.

Autor: Peter F. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@ Peter Dannegger

Wenn ich deinen Bootloader flashe, kann ich dann weiterhin den Megaload
benutzen oder brauche ich einen andere Windowssoftware ?

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@Peter F.

"weiterhin den Megaload benutzen"

nein, meiner hat ein anderes Protokoll.
Ich nenne es A5-Protokoll, weil das Byte 0xA5 beim Programmieren eine
Sonderfunktion hat. Die restlichen Kommados sind textuelle Kommandos,
d.h. mit 0x0A oder/und mit 0x0D abgeschlossen.


Aber der C-code ist ja mit dabei.
Nur habe ich von Windows keinerlei Ahnung und habe es mit BC4.0 als
DOS-Anwendung übersetzt.


Vielleicht kann ein Windowser es ja mal nach W-XP konvertieren. Da soll
man ja auch noch Kommandozeilen auswerten können.
D.h. man muß dem Benutzer nicht immer jedesmal komplette
Weltumsegelungen mit der Maus zumuten.
Es müssen ja nur die inportb() und outportb() durch entsprechende
Aufrufe des Windows API ersetzt werden.


Peter

Autor: Peter F. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Schade, wäre auch zu schön gewesen. Von C hab ich leider absolut keine
Ahnung. Das Ganze ist daher ein paar Stufen zu hoch für mich.
Dann werde ich wohl mit der Verzögerung leben müssen. Ist ja nicht sooo
schlimm :)

Autor: Thorsten (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Man könnte den Megaload-Bootloader so anpassen, daß er als erstes
überprüft, ob ein bestimmter Portpin z. B. High ist. Wenn nicht, wird
sofort das Anwenderprogramm gestartet. Du müßtest dann halt ein Jumper
o. ä. setzen.

Thorsten

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.