Hallo, ich habe einen Bootloader für den ATXMEGA128A1 geschrieben und möchte das Programm nun in die Bootloader-Section per AVR Studio flashen. Wenn ich kompiliere entstehen die sections .BOOT und .text. In den Memory Settings des Projekts steht der Memory Type Flash mit der section .BOOT und der Startadresse 0x10000 (Word). An diese Adresse in Flash wird aber nur eine Routine (SP_LoadFlashPage) geflasht: .BOOT 0x00020000 0x3a .BOOT 0x00020000 0x3a sp_driver.o 0x00020000 SP_LoadFlashPage Meine restlichen Funktionen (serieller Empfang der Daten etc.) werden in die section .text geflasht, welche bei 0x00000 beginnt-also in der application-section. Wenn ich nun: LDFLAGS += -Wl,-section-start=.text=0x20000 in den Linker Options einfüge gibt es vom .text segment eine Memory Überlappung mit dem .BOOT Segment, welches ebenfalls bei 0x20000 beginnt. Bin einigermassen verwirrt bzgl. der Memory Settings, wie kann ich der Kiste beibringen, ALLE Funktionen meines Bootloader Programms in den Flash Bereich ab 0x20000 zu flashen?
hi, bei meinem ATxmega128a3 habe ich es wie folgt gemacht (Projekt-Eigenschaften, Memories (AVR Studio)): "Flash .text 0x10000" (word) "Flash .BOOT 0x10F00" (word) d.h. text section steht zu beginn des bootflashs und BOOT section am Ende. Man muss sich hier nur bewusst über die Größen der jeweiligen Sections sein. Die Größen kannst du auch in der .lss-Datei nachsehen. Es ist eine unschöne statische Lösung, die funktioniert :)
Hi, danke. Ich habe mit Deiner Lösung das Programm fehlerfrei kompilieren können. Leider schmiert AVR Studio bei "reading flash input" reproduzierbar ab, wenn ich es zu flashen versuche. Der Linker macht folgendes: avr-gcc -mmcu=atxmega128a1 -Wl,-Map=Boot10CH_LED.map -Wl,-section-start=.text=0x20000 -Wl,-section-start=.BOOT=0x21e00 main.o usart_driver.o Memory01.o eeprom.o eeprom_driver.o write_flash.o sp_driver.o -o Boot10CH_LED.elf .lss und .map sind im Anhang-vielleicht siehst Du was darin...
hi, .lss sieht ok aus. Ich würd mir erstmal ein neues Projekt anlegen, das lediglich in einer endlosschleife z.b. eine led an und ausschaltet. Das würde ich dann erstmal normal in appl-flash schreiben und zur kontrolle flash auslesen. Dann veränder die .text section zum boot bereich, setzte die bootrst fuse und versuch es erneut. (keinen linker explizit verändern, nur .text section angeben) Lies den Flash aus und dein Programm sollte nun im Boot Flash sein. Wenn du soweit bist, kannst du ja dann die self programming header (sp_driver.h und sp_driver.S) hinzufügen und die .BOOT section anpassen. Er sollte nun kompilieren. Wenn das klappt kannst du nun deinen bootloader schreiben. Bei Verwendung von Intterrupts, vergiss nicht die Interrupts vom Appl Flash zum BootFlash entsprechend anzupassen (IVSEL bit im PMIC). Bei einem Jmp muss dieses jedesmal auch geschehen.
Hi, danke für die Strategie. Bin Deinem Rat gefolgt und habe ein Mini Programm geschrieben. Es ist ja nicht wirklich kompliziert aber ich will's noch mal sicherstellen: 1) Mini programm in Appl. section läuft, Portpin wackelt 2) In Memory Settings Memory Tpe "Flash" mit Name ".text" und Address "0x10000" definiert -> und kompiliert / gelinkt 3) In ARV Studio unter Fuses "Boot Loader Reset" (Fusebyte2 = 0xBF) ausgewählt und geflasht Das lässt sich flashen ohne dass AVR Studio abstürzt aber mein Mini Programm läuft nicht mehr, Portpin wackelt nicht. Muss ich noch etwas weiteres umstellen?
wenn du keine Interrupts nutzt, wars das.. lies den Flash mal aus und vergleich die hex-files....
Hi, bin gerade aus dem Urlaub zurück. Interrupts benutze ich in dem kleinen Testprogramm nicht. Habe die Software einmal in die Application section und dann in die Bootloader section geflasht. In der Application section zappelt der pin, aus der Bootloader section bekomme ich es schlicht und einfach nicht zum Laufen-irgendetwas grundlegendes mache ich noch falsch. AVR Einstellung? Ich habe Dir das Mini Projekt als Zip file angehängt-wäre nett wenn Da mal drüberschaust. 1.hex = ausgelesen wenn in bootloader section geflasht 2.hex = ausgelesen wenn in application section geflasht Danke für die unermütliche Unterstützung...
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.