Wenn Sie Arduino Uno als ISP verwenden, wird „Yikes! Ungültige Gerätesignatur “bedeutet eine schlechte Verbindung, eine schlechte Konfiguration oder eine schlechte Version von avrdude?

11

Ich verwende ein Arduino UNO, um ein vorkompiliertes Hex-Image unter Verwendung des avrdude im Arduino IDE-Verzeichnis unter Windows 7 auf ein ATTINY45 zu programmieren. Das Uno hat die ISP-Skizze aus dem Beispielverzeichnis geladen und das funktioniert - die Heartbeat-LED pulsiert schön.

Auf der Hardwareseite habe ich dieses Setup , außer dass der ATTINY oberflächenmontiert ist und mit allen mit einem Voltmeter verifizierten Pins an ein Surfbrett gelötet ist. Ich benutze einen Header-Pin-Streifen, der von Hand gehalten wird, damit die Pins das Surfbrett berühren und die Signale vom Uno zum ATTINY gelangen.

Hier sind die Befehlszeilen, die ich aus der Debugging-Ausgabe der IDE entnommen habe:

REM set the fuse for 8MHz, so the ISP programmer can work
C:\Progra~1\Arduino\hardware\tools\avr\bin\avrdude -CC:\Progra~1\Arduino\hardware/tools/avr/etc/avrdude.conf -v -v -v -v -pattiny45 -cstk500v1 -P\\.\COM7 -b19200 -e -Uefuse:w:0xff:m -Uhfuse:w:0xdf:m -Ulfuse:w:0xe2:m 
REM load the program
C:\Progra~1\Arduino\hardware\tools\avr\bin\avrdude -CC:\Progra~1\Arduino\hardware/tools/avr/etc/avrdude.conf -v -pattiny45 -cstk500v1 -P\\.\COM7 -b19200 -Uflash:w:firefly.hex:i
REM set fuse for 1MHz, as the project requires
C:\Progra~1\Arduino\hardware/tools/avr/bin/avrdude -CC:\Progra~1\Arduino\hardware/tools/avr/etc/avrdude.conf -v -pattiny45 -cstk500v1 -P\\.\COM7 -b19200 -e -Uefuse:w:0xff:m -Uhfuse:w:0xdf:m -Ulfuse:w:0x62:m 

-Ich versuche diese separat auszuführen, erhalte aber immer den folgenden Fehler:

avrdude: Device signature = 0x000000
avrdude: Yikes!  Invalid device signature.
     Double check connections and try again, or use -F to override
     this check.

aber manchmal ist die Nummer ff0000 oder ffff00 oder ffffff

Ich habe gelesen, dass "Arduino eine leicht modifizierte Version von avrdude verwendet, um Skizzen auf das Arduino-Board hochzuladen. Die Standardversion fragt die Gerätesignatur des Boards auf eine Weise ab, die vom Bootloader nicht verstanden wird, was zu diesem Fehler führt." Bedeutet dies, dass die Verwendung des Arduino-Avrdude mit einem neuen ATTINY-Chip, auf dem sich kein Bootloader befindet, denselben Fehler verursachen würde? Mit anderen Worten, ist die modifizierte Avrdude nicht in der Lage, einen AVR-Chip ohne Arduino-Bootload abzufragen?

Oder bedeutet dieser Fehler einfach, dass ich keinen guten Kontakt zwischen all meinen Programmierstiften und dem ATTINY habe?

Und sind die Sicherungseinstellungen wirklich erforderlich? Kann der Uno den Blitz in eine Umgebung mit 1 MHz programmieren und mir so einige Schritte ersparen?

(Ich würde nur einen "echten" Programmierer kaufen, muss diesen Code aber in den nächsten zwei Tagen erhalten und bin in einem ländlichen Teil von Nova Scotia)

Yary
quelle
Versuchen Sie, den Programmierer auf einzustellen -c avrisp. Ich denke, Sie können es ohne Probleme mit 1 MHz programmieren.
user2973
1
Wenn ich von der Arduino-IDE hochlade und den Programmierer auf "Arduino als ISP" setze, wird -carduinonicht der stk500 verwendet. Versuchen Sie einfach, das Blinkprogramm von der IDE auf das Attiny hochzuladen. Auf diese Weise sehen Sie unten die richtige Befehlszeile, wenn Sie in den Einstellungen "ausführliche Ausgabe" aktivieren.
Gerben
Haben Sie zuerst die ArduinoISP-Skizze hochgeladen?
PhillyNJ
Phil, ich habe die ArduinoISP-Skizze vor diesen Schritten in das Uno geladen, es war erfolgreich, und ich sehe die grüne "Herzschlag" -LED in Pin 9-Impuls. Gerben / user2973, ich habe "-carduino" versucht, ich werde als nächstes "-c avrisp" versuchen. Vielen Dank.
Yary
Dies sieht aus wie ein ISP <-> Zielverbindungsproblem. Gibt es irgendetwas in Ihrer Schaltung, das die Leitungen laden könnte? Sind die ATtiny-Sicherungen noch für die interne Uhr eingestellt oder stellen Sie eine externe bereit? Sind Sie sicher, dass alle vier Signalkabel und Masse in der richtigen Reihenfolge angeschlossen sind? Vielleicht sollten Sie ein Setup anheften, um zu überprüfen, ob es nicht Ihre Handmethode ist (obwohl ich das auch verwendet habe)
Chris Stratton

