Hallo Leute, ich versuche im Moment den USB-UDF Bootloader mit der Version 1.04 auf meinem AtxMega63A3U zum Laufen zu bekommen. Ich möchte den bootloader aus meiner Applikation starten. Die Abfrage des IOs zum Starten des Bootloaders habe ich ausgebaut. So dass dieser starten sollte. Kompiliert habe ich mit IAR. Die Fusebits habe ich auf die Applikaiton gestellt. In meiner Applikation benutze ich die USB-Schnittstelle um mit dem PC zu kommunizieren. USB-Stack läuft als HID-Gerät. Ich arbeite mit dem AVR-Studio 6. Mir fehlt jetzt noch der Jump aus der Applikation in den Bootloader. Ich habe zwar schon einiges hier gelesen aber ich kriege es nicht hin. Hat jemand dies schon zuverlässig lösen können? Ich habe folgenden Code getestet. Aber leider lande ich damit immer wieder in der Applikation. void (*start_bootloader) (void)=(void (*)(void))BOOT_SECTION_START + 0x1FC; cpu_irq_disable(); start_bootloader(); Danke. Gruß, Georg.
eingentlich musst Du doch nur einen Reset erzeugen (z.B. per Watchdog) - um den Bootloader zu aktivieren, oder?
Hallo, ja das geht natürlich auch. Aber dann muss ich die Fusebits auf Bootloader setzen und dieser würde dann nach jedem Anlegen der Versorgung gestartet. Dass möchte ich eigentlich nicht. Es soll die Applikation gestartet werden und aus dieser auf Anweisung der Bootloader. Außer ihr kennt noch einen anderen eleganteren Weg? Gruß, Georg.
Georg X. schrieb: > Außer ihr kennt noch einen anderen eleganteren Weg? Ich kenn einige Applikationen die einen "Soft-Jumper" im EEPROM nutzen. Ansonsten noch die Fragen: Ist "BOOT_SECTION_START" richtig definiert ? Sicher, dass dein Bootloader noch lebt (ISP überschrieben oder so ?)
Hallo, #define BOOT_SECTION_START (0x10000) Der Bootloader lebt bzw. ist im Bootsector abgelegt. Meine Applikation überschreibt diesen Bereich nicht. Ich habe das Projekt so konfiguriert dass nur der Applikationsbereich gelöscht wird. Den Bootloader kann ich auch testen wenn ich die Fusebits auf Bootloader setze und dann versuche die Applikation zu debuggen. Da wird automatisch erst der Bootloader gestartet. Zu sehen an der USB-Anmeldung am PC. Wie hast du deine Soft-Jumps realisiert? Gruß, Georg.
Und was ist, wenn du im EEPROM vom Hauptprogramm für den Bootloader eine Info hinterlegst und dann den Reset ausführst? Der Bootloader schaut dann im EEPROM nach, ob er sich selbst ausführen oder in die Hauptapp springen soll. Hans
Georg X. schrieb: > Hallo, > > ja das geht natürlich auch. Aber dann muss ich die Fusebits auf > Bootloader setzen und dieser würde dann nach jedem Anlegen der > Versorgung gestartet. Dass möchte ich eigentlich nicht. Es soll die > Applikation gestartet werden und aus dieser auf Anweisung der > Bootloader. > > Außer ihr kennt noch einen anderen eleganteren Weg? > > Gruß, > Georg. Na dann - wie oben schon erwähnt - ein Kennzeichen im Eeprom setzen, den Bootloader grundsätzlich starten und bei gesetztem EEprom-Kennzeichen sofort die Application starten. Am Anfang der Application Kennzeichen zurücksetzen, wenn bootloader aufgerufen werden soll: Kennzeichen setzen und booten per watchdog. Nur mal so interessehalber: Wofür brauchst Du den Bootloader, wenn Du ihn gar nicht vewenden willst?
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.