Forum: Compiler & IDEs Fuses im Source-Code setzen?


von Volkhard (Gast)


Lesenswert?

Nachdem ich mir bei ersten Versuchen einen ATMEGA128 durch
versehentliches, falsches Setzen der Fuses unbrauchbar gemacht habe,
bin ich da etwas vorsichtiger geworden. Ich tue mich mit diesen
"Tretminen" auch immer noch etwas schwer.
Kann man eigentlich durch Schreiben entsprechender Anweisungen in einem
Initialisierungspart eines Programmes die Fuses setzen? Hätte den
Vorteil, dass die Einstellungen, die ich standardmäßig verwenden möchte
immer wieder in einer Routine abgelegt und wieder verwendet werden
können.

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

> Nachdem ich mir bei ersten Versuchen einen ATMEGA128 durch
> versehentliches, falsches Setzen der Fuses unbrauchbar gemacht habe,
> bin ich da etwas vorsichtiger geworden.

Es gibt zwar AVRs, die man sich ,,zerfusen'' kann, aber der
ATmega128
gehört nicht dazu.  Insbesondere kann man sich auf normalem Wege über
ISP die SPIEN-Fuse selbst nicht löschen.

> Kann man eigentlich durch Schreiben entsprechender Anweisungen in
> einem Initialisierungspart eines Programmes die Fuses setzen?

Dafür hat sich noch niemand ein API überlegt.  Prinzipiell machbar
wäre es, wenngleich nur mit externer Unterstützung durch das
Programmiergerät.  (Technisch würde dann einfach noch ein ihex-File
mehr mit ,,herausfallen'', das zusätzlich mit in den Chip
programmiert
werden muss.)

> Hätte den Vorteil, dass die Einstellungen, die ich standardmäßig
> verwenden möchte immer wieder in einer Routine abgelegt und wieder
> verwendet werden können.

Nun, die Fuses musst du aber pro Chip nur einmal einstellen, das ist
dir klar, oder?  Das Ganze hat also eigentlich nur praktischen
Nährwert, wenn man dutzendweise neue Chips programmieren will.

von Bolle (Gast)


Lesenswert?

>Kann man eigentlich durch Schreiben entsprechender Anweisungen in
einem
>Initialisierungspart eines Programmes die Fuses setzen?

Nein.  Die Fuses sind von dem Programm, das auf dem Controller läuft,
prinzipiell nicht erreichbar.  Sonst würde es sich auch nicht um Fuses,
sondern einfach um I/O-Register handeln (die, die man mit "in" lesen
und mit "out" beschreiben kann).

von Peter H. (spacedoc)


Lesenswert?

Hallo erstmal!
Ich muß leider widersprechen. Meines Wissens kann man zumindest die
Lock-Bit-Fuses aus dem Bootloader heraus setzen.
Dort muß ja der geschützte Flash neu beschrieben werden. Siehe auch
Figure 9 (ganz unten) auf Seite 15 im AVR230.

//====================================================================== 
=======
// Writes Lock Bits

spmWriteLockBits:
  mov    r0, r16
  ldi    r22, (1 << BLBSET) | (1 << SPMEN)
  rjmp  spmSPM


//====================================================================== 
=======
Dies ist ein Auszug aus dem SPM.asm

Anm.: Ist mein erstes Posting hier, wollte eigentlich im ersten Posting
nicht soweit die Klappe aufreißen. Mein Kompliment gilt an Leute hier
die aktiv mitmachen, ohne dieses Board wäre ich nie in so kurzer Zeit
soweit mit meinen C-Kenntnissen gekommen, was nicht heisst das ich
nicht noch `ne Menge zu lernen hätte.

MfG
SpaceDoc

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Lock bits sind (offiziell) keine Fuses. ;-) (*)

Ja, die BLBs (boot lock bits) kann man aus dem Bootloader heraus
setzen (aber nicht löschen, wie alle Fuses).  Das ist übrigens eine
prima Schieß-dir-ins-Knie-Falle: man kann den Controller damit in
einen Zustand bringen, in dem auch der Bootloader nichts mehr ändern
darf, sodass man einen chip erase benötigt, um wieder was zu ändern --
der natürlich dann auch den Bootloader wieder löscht.

(*) Das ist mehr als nur Haarspalterei.  Dem OP ging's ja wirklich
darum, ob man die Fuses über den Bootloader manipulieren kann.  Das
geht nicht, man kann sie nur auslesen.

von Peter H. (spacedoc)


Lesenswert?

OK da muß ich zustimmen.
Was die BLB un LB angeht muß man diese natürlich so setzen, daß ein
Beschreiben/Lesen mit SPM/LPM aus dem Bootloaderbereich möglich ist.

Aber zurück zum Thema:
Soweit ich weiß gab es eine Möglichkeit: so etwas wie eine *.ini Datei
(wo alle FUSES drinstehen) und beim Programmieren werden sie von der
Prog-Software automatisch gesetzt. Ist dann zwar nicht im Source-Code,
aber würde auch den erstrebten Effekt haben,mehrere neue µC
programmieren zu können ohne alles per Hand setzen zu müßen (mit der
Gefahr Mist zu bauen).

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.