Bei Arduinos wie dem Nano oder dem Mega2560 wird nach einem Reset ja zunächst der Bootloader gestartet. Der horcht dann eine festgelegte Zeit auf der seriellen Schnittstelle, ob sie mit etwas verbunden ist, auf dem gerade avrdude läuft. Das soll auch so bleiben. Ich weiss, dass ich durch ändern eines Fusebits direkt die Anwendung starten kann, aber so radikal möchte ich es nicht haben. Ich habe eine eigene Software auf dem PC laufen, die über die serielle Schnittstelle mit einer Software von mir auf dem Arduino kommuniziert. Ich würde gerne auch den Arduino direkt nach dem Verbinden per DTR Signal neu starten. Und jetzt kommts, ich mag dann nicht im PC Programm warten, bis der Bootloader auf dem AVR sicher aufgegeben hat und meine Applikation gestartet hat. Sende ich vorher schon los, passiert es sogar, dass der Bootloader die Kontrolle gar nicht an die Applikation abgibt. Gibt es also etwas, dass ich an den Bootloader schicken kann, so dass er nicht mehr weiter wartet, sondern sogleich zur Applikation springt ?
Falls nicht, könntest Du ja den Bootloader passend modifizieren.
Der Arduino-Bootloader verwendet wohl das STK500-Protokoll. https://ww1.microchip.com/downloads/en/Appnotes/doc2525.pdf
Ich habe mich jetzt mal durch den Quelltext des Bootloaders gewühlt. Es geht mit der Sequenz : MESSAGE_START 0x1B seqNum 0x01 msgLength HI 0x00 msgLength LO 0x01 TOKEN 0x0E data (CMD_LEAVE_PROGMODE_ISP) 0x11 checksum (alle bytes xor) 0x04 Beim normalen Programmieren wird das erste Kommando übrigens ca. eine Drittelsekunde nachdem DTR aktiv wurde gesendet. Nur für den Fall, dass noch jemand das braucht. Ich hatte ja drauf gehofft, das schon jemand vor mir danach gesucht hat.
Die Leute schreiben sich ueblicherweise einen eigenen Bootloader. Der macht dann genau, was er soll.
Bana A. schrieb: > Die Leute schreiben sich ueblicherweise einen eigenen Bootloader. Der > macht dann genau, was er soll. Jeder etablierte Bootloader mit einer passenden Funktion tut genau das Gleiche, sofern die Funktion nicht fehlerhaft implementiert und der Bootloader damit nicht ungetestet in die freie Wildbahn entlassen wurde.
Rainer W. schrieb: > Bana A. schrieb: >> Die Leute schreiben sich ueblicherweise einen eigenen Bootloader. Der >> macht dann genau, was er soll. > > Jeder etablierte Bootloader mit einer passenden Funktion tut genau das > Gleiche, sofern die Funktion nicht fehlerhaft implementiert und der > Bootloader damit nicht ungetestet in die freie Wildbahn entlassen wurde. Selbstverständlich nicht. Die Anforderungen an einen Bootloader können ganz unterschiedlich sein. Das fängt schon damit an wann und wie er aktiviert wird. Beim Start? Spezielle Pinbelegungen? Durch die Applikation? Geht natürlich beim Interface weiter, UART, SPI, I2C? Dann was soll er tun? Ist der BL selbst updatebar? Wird Authentifizierung und/oder signierte oder verschlüsselte Firmware verwendet? Da gibts viele Anforderungen in der realen Welt.
:
Bearbeitet durch User
Cyblord -. schrieb: > Selbstverständlich nicht. Die Anforderungen an einen Bootloader können > ganz unterschiedlich sein. Beim TO ging es ausschließlich um die Frage, ob sich die Timeout-Funktion für den Start der eigentlichen Applikation durch ein Kommando vom Host-PC abbrechen lässt - um kein bisschen mehr.
Rainer W. schrieb: > Beim TO ging es ausschließlich um die Frage, ob sich die > Timeout-Funktion für den Start der eigentlichen Applikation durch ein > Kommando vom Host-PC abbrechen lässt - um kein bisschen mehr. Genau solche speziellen Anforderungen meinte ich doch.
:
Bearbeitet durch User
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.