Forum: Mikrocontroller und Digitale Elektronik XMega Bootloader / avdude


von Ssssss (Gast)


Lesenswert?

Hi!

Ich arbeite mit einem atxmega64a1 (laut Aufdruck Chip rev G).

Zunächst habe ich avrdude gepatcht um xmega64 programmieren zu können 
(Einträge in avrdude.conf geadded). Das klappt auch soweit.

Jett habe ich mir einen avr bootloader auf den xmega portiert (avrprog).
Aus der App-Section heraus läuft der prinzipiell. Connecten/Lesen etc 
geht, nur SPM geht halt nicht da nicht aus Bootloader bereich 
ausgeführt.

Dann habe ich versucht den Bootloader in die Bootloader Section zu 
kopieren.

Leider sind die Angaben im Xmega Datenblatt (doc8067) ein wenig 
wiedersprüchlich. Dort steht er habe 64K Flash + 4K AppTABLEsection + 4K 
Bootloader. Es scheinen aber 64K inkl AppTable Section zu sein (macht ja 
sinn)

Auf Seite 11 steht (dort in words, habs mal in byte umgerechnet):
FLASH : 0x000000 - 0x007FFF
APPTBL: 0x00F000 - 0x00FFFF
BOOT  : 0x010000 - 0x011000

Demnach wäre BOOT an adresse 0x010000 und ich müsste den Bootloader 
dahinkopieren.

Als test habe ich ab 0x00000 ein blinkprogramm und ab 0x10000 den 
bootloader geflasht.
Wenn ich jetzt aber fuse2 = 0xBF setze müsste doch der bootloader 
starten, oder hab ich noch was übersehen ?
Leider tut er das nicht... Es startet immer das blinkprogramm unabhängig 
von fuse2

Ich muss dazusagen dass ich avrdude gepatcht habe um fuse* auch zu 
schreiben statt nur auszulesen bei den xmegas.
Wenn ich fuse2 schreibe und zurücklese steht dort auch oxBF drin.

Irgendwelche Tipps ?

von Helmut R. (heru01)


Lesenswert?

Hallo Sssssss (bitte logg Dich mal ein, danke),

eine Frage:
* das Blinkprogramm oder der Bootloader enthalten Interrups? Wenn ja, 
musst Du diese umbiegen.

* schreib als Test ein Blinkprg. mit SW Delay, das Du in den Bootbereich 
schreibst. Den Anfang des Flash (0x0000) lässt Du leer. Die Fuse musst 
auf Bootloaderbereich-Start stellen. Nach dem Einschalten muss das Ding 
blinken, sonst hat der Chip ein grundlegendes Problem (beim 128 waren es 
die Rev. < H die nicht korrekt liefen)

Gruß
Helmut

von Ssssss (Gast)


Lesenswert?

Hi!

Hab meine Logindaten nicht mehr, geht doch auch so ;)

Also ich hab inzwischen einen Windowspc organisiert und im Winavr 
getestet.

Das Problem scheint beim gcc (linux) zu liegen!

Wenn ich das File unter winavr/avrstudio compiliere und dann unter linux 
flashe
funktioniert der bootloader!
Sowohl das ausführen aus dem bootbereich als auch das flashen.
-> beim Xmega64A1 mit rev. H funktioniert der bootbereich also! (war 
nicht ganz klar da die errata nur für den 128 ist)

Das interessante ist dass der output asm code des unter Linux 
compilierten Files vom winavr unterscheided:
In den Initroutinen in ctors_end etc nach dem setzen von SPH/SPL macht 
die winavr version noch ein
OUT 0x38, r1 (r1 sollte 0 sein)
OUT 0x39, r1 (r1 sollte 0 sein)
...und noch ein paar regs...
Warum das passiert weiss ich nicht.

Meine Vermutung ist dass irgendwas beim mitgeben der Linkeroptionen 
schiefgeht.
Bei mir steht in der main.lss:
1
Idx Name          Size      VMA       LMA       File off  Algn
2
  0 .text         00000534  00003800  00003800  00000074  2**1
3
                  CONTENTS, ALLOC, LOAD, READONLY, CODE
4
   1 .bss          00000080  00800100  00003d34  000005a8  2**0

Bei der Winavr version ist bei.bss LMA und VMA gleich. Irgendwas stimmt 
da nicht...
Muss ich mir morgen in der Uni nochmal in ruhe ansehen, heut wars zu 
hektisch um zu suchen worans liegt.

Gruss,
Simon

von Anyu D. (blacksea)


Lesenswert?

Ssssss schrieb:
> Hi!
>
> Ich arbeite mit einem atxmega64a1 (laut Aufdruck Chip rev G).
>
> Zunächst habe ich avrdude gepatcht um xmega64 programmieren zu können
> (Einträge in avrdude.conf geadded). Das klappt auch soweit.
>

Hallo Simon

Ich arbeite jetzt auch mit einem Xmega64A1 wie Sie.

Die originale AVRDUDE v5.5 von WINAVR bzw. die von selbst kompilierte 
AVRDUDE v5.8 habe ich benutzt. Aber die beide melden den selben Fehler 
bei Verifikation, trotzdem die Einschreiben klappt. Eigentlich habe ich 
die Konfiguration für Xmega64a1 nach doc8067 in avrdude.conf hingefügt.

Können Sie mir meinen Fehler zeigen, ggf. Ihre kompilierte AVRDUDE und 
avrdude.conf per Email an mich (anyu.dai@sphinx-electronics.de)schicken?

Vielen Dank!

mit freundlichen Grüßen

Anyu

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
Noch kein Account? Hier anmelden.