Suche ein Beispiel Fuse Bits für Xmega

Gast #2601680
Lesenswert?

Hallo,

ich versuche zum ersten Mal die Fuse Bits im Xmega A1 zu setzen (mit AVR 
Studio 5.1),
habe nur nen AVR-One-Debugger und kein STKxxx und deshalb etwas Muffe, 
dass ich auf dem Crumb-Board den Prozessor "zer-fuse"

Habe <avr/fuse.h>: Fuse Support durchgelesen, habe aber Zweifel, dass 
das genau so beim Xmega + Studio 5.1 übertragbar ist.
Hätte jeman ein kleines Beispiel?

Außerdem gibt es die Einstellung "preserve EEPROM" unter Tools - Memory 
settings. Diese Einstellung gibt doch dann einen Konflikt mit der 
FUSES-Definition?

Der (Kommandozeilen-) Aufruf "avr-objdump -s -j .fuse <ELF file>"
scheint nicht mehr (so) zu funktionieren. Einzige Meldung: "<ELF file> : 
file format elf32-avr" Wie kann man sich das fuse-segment anzeigen 
lassen?

Grüße Alex
Gast #2604371
Lesenswert?

Da leider niemand geantwortet hat,
beatworte ich das für andere jetzt selbst...

Beispiel:

#define  WATCHD_C_WINDOW_8MS  0x0F
#define  WATCHD_TIMEOUT_8S  0xFA
#define  BOD_ACT_CONTINOUS  (unsigned char)~_BV(2) // BOD: act.:
                                                // contin, pdn: disable
FUSES =
{
        .byte[0] = 0,  // JTAG-ID
        .byte[1] = (WATCHD_C_WINDOW_8MS & WATCHD_TIMEOUT_8S),
        .byte[2] = BOD_ACT_CONTINOUS,
        .byte[3] = 0xFF, // reserved
        .byte[4] = FUSE_JTAGEN,  // ext. Reset, 1k Startup= 0,
                                // WD kein lock, JTG enable
        .byte[5] = FUSE_EESAVE & FUSE_BODLVL2 // BOD ~2,7V für 33MHz
};

Das reicht schon.
Fuses.h muss nicht angegeben werden, da schon durch <avr/io.h> 
includiert  wird.
Auch FUSE_MEMORY_SIZE muss nicht angegeben werden!

Vorsicht: Im Family-Datenblatt ist ein Fehler (siehe Errata A1)!

"BODACT fuse location is not correct
The fuses for enabling BOD in active mode (BODACT) are located at 
FUSEBYTE2, bit 2 and 3 and not in FUSEBYTE 5 as described in the XMEGA A 
Manual.."

Die in iox.h definierten Konstante "FUSE_..." sind sicherer anzuwenden, 
da vergessene Werte ungesetzt (1) bleiben und werden verundet: Z.B: 
FUSE_EESAVE & FUSE_BODLVL2 & FUSE_BODLVL1.

PS:
Brownout Spannungen:
Die im Datenblatt angegebenen Spannungen sind nicht genau.
Die Namen der in iox.h definierten Konstanten enum BODLVL_enum
stimmen deutlich besser - die anderen Bits sind aber 0 - Vorsicht!
Meine Messergebnisse habe ich mit Xmega 128A1 bei Raumtemperatur 
gemacht.

BOD Datenblatt  BODLVL_enum  U fallend U steigend
000  3.2  "- - -"          k.A.     k.A.
001  2.9  BODLVL_3V2_gc  3,25     3,29
010  2.7  BODLVL_2V9_gc  2,95     3,00
011  2.4  BODLVL_2V6_gc  2,67     2,74
100  2.2  BODLVL_2V4_gc  2,41     2,46
101  2.0  BODLVL_2V1_gc  2,15     2,19
110  1.8  BODLVL_1V9_gc  1,9     1,93
111  1.6  BODLVL_1V6_gc  1,62     1,64

Das heisst, dass der Wert "000" wahrscheinlich dazu führt, dass der 
Prozessor nicht mehr aus dem Reset heraus kommt - Vorsicht!

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