PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Verfuset ohne eigene Schuld?



rehbär
30.12.2008, 15:17
Gleich zu Anfang: Die Sache ist schon gelöst.

Ich programmiere meinen Mega32 in C mit avr-gcc und avrdude unter Linux und das schon immer aber heute auf einmal kommt avrdude mit diesen Fehlern an (und das immer):
chris@gentoo ~/Desktop/avr/mega32 $ make program
avrdude -p atmega32 -c stk200 -U flash:w:main.hex

avrdude: AVR device initialized and ready to accept instructions

Reading | ################################################## | 100% 0.00s

avrdude: Device signature = 0x1e9502
avrdude: NOTE: FLASH memory has been specified, an erase cycle will be performed
To disable this feature, specify the -D option.
avrdude: erasing chip
avrdude: reading input file "main.hex"
avrdude: input file main.hex auto detected as Intel Hex
avrdude: writing flash (178 bytes):

Writing | ################################################## | 100% 0.08s

avrdude: 178 bytes of flash written
avrdude: verifying flash memory against main.hex:
avrdude: load data flash data from input file main.hex:
avrdude: input file main.hex auto detected as Intel Hex
avrdude: input file main.hex contains 178 bytes
avrdude: reading on-chip flash data:

Reading | ################################################## | 100% 0.08s

avrdude: verifying ...
avrdude: verification error, first mismatch at byte 0x0000
0x0c != 0x00
avrdude: verification error; content mismatch

avrdude: safemode: lfuse changed! Was ff, and is now 0
Would you like this fuse to be changed back? [y/n] y
avrdude: safemode: and is now rescued
avrdude: safemode: hfuse changed! Was d9, and is now 0
Would you like this fuse to be changed back? [y/n] y
avrdude: safemode: and is now rescued
avrdude: safemode: Fuses OK

avrdude done. Thank you.

make: *** [program] Fehler 1
chris@gentoo ~/Desktop/avr/mega32 $
Ok dachte ich mir, was hab ich da wieder falsch gemacht. Also schnell mit Bascom probiert, denn einen Fehler am ISP-Programmer konnte ich ausschließen da der Mega8 noch wunderbar zu flashen ging. Es tauchten keine Fehler auf. Da meint man das es doch nicht die Fusebits sind die kaputt waren. Aber doch schnell mit ponyprog Fusebits neu gesetzt und alles ging wieder.

Nun meine Frage:
Wie zur Hölle kann man Fusebits neu setzen ohne das man es gemerkt bzw. gewollt hat. Oder passiert soetwas öfter mit den AVRs?

mfg rehbär

Besserwessi
30.12.2008, 16:58
Gerade bei den ISP Dougles für den LPT gibt es eine geringe Gefahr, das bei einer zu langen (>30 cm) Leitung das SPI Signal aus dem Takt Gerät. Das kann durch Überschwinger auf der SCK Leitung passieren. Das ist eine schon lange bekannte, aber oft ignorierte, Schwäche von vielen einfachen ISP Programmierern (auch dem hier im Wiki). Die Signalqualität läßt sich schon durch einen einfachen Widerstand in der SCK Leitung verbessern. Das Problem sollte für eigentlich alle Programmierer nach SPI Prinzip gelten, egal ob AVR, PIC, ARM, JTAG... .


Durch die Überschwinger werden einige Bits doppelt is ins Flash geschrieben und es bleichen dann einige übrig. Wenn man Pech hat (kommt aber eher selten vor), werden die gerade als Aufforderung zum ändern der Fuses interpretiert. Genau aus diesem Grund hat AVRDude den safe Mode, der am Ende noch mal die Fuses kontrolliert und ggf. neu setzt.

Auch durch eine Schlechte Entkopplung und Störungen auf der Versorgung kann der ISP Prozess durcheinandergeraten. Absichtliche Störungen auf der Versorgung sind wohl auch ein Weg um bei einigen Controllern einen Ausleseschutz zu umgehen. Soll jedenfalls bei einigen alten PICs so gehen.