mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Fuses durch den AVR auslesen?


Autor: AVRli (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo, wink

ich möchte gerne die Fuse Bits abfragen welche im µC gesetzt sind.
Gibt es eine Möglichkeit diese zur Laufzeit auszulesen?

Ich würde gerne die Werte auf dem Display sehen um sicher zu gehen das 
ich alles richtig gesetzt habe. Ich habe eben 1h damit verbracht einen 
Fehler zu suchen der beim setzen der Fuses gemacht wurde. Hurra! :-)

Gruß AVRli...

Autor: Knut Ballhause (Firma: TravelRec.) (travelrec) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Datenblatt -> Memory programming -> Self programming the Flash -> Read 
Fuses

Autor: AVRli (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ok ich habe das schon nach gesehen aber einfach nicht verstanden. :(

Die Fuses sind nicht in irgendein Register abgelegt was man einfach so 
auslesen kann. Das hatte ich vermutet...

Ich arbeite mit einem ATmega 644 an dem lief die Serielle Schnittstelle 
nicht, weil ich eben ein Programmier Fehler gemacht habe. Nun wollte ich 
mir so eine Art Überprüfung schreiben die mir nach dem Einschalten eben 
über eine LED signalisiert das was mit den Fuses noch nicht ok ist.

Gruß AVRli...

Autor: Fred S. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi AVRli,

selbst habe ich mit dem Auslesen der Fuses mit "lpm" keine Erfahrung. 
Hier wird beschrieben, wie es jemand in C beim ATmega128 gemacht hat:
http://www.dragonsgate.net/pipermail/icc-avr/2006-...

Gruß

Fred

Autor: jack (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Frage:   Wie kann man die Fuses auslesen?
Antwort: z.B. im "serial programmimg mode".

Frage:   Wie kommt man dahin?
Antwort: Indem zuerst RESET auf low gezogen wird.

Frage:   Kann der µC dann ein eigenes Programm ausführen?

Autor: You don't know Jack (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Frage : Hast Du den Thread richtig gelesen

Antwort : Nein

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Kann man die Fuses auch aus der Applikation lesen oder muß dazu das SPM 
im Bootloaderbereich ausgeführt werden?

Aus dem Datenblatt geht das nicht klar hervor.


Peter

Autor: AVRli (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi, danke für die Antworten!

Ich werde es wohl erst morgen mal angehen können.
Der Link von Fred S. sieht interessant aus. Es ist aber wohl ASM in C 
verpackt. ;-)

Na mit den Info's schlag ich nochmal im Datenblatt nach.

Einen schönen Abend!
AVRli...

Autor: Knut Ballhause (Firma: TravelRec.) (travelrec) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Fuses auslesen geht auch aus der Applikations-Sektion heraus, nur daß 
hierfür die CPU für einige Zeit gestoppt wird. Beim Fuse-Lesen aus der 
Bootloader-Sektion läuft sie einfach weiter. Auf jeden Fall geht dies 
nur mit (Inline-)Assembler, weil dafür eine zeitgenaue SPM-Routine 
gebraucht wird.

Autor: AVRli (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallihallo,

um es abzuschließen, es funktioniert so wie ich es wollte. :-)
Da mein Bootloader in ASM geschrieben ist, bietet es sich ja an dort die 
Sachen zu vergleichen und wenn irgendwas nicht stimmt eine 
Signalisierung zu machen.

Sowit so gut. Mit den Infos die ich hier bekommen hatte ist es mir sehr 
viel leichter gefallen die entsprechenden Sachen auch im Datenblatt zu 
finden. Ich habe die Vergleiche mal rausgelassen da ja jeder vlt. andere 
Vorstellungen hat was er mit den Info's machen möchte. Ich schau mir den 
Inhalt an und wenn er mit dem festgelegten Wert übereinstimmt dann gibt 
es ein ok, sonst eben die Fehlermeldung per LED.

Alles auf den ATmega644 bezogen, bei anderen AVR's geht das mit 
Sicherheit ähnlich, da hilft dann der Blick in das Datenblat :-P 
(Reading the Fuse and Lock Bits from Software)
  cli

  ldi ZH, 0    ; $0000=FLB / $0001=LB / $0002=FEB / $0003=FHB
  ldi ZL, 0              
  in wrH, SPMCSR
  ori wrH,(1<<BLBSET)|(1<<SPMEN);
  out SPMCSR, wrH
  nop
  nop
  nop
  nop
  nop
  lpm wrH,Z    ; Inhalt ist das abgefragte Byte

  sei

$0000=FLB ist das Fuse Low Byte
$0001=LB  ist das Lock Byte
$0002=FEB ist das Fuse Extended Byte
$0003=FHB ist das Fuse High Byte

Den abschließenden Satz aus dem Datenblatt sollte man auch beachten.

"Fuse and Lock bits that are programmed, will be read as zero. Fuse and 
Lock bits that are unprogrammed, will be read as one"

Also 0 ist 1 und 1 ist 0... :-D

Vielen Dank für Eure Hilfe!
MfG AVRli...

Autor: AVRli (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ähm ich bin es nochmal...

Irgendwie kappiere ich die Reaktion vom µC nicht ganz.
Hab ich was übersehen?

Alle Abfragen haben den Inhalt wie er tatsächlich programmiert wurde,
lediglich das Fuse High Byte hat immer einen anderen Wert als es haben 
sollte.

Abfrage ist:

  ldi ZH, 0  ; $0003=FHB / Fuse High Byte
  ldi ZL, 3
  in wrH, SPMCSR
  ori wrH,(1<<BLBSET)|(1<<SPMEN);
  out SPMCSR, wrH
  nop
  nop
  nop
  nop
  nop
  lpm wrH, Z
  cpi wrH, F_H

Als Antwort kommt immer 0x3A obwohl eigendlich 0xBA zu erwarten wäre.
Was auch noch omisch ist, nach dem abfragen wird das High Byte 
verändert.

Ich programmiere es auf 0x3A wenn ich es nun durch den mega644 auslese 
dann kommt zwar 0x3A zurück, schau ich mir das HByte über das AVR Studio 
(JTAG) wieder an, steht wieder 0xBA drin... Ähmm kopfkratz

Ich habe es also durch das auslesen verändert... das leuchtet nun nicht 
ein...


MfG AVRli...

Autor: AVRli (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Uijuijui...

Kommando zurück! :-D

Ich habe den Vergleich mit dem JTAG Interface gemacht, damit das richtig 
arbeitet wird wohl das Fuse "OCDEN" im FHByte gelöscht, also Ergebniss 
wenn man es ausließt ohne JTAG also Schaltung getrennt vom JTAG und neu 
gestartet, dann ist die Welt auch in Ordnung.

Denke da hab ich gepennt...

MfG AVRli...

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.