Atxmega128A1 Bootloader AVRDUDE

Gast #3174043
Lesenswert?

Hallo,

ich versuche gerade den Bootloader aus der Application Note AVR1605 auf 
einem Atxmega128A1 zum Laufen zu bekommen. Statt auf einen Pin zu 
reagieren, schreibe ich in der Applikation eine EEPROM Zelle, die im 
Bootloader abgefragt wird und dann wieder zurückgesetzt wird.
Im Bootloader Projekt setze ich .Boot=0x10800 und .text=0x10000. In der 
define.h ist die page Größe auf 512 gesetzt.

Die compilierten hex Dateien (Bootloader und Applikation) füge ich 
testweise in einer hex Datei zusammen (erst Applikation, letzte Zeile 
der Datei löschen, Bootloader dahinter anhängen) und lade das Ganze per 
JTAG in den µC.

Das funktioniert auch alles bereits. Die Applikation startet, ich kann 
die EEPROM Zelle schreiben und nach einem Reset (soft/hard egal) wird 
der Bootloader gestartet und reagiert auf Terminaleingaben. Nach einem 
erneuten Reset startet wieder die Applikation, da die EEPROM Zelle 
zurückgesetzt wurde durch den Bootloader.

Über AVRDUDE lässt sich das Flash auslesen und löschen, die Signatur 
stimmt auch, aber beim Schreiben des Flash kommt immer ein mismatch 
Fehler bei Adresse 0x0000. Im Flash steht danach nur noch 0xFF.

Hier noch der Aufruf von AVRDUDE aus einer .bat Datei:
avrdude -px128a1 -PCOM4 -b9600 -cavr911 -e -U flash:w:App.hex
pause

Wäre froh, wenn mir jemand auf die Sprünge helfen könnte.

Viele Grüße
Sebastian
#3182455
Lesenswert?

Hallo Sebastian,

ich habe das gleiche Problem bei einem Atxmega64.
Bist du schon weiter gekommen bzw. hast du eine Lösung?

Ich denke daß hier das Befüllen der Flashbuffer nicht funktioniert.
Diese werden laut Datenblatt auf 0xFF initialisiert.
Löschen des Flashes funktioniert bei mir auch. Nur kriege ich kein 
einziges
Bit ins Flash.

Wenn du da ev. nen Tip hast wäre super.

Danke und Gruß,
Schorschi.
#3182612
Lesenswert?

Hi,

komm ich da irgendwie an die Sourcen ran?
Ich bin dabei einen TWI Bootloader zu erstellen. Ich bräuchte hier
den Code um diesen mit meinem verlgeichen zu können. Der 
Assemblertreiber von Atmel funktioniert bei mir wie oben beschrieben nur 
begrenzt. Löschen geht aber Schreiben nicht.

Gruß,
Georg.
Gast #3182762
Lesenswert?

Hi Martin,

ja, ich habe nur die Revision 1077 heruntergeladen, weil hier der Bug 
behoben sein soll, den es mit dem Xmega Bootloader gibt.
Evtl. ist es ja nicht mal ein Problem von AVRDUDE...

Gruß
Sebastian
(Firma: TravelRec.) Persönliche Seite #3182833
Lesenswert?

Sebastian schrieb:
> Statt auf einen Pin zu
> reagieren, schreibe ich in der Applikation eine EEPROM Zelle, die im
> Bootloader abgefragt wird und dann wieder zurückgesetzt wird.

Das geht mit RAM oder GPIOR auch, wenn diese im Bootloader nicht 
explizit gelöscht werden. Das wäre dann auch verschleißfrei. Da der 
Bootloader von der Applikation aus über Reset gestartet wird und nicht 
über Power_On, bleiben die Daten im RAM erhalten. Bei den GPIORs hat man 
den Vorteil, dass sie bei Power_On mit 0 initialisiert werden und so der 
Bootloader nach dem Einschalten erst einmal die Applikation startet, 
wenn sie vorhanden ist. Wenn die Applikation einen Wert !=0 in das GPIOR 
schreibt, kann der Bootloader entsprechend reagieren.
#3182835
Lesenswert?

