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.
> 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.
>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).
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
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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.