Antworten:

11

Ich habe Drähte an Pads gelötet, um sicherzugehen, dass die Verbindung gut war, und diese Drähte für die Programmierung vom Uno verwendet. Dann arbeitete der Programmierer ohne Änderungen an den Befehlszeilen, wie in der Frage angegeben. Ich lief ein paar Variationen und konnte alle meine Fragen beantworten, und noch ein paar mehr:

  1. Der Fehler "Yikes! Ungültige Gerätesignatur" wurde durch einen schlechten Kontakt zwischen dem Programmierer (Uno) und den ATTINY-Pins verursacht.

  2. Es hatte nichts damit zu tun, dass sich der Bootloader nicht auf dem neuen Mikrocontroller befand. Der neue ATTINY45-Chip benötigt keinen Bootloader, damit der In-Circuit-Programmierer funktioniert.

  3. Der Uno kann den ATTINY45 auf eine seiner Geschwindigkeiten von 1 MHz oder 8 MHz programmieren. Die Werkseinstellungen sind in Ordnung und erfordern kein Wechseln der Sicherungen.

  4. Beide avrdude- Versionen arbeiteten für die Programmierung - die 6.1 von der Website des Autors und die modifizierte von der Arduino IDE.

  5. avrdude kann Programm über die Uno alle mit -c avrisp, -c arduinooder -c stk500v1, spielt es keine Rolle , welche.

Eine kleine Frage, die ich nicht beantworten konnte, war, mit welcher Geschwindigkeit die Uno-Programme programmiert wurden (Kommunikationsgeschwindigkeit zwischen den Arduino-E / A-Pins und dem Mikrocontroller wird geflasht). Hängt es mit der Geschwindigkeit der seriellen Schnittstelle zusammen? Es stellte sich jedoch heraus, dass dies für die Beantwortung dieses Problems nicht relevant war. Jemand anderes kann es fragen, wenn es neugierig genug ist.

Yary
quelle
2
ArduinoISP stellt die SPI-Schnittstelle auf Takt / 128 ein, sodass für einen 16-MHz-Uno der angeschlossene AVR mit 16 MHz / 128 = 125 kbit / s programmiert ist. Die begrenzenden Faktoren sind jedoch die serielle Geschwindigkeit. Wenn PROG_FLICKER eingestellt ist, werden für jedes Seiten-Commit 30 ms Verzögerungen hinzugefügt.
user2973
4

Ich hatte genau dieses Problem. Wenn der ATtiny auf externe Uhr eingestellt ist, kann der ArduinoISP ihn nicht ohne externen Kristall programmieren. Hat einen 16 MHz Quarz und 2 Kondensatoren angeschlossen und hat einwandfrei funktioniert.

(Ich konnte dann ATtiny auf die interne Uhr einstellen, den Kristall entfernen und dann ohne den Kristall perfekt arbeiten.)

jcwh2
quelle
1

Fügen Sie die Platine und ihre Sicherungsbeschreibung von dem hinzu, was bereits eingestellt ist, und es wird funktionieren.

Zum Hinzufügen von Just C:\Program Files\Arduino\hardware\arduino\avr\boards.txtund Hinzufügen der Board-Beschreibung.

########
############ Definitions for ATmega 8MHz 
##############################################################
atmega16-8.name=Atmega16 (internal 8MHz clock)

atmega16-8.upload.tool=avrdude

atmega16-8.upload.protocol=stk500v1

atmega16-8.upload.maximum_size=14336
atmega16-8.upload.speed=19200

atmega16-8.bootloader.low_fuses=0xE8
atmega16-8.bootloader.high_fuses=0x99

atmega16-8.build.mcu=atmega16
atmega16-8.build.f_cpu=8000000L
atmega16-8.build.core=arduino:arduino
atmega16-8.build.variant=mega16

##############################################################
############################

Ich benutzte es.

Shubham
quelle