Hallo Leute,

der Code von AVR-Dude hilft mir grad nicht weiter.
Bei mir ist es definitiv so dass die Flash-Buffer nicht befüllt werden.
Warum auch immer. Deswegen ist auch das Flash nach dem Flashen gelöscht. 
Denn die Buffer werdne auch mit 0xFF vorinitialisiert bzw. nicht 
benutzte Bytes damit aufgefüllt. Im Moment ist mir nicht ganz klar warum 
dies so ist.
Entweder der Bootloader von Atmel hat noch nen dicken Bug oder ich hab 
was vergessen oder mach etwas falsch.

Gruß,
Georg.
(Firma: TravelRec.) Persönliche Seite #3182840
Lesenswert?

Georg X. schrieb:
> Bei mir ist es definitiv so dass die Flash-Buffer nicht befüllt werden.
> Warum auch immer. Deswegen ist auch das Flash nach dem Flashen gelöscht.

Sind denn alle Teile des Controllers auf das Bescheiben des Flashs 
entsprechend initialisiert, insbesondere der NVM-Controller? Der A1 hat 
einige Macken, was den NVM betrifft. Dafür werden im Datenblatt 
workarounds beschrieben.
#3182882
Lesenswert?

Hallo,

Ich verwende den ATXMega64A3U.
Welche Teile genau sind den gemeint?

Der Code ist im Bootloaderbereich des Flashes. Das Löschen des Flashes 
funktioniert soweit. Beim Beschreiben der FlashPageBuffer gehe ich vor 
wie im Datenblatt beschrieben:

33.11.2.3 Load Flash Page Buffer
The load flash page buffer command is used to load one word of data into 
the flash page buffer.
1. Load the NVM CMD register with the load flash page buffer command.
2. Load the Z-pointer with the word address to write.
3. Load the data word to be written into the R1:R0 registers.
4. Execute the SPM instruction. The SPM instruction is not protected 
when performing a flash page buffer load.
Repeat step 2-4 until the complete flash page buffer is loaded. Unloaded 
locations will have the value 0xFFFF.

Workarounds sind bei mir im Datenblatt nicht aufgelistet.

Für alle weiteren Tips bin ich dankbar.

Gruß,
Schorschi.
#3223814
Lesenswert?

Hallo,

erstens muß ich sagen daß der Bootloader unvollständig ist.
Ich hab da 2 unterschiedliche Appnotes und bei beiden fehlt einfach 
einiges im Protokoll. Ich hab dieses einfach an meine Bedürfnisse 
angepasst.
Zusätzlich hab ich die Adresse im flash falsch angegeben. Ich hab diese 
Wordweise so wie im Datenblatt im Linkerfile eingetragen. Müßen aber 
Byteweise vorgegeben werden. Jetzt funktionierts. Dauert zwar ne halbe 
Ewigkeit aber an dieser stelle spielt Zeit keine so große Rolle.

Gruß,
Georg.
Gast #3231982
Lesenswert?

Hallo Georg,

woran hast du dich denn dann orientiert, wenn die AppNotes schon 
fehlerhaft sind? Traurig, dass Atmel dann sowas veröffentlicht. 
Irgendwie muss ich das mal zum Laufen kriegen...

Gruß
Sebastian
Gast #3234855
Lesenswert?

Hallo,

habe es jetzt so weit, dass ich per Bootloader Fuse zwischen Applikation 
und Bootloader wechseln kann. Der Bootloader selbst lädt auch den Code 
zum Controller, Verifikation funktioniert.
Lese ich dann den Speicher per Atmel Studio aus, fällt auf, dass jeweils 
ein beschriener Datenblock auf einen unbeschriebenen folgt.

Wäre froh, wenn da jemand einen Rat weiß.

Gruß
Sebastian

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren