Quando si utilizza Arduino Uno come ISP, "Yikes! Firma del dispositivo non valida "indica una connessione errata, una configurazione errata o una versione errata di avrdude?


12

Sto usando un Arduino UNO per programmare un'immagine esadecimale precompilata su un ATTINY45, usando avrdude nella directory IDE di Arduino, su Windows 7. L'Uno ha lo schizzo ISP caricato dalla directory degli esempi e funziona - il LED del battito cardiaco pulsa bene.

Sul lato hardware ho questa configurazione , tranne per il fatto che ATTINY è a montaggio superficiale, saldato a una tavola da surf con tutti i suoi pin verificati-saldati con un voltmetro. Uso una striscia di intestazione, tenuta a mano per far toccare i pin alla tavola da surf, per ottenere i segnali da Uno a ATTINY.

Ecco le righe di comando, che ho preso guardando l'output di debug dell'IDE:

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 

-Tento di eseguirli separatamente, ma ottengo sempre questo errore:

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

ma a volte il numero è ff0000 o ffff00 o ffffff

Ho letto che "Arduino utilizza una versione leggermente modificata di avrdude per caricare gli schizzi sulla scheda Arduino. La versione standard richiede la firma del dispositivo della scheda in un modo non compreso dal bootloader, causando questo errore." Questo significa che l'utilizzo di Arduino avrdude con un nuovo chip ATTINY, senza bootloader, causerebbe anche lo stesso errore? In altre parole, l'avrdude modificato non è in grado di interrogare un chip AVR non caricato da Arduino?

O quell'errore significa semplicemente che non ho un buon contatto tra tutti i miei pin del programmatore e ATTINY?

E, sono davvero necessarie le impostazioni dei fusibili, Uno può programmare il flash in un attiny che funziona a 1MHz e quindi salvarmi alcuni passaggi?

(Vorrei solo comprare un programmatore "reale", ma ho bisogno di ottenere questo codice nei prossimi due giorni, e sono in una zona rurale della Nuova Scozia)


Prova a impostare il programmatore su -c avrisp. Penso che tu possa programmarlo a 1 MHz senza problemi.
user2973

1
Quando carico dall'IDE di Arduino e imposto il programmatore su "Arduino come ISP", non utilizza -carduinolo stk500. Prova a caricare il programma di lampeggiamento sull'attine dall'IDE. In questo modo puoi vedere la riga di comando corretta in fondo, se abiliti "output dettagliato" nelle impostazioni.
Gerben,

Hai caricato prima lo schizzo di ArduinoISP?
PhillyNJ,

Phil, ho caricato lo sketch ArduinoISP in Uno prima di questi passaggi, ci sono riuscito e vedo il LED verde "heartbeat" nell'impulso del pin 9. Gerben / user2973, ho provato "-carduino", proverò successivamente "-c avrisp". Grazie.
Yary

Sembra un problema con la connessione di destinazione <-> ISP. Qualcosa nel tuo circuito che potrebbe caricare le linee? I fusibili ATtiny sono ancora impostati per l'orologio interno o ne viene fornito uno esterno? Sei sicuro di avere tutti e quattro i cavi di segnale collegati a terra e nell'ordine giusto? Forse dovresti virare sulla saldatura solo per verificare che non sia il tuo metodo portatile (anche se l'ho usato anche io)
Chris Stratton

Risposte:


12

Ho saldato i fili ai pad per essere sicuro che la connessione fosse buona e ho usato quei cavi per programmare da Uno. Quindi il programmatore ha funzionato, senza alcuna modifica alle righe di comando come pubblicato nella domanda. Ho eseguito alcune varianti e sono stato in grado di rispondere a tutte le mie domande e altre ancora:

  1. L'errore "Yikes! Invalid device sign" è stato causato da uno scarso contatto tra il programmatore (Uno) e i pin ATTINY.

  2. Non aveva nulla a che fare con il bootloader che non si trovava sul nuovo microcontrollore. Il nuovo chip ATTINY45 non ha bisogno di un bootloader per il funzionamento del programmatore in-circuit.

  3. Uno può programmare ATTINY45 configurato su una delle sue velocità, 1 MHz o 8 MHz. Le impostazioni di fabbrica vanno bene e non richiedono la sostituzione dei fusibili.

  4. Entrambe le versioni di avrdude hanno funzionato per la programmazione: la 6.1 dal sito dell'autore e quella modificata dall'IDE di Arduino.

  5. avrdude programma può tramite l'Uno utilizzando uno dei -c avrisp, -c arduinoo -c stk500v1, non importa quale.

Una piccola domanda a cui non sono stato in grado di rispondere è stata la velocità con cui i programmi Uno (velocità di comunicazione tra i pin di I / O Arduino e il microcontrollore vengono lampeggiati). È correlato alla velocità della porta seriale? Ma si è rivelato non pertinente per rispondere a questo problema. Qualcun altro può chiederlo se abbastanza curioso.


2
ArduinoISP imposta l'interfaccia SPI su clock / 128, quindi per uno Uno a 16 MHz l'AVR collegato è programmato a 16 MHz / 128 = 125 kbit / s. Ma i fattori limitanti sono la velocità seriale e quando è impostato PROG_FLICKER, vengono aggiunti ritardi di 30 ms per ogni commit della pagina.
user2973

4

Ho avuto esattamente questo problema. Se ATtiny è impostato per l'orologio esterno, ArduinoISP non sarà in grado di programmarlo senza un cristallo esterno. Collegato un cristallo da 16 MHz e 2 condensatori e ha funzionato perfettamente.

(Sono stato quindi in grado di impostare ATtiny sull'orologio interno, rimuovere il cristallo e quindi ha funzionato perfettamente senza il cristallo.)


1

Aggiungi la scheda e la descrizione del loro fusibile da ciò che è già impostato e funzionerà.

Per aggiungere solo C:\Program Files\Arduino\hardware\arduino\avr\boards.txte aggiungere la descrizione della scheda.

########
############ 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

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

L'ho usato.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.