Hallo Forum. Ich habe eine Software welche immer beim Gerätestart gestartet werden muss. Zusätzlich will ich aber einen Bootloader auf dem Prozessor haben, welcher mir es ermöglicht per USB zu flashen und das möglichst per Atmel FLIP. Es handelt sich dabei um einen AT90USB162. Das Gehäuse des gesamten Gerätes ist hermetisch verschlossen. Deswegen fällt auch die Möglichkeit mit HWBE weg. Das einzige was von außen erreichbar ist, ist die USB-Schnittstelle. Ich benutze für die Entwicklung IAR Workbench 5.11B Laut dem Atmel Datenblatt zum Bootloader kann man per "special software condition" einfach an den Anfang vom Bootloader (0x3800) springen und es geht. So habe ich versucht per asm("jmp 3800") dahin zu springen. Das geht aber leider nicht. Er verlässt dabei nicht mal die eigentliche Applikation. Also versuchte ich es damit: #define CALL(addr) (((void(*)(void))(char *)addr)()) CALL( 0x3800 ); Damit springt er auch aus der Applikation raus. Aber der Bootloader meldet sich nicht richtig per USB an. Er übergibt nur 0x00 als VendorID sowie ProductID. Wenn ich allerdings per BOOTRST den Prozessor beim Start zum Bootloader springen lasse, dann funktioniert der Bootloader anstandslos. Also ist dieser grundsätzlich okay. Da meine Applikation Interrupts benutzt habe ich folgendes versucht: __disable_interrupt(); CALL( 0x3800 ); Führt aber zum gleichem Symptom des Bootloaders. Im Datenblatt des AT90USB162 habe ich gelesen, dass man die Interrupt-Tabellen vom Applikationsspeicherbereich in den Bootloaderspeicherbereich verschieben kann. Also habe ich es wie im Datenblatt beschrieben gemacht: MCUCR = (1<<IVCE); MCUCR = (1<<IVSEL); CALL( 0x3800 ); Geht natürlich auch nicht g. Um auszuschließen, dass der Prozessor nicht doch Wortadressen für den Sprung erwartet habe ich natürlich alle diese Methoden auch mit den Zieladressen 0x1800, 0x1C00 und 0x3000 probiert. Hat jemand eine Idee was ich falsch mache, einen Vorschlag wie ich den Prozessor vor einem Sprung auf einen "nach-Reset-Zustand" setzten kann oder einen Vorschlag wie ich es sonst noch machen könnte? Wie gesagt, ein Timeout am Anfang wäre unpraktikabel und eine Reset-Knopf wäre nicht umsetzbar. Vielen Dank im Voraus, Matthias
Hallo Stefan. Ich habe zwar unzählige Postings gelesen, aber grad diesen nicht. Habe wohl leider immer nach den falschen Schlagwörtern gesucht bzw. die falschen Überschriften bevorzugt. Jedenfalls DANKE ich dir über alles. Das war wirklich der entscheidende Hinweis. Vielen, vielen Dank nochmal, Matthias
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.