Lorsque vous utilisez Arduino Uno comme FAI, «Yikes! Signature d'appareil non valide »signifie une mauvaise connexion, une mauvaise configuration ou une mauvaise version d'avrdude?

12

J'utilise un Arduino UNO pour programmer une image hexadécimale précompilée sur un ATTINY45, en utilisant l'avrdude dans le répertoire Arduino IDE, sur Windows 7. L'UO a l'esquisse du FAI chargée à partir du répertoire des exemples et cela fonctionne - la LED de pulsation bat bien.

Côté matériel, j'ai cette configuration , sauf que l'ATTINY est à montage en surface, soudé à une planche de surf avec toutes ses broches vérifiées-soudées avec un voltmètre. J'utilise une bande de broches d'en-tête, tenue à la main pour que les broches touchent la planche de surf, pour obtenir les signaux de l'Uno à l'ATTINY.

Voici les lignes de commande, que j'ai prises en regardant la sortie de débogage de l'EDI:

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 

-J'essaye de les exécuter séparément, mais j'obtiens toujours cette erreur:

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

mais parfois le nombre est ff0000 ou ffff00 ou ffffff

J'ai lu que "Arduino utilise une version légèrement modifiée d'avrdude pour télécharger des croquis sur la carte Arduino. La version standard interroge la signature de l'appareil de la carte d'une manière qui n'est pas comprise par le chargeur de démarrage, ce qui entraîne cette erreur." Est-ce à dire que l'utilisation de l'Arduino avrdude avec une nouvelle puce ATTINY, sans bootloader dessus, provoquerait également la même erreur? En d'autres termes, l'avrdude modifié est-il incapable d'interroger une puce AVR non chargée par Arduino?

Ou est-ce que cette erreur signifie simplement que je n'ai pas un bon contact entre toutes mes broches de programmation et l'ATTINY?

Et, les paramètres de fusible sont-ils vraiment nécessaires, est-ce que l'Uno peut programmer le flash dans une fonction fonctionnant à 1 MHz et ainsi me sauver quelques étapes?

(J'achèterais simplement un "vrai" programmeur, mais je devrais obtenir ce code dans les deux prochains jours, et je suis dans une partie rurale de la Nouvelle-Écosse)

Yary
la source
Essayez de régler le programmeur sur -c avrisp. Je pense que vous pouvez le programmer à 1 MHz sans problème.
user2973
1
Lorsque je télécharge depuis l'IDE Arduino et que je définis le programmeur sur "Arduino en tant que FAI", il n'utilise -carduinopas le stk500. Essayez simplement de télécharger le programme de clignotement sur le serveur depuis l'IDE. De cette façon, vous pouvez voir la ligne de commande correcte en bas, si vous activez la "sortie détaillée" dans les paramètres.
Gerben
Avez-vous téléchargé le croquis ArduinoISP en premier?
PhillyNJ
Phil, j'ai chargé l'esquisse ArduinoISP dans l'Uno avant ces étapes, il a réussi, et je vois la LED verte "battement de coeur" dans la broche 9 impulsion. Gerben / user2973, j'ai essayé "-carduino", je vais essayer "-c avrisp" ensuite. Merci.
Yary
Cela ressemble à un problème de connexion cible du FAI <->. Quelque chose dans votre circuit qui pourrait charger les lignes? Les fusibles ATtiny sont-ils toujours configurés pour une horloge interne ou en fournissez-vous une externe? Êtes-vous sûr que les quatre fils de signal et la masse sont connectés et dans le bon ordre? Vous devriez peut-être souder une configuration juste pour vérifier que ce n'est pas votre méthode portable (bien que j'aie également utilisé cela)
Chris Stratton

Réponses:

12

J'ai soudé des fils aux pads pour être sûr que la connexion était bonne et j'ai utilisé ces fils pour la programmation de l'Uno. Ensuite, le programmeur a travaillé, sans aucune modification des lignes de commande comme indiqué dans la question. J'ai exécuté quelques variantes et j'ai pu répondre à toutes mes questions, et quelques autres en plus:

  1. L'erreur "Yikes! Invalid device signature" était due à un mauvais contact entre le programmateur (Uno) et les broches ATTINY.

  2. Cela n'avait rien à voir avec le bootloader n'étant pas sur le nouveau microcontrôleur. La nouvelle puce ATTINY45 n'a pas besoin d'un chargeur de démarrage pour que le programmeur en circuit fonctionne.

  3. L'Uno peut programmer l'ATTINY45 configuré à l'une de ses vitesses, 1 MHz ou 8 MHz. Les réglages d'usine sont corrects et ne nécessitent pas de changer les fusibles.

  4. Les deux versions d' avrdude ont fonctionné pour la programmation - la 6.1 du site de l'auteur et la modifiée de l'IDE Arduino.

  5. avrdude programme peut par l'Uno utilisant l' une -c avrisp, -c arduinoou -c stk500v1, il n'a pas d' importance qui.

Une petite question à laquelle je n'ai pas pu répondre était la vitesse à laquelle les programmes Uno (la vitesse de communication entre les broches d'E / S Arduino et le microcontrôleur clignote). Est-ce lié à la vitesse du port série? Mais il s'est avéré que ce n'était pas pertinent pour répondre à ce problème. Quelqu'un d'autre peut le demander s'il est assez curieux.

Yary
la source
2
ArduinoISP définit l'interface SPI sur horloge / 128, donc pour un Uno à 16 MHz, l'AVR connecté est programmé à 16 MHz / 128 = 125 kbit / s. Mais les facteurs limitants sont la vitesse série et lorsque PROG_FLICKER est défini, des retards de 30 ms sont ajoutés pour chaque validation de page.
user2973
4

J'ai eu exactement ce problème. Si l'ATtiny est réglé pour une horloge externe, alors l'ArduinoISP ne pourra pas le programmer sans cristal externe. Connecté un cristal 16 MHz et 2 condensateurs et fonctionnait parfaitement.

(J'ai ensuite pu régler ATtiny sur l'horloge interne, retirer le cristal, puis fonctionner parfaitement sans le cristal.)

jcwh2
la source
1

Ajoutez la carte et sa description de fusible à partir de ce qui est déjà défini et cela fonctionnera.

Pour ajouter juste C:\Program Files\Arduino\hardware\arduino\avr\boards.txtet ajouter la description du forum.

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

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

Je l'ai utilisé.

shubham
la source