Hallo all, habe vor einiger Zeit mehrer atmega328p bei Reichelt gekauft, und hab jetzt Probleme mit Bootloaderstart. Offensichtlich scheint die bootrst fuse nicht richtig zu funktionieren, der Controller startet immer bei Adresse 0, alle Kombinationen mit bootrst, bootsz0,1 führen zu nichts. Ich konnte folgendes feststellen: die erste Aktion, die der Bootloader macht, ist eine LED anzuschalten. Adresse der Bootloader-Section ist 0x3f00. wenn keine Applikation drauf ist, d.h. der gesamte Flash vor dem Bootloader ist 0xffff, dann geht die LED nach reset an, da 0xffff invalid opcode ist, wird er übersprungen und irgendwann kommt er auch bei 0x3f00 an und startet den Bootloader. Sobald aber eine Applikation mit endless main loop drauf ist, geht die LED nicht mehr an, die Applikation wird gleich gestartet, d.h. der Controller geht nach reset nicht nach 0x3f00. Hat jemand ähnliche Probleme ? es sieht wirklich so aus als ob die bootrst fuse keine Einfluß auf den Resetvector hat. Grüße, Micha
Moin Micha, hast du die Interrupt Vektoren in den Bootrom gemapped? Aus dem Datenblatt:
1 | /* Enable change of Interrupt Vectors */
|
2 | GICR = (1 << IVCE); |
3 | /* Move interrupts to boot Flash section */
|
4 | GICR = (1 << IVSEL); |
Gruß, Oliver
Hast Du beachtet, dass 3f00 eine Wortadresse ist? Im .hex muss also der Beginn des Bootcodes auf 0x7e00 sein?
Hallo, da ich keine Interrupts verwende ist es eigentlich egal wo die Vectoren stehen, es werden auch keine Interrupts enabled. ja, die Startadresse ist korrekt, Wordadresse: 0x3f00 Byteadresse: 0x7e00 ich verwende ja den Bootloader schon für andere AVR Typen, und das hat bisher immer funktioniert. trotzdem Danke für die Hilfe Grüße, Micha
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.