Hallo Leute, ich verwende momentan 2 XMEGA Mikrocontroller den XMEGA256A3U und den XMEGA32A4U. Für beide habe ich bereits einen Bootloader geschrieben. Ich habe dabei die ATMEL SP_DRIVER.c verwendet. Das scheint auch schon alles ganz gut zu funktionieren. Ich flashe den Bootloader mit den AVR Studio in den XMEGA. Anschließend stelle ich mit Hilfe des AVR Studios das Bootfuse auf Bootloader um und schon startet der Bootloader. Jedoch möchte ich den Bootloader nicht über das AVR Studio starten sondern über ein RS232 Kommando. Und genau hier tue ich mich momentan sehr schwer. Hier mein Code: BOOTRST_BOOTLDR_gc; CCP = CCP_IOREG_gc; RST.CTRL = RST_SWRST_bm; Nur leider startet der Bootloader nicht. Auch wird das FUSE Bit nicht verändert. Der Softwarereset wird ausgeführt. Das konnte habe ich geprüft.
Aus den Bootloader selber kann ich ja die Fuse mit Hilfe der SP_DRIVER manipulieren. Geht das auch aus der Applitkation herraus dann wäre das ja schon die Lösung?
Viele benutzen ja das EIND (Extended Indirect Register). Dies ist ja 24Bit groß. Das EIND besteht aus dem Z-Register (Low-Byte und Hight Byte) und dem EIND (1Byte)
3.10.3 EIND - Extended Indirect Register EIND is concatenated with the Z-register to enable indirect jump and call to locations above the first 128KB (64K words) of the program memory
Johann schrieb: > Geht das auch aus der Applitkation herraus dann wäre das ja schon die > Lösung? Hi Johann, kamst du mitlerweile weiter mit dem Start von deinem Bootloader? Ich ich möchte auch aus der Application in den Bootloader jumpen (zB nachdem seriell ich ein bestimmtes Command schicke) und frage mich wie es am gescheitesten tue. Soll ich es über EIND o. Software Reset machen? Danke
Naja, was ist der Unterschied zwischen einem Jump und einem Reset ? Die Register. Passt das so fuer dich ?
Ja, das passt. Danke! Ich probiere gerade die Lösung mit dem Reset in meiner Application. So kann ich, bevor die Hauptschleife im Bootloader startet RST.STATUS-Bit abfragen. Nur funktioniert es nicht ganz, wie ich es mir vorstelle.... Nachdem ich RST.CTRL manipuliere, wird das SRF-Flag zwar 1, nur wird dieser nicht mehr zurückgesetzt. Soll ich es manuell auf 0 setzen? Sonst gelange ich immer in den Bootloader, egal welchen Reset ich mache. Und meine (RST.STATUS & RST_SRF_bm) Abfrage nutzt dann nichts. Schreiben mit (RST.STATUS &= ~(RST_SRF_bm) hat keine Auswirkung. Ich habe genauso mit dem WDT-Reset probiert. Genauso hier, nachdem der WD STATUS-Bit gesetzt wird, wird dieser nicht zurückgesetzt. Also wie kann ich die RST.STATUS Register zurücksetzen??
OK, alles klar, wer lesen kann ist klar im Vorteil... Laut Datenblatt: "The flag will be cleared by a power-on reset or by writing a one to the bit location." Also anstatt ne 0 zu schreiben, soll man ne 1 setzen.
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.