Warum meldet mein ATtiny13 eine falsche Geräte-ID?

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 -FFlag 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.
Dieser sollte offensichtlich sein, aber sind Sie sicher, dass Sie den Programmierer richtig angeschlossen haben?
Hat nichts geändert, nicht einmal die Schaltung berührt. Ich habe es gerade mit der Neuprogrammierung versucht und plötzlich hat es funktioniert. Klären Sie mich auf, was ist das Offensichtliche, das ich übersehe, es ist schon einmal passiert.
Ich weiß nicht. Ähnliches passierte mit einem ATmega162 von mir, aber ich hatte keine Zeit, es zu untersuchen. Manchmal erscheint der Fehler, wenn der Programmierer schlecht verbunden ist, aber wenn die Verbindung in Ordnung ist, dann ist es wahrscheinlich etwas anderes.
@AndrejaKo Welche Art von Programmierer verwenden Sie für Ihre Geräte?
Ich verwende die selbstgebaute Version von PonyProg .

Antworten (2)

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.

In meinem Programmierer steckt ein ATmega168! Das ist ein interessanter Fund. Ich muss Ihre Antwort morgen auf jeden Fall genauer prüfen.
Konnte mein Problem nicht reproduzieren, da ich verhindert habe, dass der ATmega168 (Arduino) einen Neustart erhält.

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:

  • Der Empfang von 0x000000 oder 0xffffff bedeutet normalerweise, dass Ihr Atmel-Chip entweder nicht mit Strom versorgt oder (richtig) zurückgesetzt wird. Überprüfen Sie auch, ob die Signalpegel des Programmiergeräts mit dem Stromversorgungspegel Ihres Atmel-Mikrocontrollers (typischerweise 3,3 V oder 5 V) übereinstimmen - am besten vor dem ersten Anschließen ;)
  • Das Erhalten zufälliger falscher Gerätesignaturen weist auf ein schlechtes Kabel oder eine schlechte Verbindung hin
  • Wenn Sie ständig dieselbe falsche Gerätesignatur erhalten, kann dies bedeuten, dass Sie einen anderen Atmel-Chip angeschlossen haben als den, den Sie in der Konsole angegeben haben ("-p t85" für ATtiny85 in meinem Fall) oder dass Sie einen falschen Befehl eingegeben haben und der Programmierchip mit seinem antwortet eigene ID (achten Sie darauf, Ihren Programmierer nicht mit Ihrem Applikationscode zu überschreiben!)
  • ... oder es könnte auch bedeuten, dass die Stromversorgung Ihres Programmierers oder Ihres Ziel-Atmel-Chips schwach oder zu niedrig ist - bitte überprüfen Sie, ob Sie Ihren Programmierer direkt mit Ihrem Laptop/PC verbinden oder versuchen Sie es mit einem anderen Anschluss und überprüfen Sie auch die Stromversorgung des Atmel-Chip in Ihrer Anwendung.

Hoffe das hilft jemandem :)