Forum: Mikrocontroller und Digitale Elektronik fuses in .elf-File einbinden


von Dieter M. (Gast)


Lesenswert?

Hallo Zusammen,

brauche etwas Hilfe:
ich habe einen Bootloader für einen ATmega328 programmiert und möchte 
ihn zusammen mit den zugehörigen Fuse- und Lock-Bits flashen.

Ich lese immer wieder, dass das mit Atmel Studio 6.1 mit einem .elf-File 
funktionieren soll. Tut es bei mir aber nicht :-(

Folgendes funktioniert nicht:

#include <avr/io.h>
1
__fuse_t __fuse __attribute__((section (".fuse"))) =
2
{0xFC,0xDA,0xF7};


und das auch nicht:
1
#include <avr/io.h>
2
FUSES = {0xFC, 0xDA, 0xB7};

Um das näher zuuntersuchen, habe ich jeweils 2x kompiliert, dabei 1x ein 
Fuse-Byte abgeändert. Die entstandenen .elf-Files habe ich miteinander 
verglichen -> Kein Unterschied (sagt zumindest compare von Notepad++)

Was muss ich noch beachten?

von abc (Gast)


Lesenswert?

#include <avr/fuse.h>

von hp-freund (Gast)


Lesenswert?

Habs nicht selbst probiert:

http://www.nongnu.org/avr-libc/user-manual/group__avr__fuse.html

Unten gibts den .fuse Test.

von Dieter M. (Gast)


Lesenswert?

Danke schon mal

@abc
laut Doku zu fuse.h, soll fuse.h nicht direkt eingebunden werden

@hp-freund
mit dem Tool sehe ich die Fuses so wie sie geschrieben werden sollen. 
Beim Auslesen stehen aber immer noch die alten Werte im Controller. 
Anscheinend werden sie nicht geflasht?

von abc (Gast)


Lesenswert?

oh, sorry, da war ich wohl zu schnell

von Dieter M. (Gast)


Lesenswert?

hier noch die Ausgabe des Tools:
1
Contents of section .fuse:
2
 820000 ffdaf7                               ...

Was sagt mir eigentlich die 820000?

von hp-freund (Gast)


Lesenswert?

Wie ist es wenn Du eine hex erstellen lässt?
Oder womit flasht das Atmel Studio 6.1?

von chris (Gast)


Lesenswert?

Hi,

bei mir funktioniert es mit folgendem Code (Atmel Studio 6.0):
1
//////////////////////////////////////////////////////////////////////////
2
// Fuse Einstellungen:
3
4
const char fusedata[] __attribute__ ((section (".fuse"))) =
5
6
    {0xF7, 0xD5, 0xF9};    // BOD 2,7V; EESAVE; ext. FS-Crystal;
7
              // Reihenfolge ist: (LOW, HIGH, EXTENDED)
8
9
const char lockbits[] __attribute__ ((section (".lockbits"))) = 
10
11
    {0xFC};    // Prog & verify disabled
12
    
13
    
14
//////////////////////////////////////////////////////////////////////////


lg
Chris

von hp-freund (Gast)


Lesenswert?

Dieter M. schrieb:
> Was sagt mir eigentlich die 820000?

Die Speicheraddresse der fuses

von ich (Gast)


Lesenswert?

Hier mal ein Beispiel für den ATmega88, was funktioniert.
Kein fuses.h eingebunden und auch nix anderes. Einfach diese Zeilen an 
den Anfang der main.c schreiben:
1
FUSES=
2
{
3
    .low = 0xA6,
4
    .high = 0xDC,
5
    .extended = 0xF9,
6
};

Auch die Lockbits kann man einbinden:
1
LOCKBITS = (LB_MODE_3);

von ich (Gast)


Lesenswert?

hp-freund schrieb:
> Wie ist es wenn Du eine hex erstellen lässt?
> Oder womit flasht das Atmel Studio 6.1?

In der hex stehen keine Fuses und Lockbits drin. Das eigentliche 
Programm Flashen geht mit der Hex schon, aber dem TO ging es um das 
Einbinden der Fuses, damit sie nicht immer von Hand eingestellt werden 
müssen beim Flashen. Deswegen die *.elf

von Dieter M. (Gast)


Lesenswert?

@hp-freund
soweit ich weiß sind in einem .hex-File keine Fuse-Bits enthalten, 
deshalb...

@Chris
Funktioniert auch nicht :-(
Beim Auslesen stehen immer noch die alten Werte drin.

Muss ich evtl. irgendwo aktivieren, dass beim Flashen mit einem 
.elf-File auch die Fusebits geschrieben werden sollen?

von hp-freund (Gast)


Lesenswert?

ich schrieb:
> aber dem TO ging es um das
> Einbinden der Fuses, damit sie nicht immer von Hand eingestellt werden
> müssen beim Flashen. Deswegen die *.elf

Na sowas :)

*************************************+

Gibt es vielleicht eine "Fuses schreiben erlaubt" Einstellung im AVR 
Studio?

von chris (Gast)


Angehängte Dateien:

Lesenswert?

Dieter M. schrieb:
> Muss ich evtl. irgendwo aktivieren, dass beim Flashen mit einem
> .elf-File auch die Fusebits geschrieben werden sollen?

ja im Programmierdialog ankreuzen ;)
Standardmäßig ist da nur Flash angekreuzt.

von ich (Gast)


Lesenswert?

Dieter M. schrieb:
> Muss ich evtl. irgendwo aktivieren, dass beim Flashen mit einem
> .elf-File auch die Fusebits geschrieben werden sollen?

Ja. Im Fenster "Device Programming" bei "Production file" stellst du 
oben erstmal den Pfad zum *.elf-File ein. Darunter sind dann Häkchen, 
die du setzen oder löschen kannst für Flash, EEPROM, Fuses, Lock bits.
Und je nach *.elf-File kann man nur die Haken setzen, die auch im *.elf 
enthalten sind, z.B. Flash, Fuses, Lockbits. Dann wäre EEPROM grau und 
nicht auswählbar.

von Dieter M. (Gast)


Lesenswert?

Uuuuuiii :-)

Flashen eines .elf-Files nicht über memory flashen, sondern über 
production file, dann wird auch alles geflasht!

Vielen lieben Dank :-)

von ich (Gast)


Lesenswert?

hp-freund schrieb:
> Na sowas :)

Verstehe ich nicht, sorry. Du hattest hex vorgeschlagen und ich habe 
geschrieben, daß im hex-File keine Fuses drin sind. Die aber will der TO 
haben.

von hp-freund (Gast)


Lesenswert?

Ok.

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.