Ich verwende einen Arduino (mit ATmega168) als ISP-Programmierer, um ATtiny13 zu programmieren. Wenn ich das versuche, meldet avrdude:
avrdude: Device signature = 0x1e9406
avrdude: Expected signature for ATtiny13 is 1E 90 07
Das -F
Flag zum Erzwingen der Programmierung überschreibt die ID in diesem Fall nicht.
Ich weiß, dass ich die ID mit einem Hochspannungsprogrammierer zurücksetzen kann, aber warum meldet das Gerät seine ID überhaupt falsch? Und warum ist es ein sporadisches Problem? Hin und wieder funktioniert der Programmierer einwandfrei, aber wenn nicht, zeigt er immer genau dieselbe fehlerhafte ID an.
Vollständige Avrdude-Ausgabe:
avrdude: Version 5.11.1, compiled on Oct 30 2011 at 10:37:28
Copyright (c) 2000-2005 Brian Dean, http://www.bdmicro.com/
Copyright (c) 2007-2009 Joerg Wunsch
System wide configuration file is "/etc/avrdude.conf"
User configuration file is "/home/jhendrix/.avrduderc"
User configuration file does not exist or is not a regular file, skipping
Using Port : /dev/ttyUSB003
Using Programmer : stk500v1
Overriding Baud Rate : 19200
AVR Part : ATtiny13
Chip Erase delay : 4000 us
PAGEL : P00
BS2 : P00
RESET disposition : dedicated
RETRY pulse : SCK
serial program mode : yes
parallel program mode : yes
Timeout : 200
StabDelay : 100
CmdexeDelay : 25
SyncLoops : 32
ByteDelay : 0
PollIndex : 3
PollValue : 0x53
Memory Detail :
Block Poll Page Polled
Memory Type Mode Delay Size Indx Paged Size Size #Pages MinW MaxW ReadBack
----------- ---- ----- ----- ---- ------ ------ ---- ------ ----- ----- ---------
eeprom 65 5 4 0 no 64 4 0 4000 4000 0xff 0xff
flash 65 6 32 0 yes 1024 32 32 4500 4500 0xff 0xff
signature 0 0 0 0 no 3 0 0 0 0 0x00 0x00
lock 0 0 0 0 no 1 0 0 4500 4500 0x00 0x00
calibration 0 0 0 0 no 2 0 0 0 0 0x00 0x00
lfuse 0 0 0 0 no 1 0 0 4500 4500 0x00 0x00
hfuse 0 0 0 0 no 1 0 0 4500 4500 0x00 0x00
Programmer Type : STK500
Description : Atmel STK500 Version 1.x firmware
Hardware Version: 2
Firmware Version: 1.16
Vtarget : 0.0 V
Varef : 0.0 V
Oscillator : Off
SCK period : 0.1 us
avrdude: please define PAGEL and BS2 signals in the configuration file for part ATtiny13
avrdude: AVR device initialized and ready to accept instructions
Reading | ################################################## | 100% 0.02s
avrdude: Device signature = 0x1e9406
avrdude: Expected signature for ATtiny13 is 1E 90 07
Double check chip, or use -F to override this check.
avrdude done. Thank you.
Es ist kein sehr wahrscheinlicher Fehler, und die Konsistenz dieser "falschen" ID kann aufschlussreich sein. Schlechte Verbindungen können einige Störungen verursachen, aber normalerweise in Form von nacheilenden Bits (dh das Anzeigen von Werten benachbarter Bits), und 94 vs 90 sieht nicht so aus. Außerdem zeigt eine schnelle Suche in der Liste der AVR-IDs von avrdude, dass die ID, die Sie erhalten, die eines ATmega168 ist, der bei Arduino üblich ist. Darüber hinaus spricht der Arduino-Bootloader das STK500-Protokoll, das Ihr avrdude hier verwendet. Die offensichtliche Frage ist also, was Ihr Programmierer ist.
Ich vermute, Sie haben vielleicht so etwas wie ein Arduino, das als Programmierer eingerichtet ist, um andere AVRs zu programmieren, und wenn es zufällig zurückgesetzt wird (und daher immer noch im Bootloader ist, der eine Zeitüberschreitung hat, bevor das geladene Programm / "Skizze" gestartet wird). Wenn avrdude gestartet wird, können Sie diesen AVR anstelle des nächsten Boards neu programmieren.
Meine zweite Vermutung, die ohne die obigen Hinweise zum Arduino-Verhalten die erste wäre, wäre, unbeabsichtigt mit einem anderen Programmierer zu sprechen; Dies kann durch einfache Dinge wie die Reihenfolge, in der sie an USB angeschlossen sind, beeinflusst werden.
In beiden Szenarien handelt es sich nicht um eine falsche ID, sondern um einen anderen AVR als beabsichtigt, der reagiert. Für den Fall Arduino als Programmierer können die Dinge durch das automatische Zurücksetzen kompliziert werden, wenn Sie ein Programm starten, um mit dem Board zu sprechen. Das zu umgehen könnte etwas komplexer sein, und meine erste Vermutung wäre so etwas wie (sleep 3 ; avrdude -P /dev/ttyUSB0 -c stk500 -p t13 -U ... ) < /dev/ttyUSB0
, was eine Verzögerung zwischen dem Öffnen der seriellen Schnittstelle und dem Ausführen von avrdude sicherstellen würde.
Dies wird die ursprünglich gestellte Frage nicht beantworten, aber es könnte anderen Leuten helfen, hier zu landen:
Ich habe ein Arduino verwendet (und später einen USBasp-Klon gekauft), um einen ATtiny85 zu programmieren. Dies funktionierte ziemlich lange ziemlich gut, bis ich plötzlich ohne ersichtlichen Grund immer wieder falsche Gerätesignaturen von meinem Attiny erhielt:
avrdude: Device signature = 0x1e010b
avrdude: Expected signature for ATtiny85 is 1E 93 0B
Ich habe immer diese 0x1e010b-ID bekommen und es hat mich verrückt gemacht. Es stimmte nicht mit der Gerätesignatur eines anderen AVR überein (siehe diese Liste ) und die Kabelverbindung war in Ordnung. Eine schlechte Verbindung würde normalerweise eher zufällige Fehler verursachen, und die Signale sahen auch auf dem Oszilloskop in Ordnung aus.
Ich fand schließlich heraus, dass mein USB-Hub das Problem war. Die 5V USB-Versorgungsspannung, die es an meinen Programmierer lieferte, betrug nur etwa 4,4 V. Als ich den Programmierer direkt an meinen Laptop angeschlossen hatte, lag die Spannung zwischen 5,05 und 5,15 V und alles funktionierte wieder einwandfrei! War wahrscheinlich ein Brownout oder etwas, das mit den Signalpegeln zusammenhängt.
Wenn Sie auf ein Problem mit falschen Gerätesignaturen stoßen:
Hoffe das hilft jemandem :)
AndrejaKo
Jippie
AndrejaKo
Jippie
AndrejaKo