Cuando se usa Arduino Uno como ISP hace "¡Ay! ¿Firma de dispositivo no válida "significa una mala conexión, mala configuración o mala versión de avrdude?

12

Estoy usando un Arduino UNO para programar una imagen hexadecimal precompilada en un ATTINY45, usando avrdude en el directorio Arduino IDE, en Windows 7. El Uno tiene el boceto ISP cargado desde el directorio de ejemplos y eso funciona: el LED del latido del corazón pulsa muy bien

En el lado del hardware tengo esta configuración , excepto que el ATTINY está montado en la superficie, soldado a una tabla de surf con todos sus pines verificados y soldados con un voltímetro. Utilizo una tira de pin de encabezado, sostenida con la mano para que los pines toquen la tabla de surf, para obtener las señales del Uno al ATTINY.

Aquí están las líneas de comando, que tomé al mirar la salida de depuración del 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 

Intento ejecutarlos por separado, pero siempre obtengo este error:

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

pero a veces el número es ff0000 o ffff00 o ffffff

Leí que "Arduino usa una versión ligeramente modificada de avrdude para cargar bocetos en la placa Arduino. La versión estándar consulta la firma del dispositivo de la placa de una manera que el gestor de arranque no entiende, lo que da como resultado este error". ¿Esto significa que usar el Arduino avrdude con un nuevo chip ATTINY, sin cargador de arranque, también causaría el mismo error? En otras palabras, ¿el avrdude modificado es incapaz de consultar un chip AVR no cargado con Arduino?

¿O ese error simplemente significa que no tengo un buen contacto entre todos mis pines del programador y ATTINY?

Y, ¿son realmente necesarios los ajustes de fusibles? ¿Puede Uno programar el flash en un funcionamiento attiny a 1MHz y así ahorrarme algunos pasos?

(Simplemente compraría un programador "real", pero necesito obtener este código en los próximos dos días, y estoy en una zona rural de Nueva Escocia)

Yary
fuente
Intente configurar el programador en -c avrisp. Creo que puedes programarlo a 1 MHz sin problemas.
usuario2973
1
Cuando subo desde el IDE de Arduino y configuro el programador en "Arduino como ISP", no utiliza -carduinoel stk500. Simplemente intente cargar el programa de parpadeo a la atención desde el IDE. De esa manera puede ver la línea de comandos correcta en la parte inferior, si habilita "salida detallada" en la configuración.
Gerben
¿Subiste el boceto ArduinoISP primero?
PhillyNJ
Phil, cargué el boceto ArduinoISP en el Uno antes de estos pasos, tuvo éxito, y veo el LED verde "latido" en el pulso del pin 9. Gerben / user2973, probé "-carduino", intentaré "-c avrisp" a continuación. Gracias.
Yary
Esto parece un problema de conexión de destino ISP <->. ¿Hay algo en su circuito que pueda estar cargando las líneas? ¿Los fusibles ATtiny todavía están configurados para el reloj interno o están proporcionando uno externo? ¿Está seguro de que tiene los cuatro cables de señal y tierra conectados, y en el orden correcto? Tal vez debería agregar una configuración para soldar solo para verificar que no es su método manual (aunque también lo he usado)
Chris Stratton

Respuestas:

12

Solde los cables a las almohadillas para asegurarme de que la conexión sea buena, y usé esos cables para programar desde el Uno. Luego, el programador trabajó, sin modificaciones en las líneas de comando como se publicó en la pregunta. Ejecuté algunas variaciones y pude responder a todas mis preguntas, y algunas más además:

  1. El error "Firma de dispositivo no válido de Yikes!" Fue causado por un contacto deficiente entre el programador (Uno) y los pines ATTINY.

  2. No tenía nada que ver con que el gestor de arranque no estuviera en el nuevo microcontrolador. El nuevo chip ATTINY45 no necesita un gestor de arranque para que funcione el programador en circuito.

  3. El Uno puede programar el ATTINY45 configurado para cualquiera de sus velocidades, 1MHz u 8MHz. La configuración de fábrica está bien y no requiere cambiar los fusibles.

  4. Ambas versiones de avrdude funcionaron para la programación: la 6.1 del sitio del autor y la modificada del IDE de Arduino.

  5. avrdude programa puede a través de la Uno usando cualquiera de -c avrisp, -c arduinoo -c stk500v1, no importa cuál.

Una pequeña pregunta que no pude responder fue a qué velocidad programa Uno (velocidad de comunicación entre los pines de E / S Arduino y el microcontrolador que se está flasheando). ¿Está relacionado con la velocidad del puerto serie? Pero resultó no ser pertinente para responder a este problema. Alguien más puede preguntar si tiene curiosidad.

Yary
fuente
2
ArduinoISP configura la interfaz SPI en reloj / 128, por lo que para un Uno de 16 MHz, el AVR conectado se programa a 16 MHz / 128 = 125 kbit / s. Pero los factores limitantes son la velocidad en serie y cuando se establece PROG_FLICKER, se agregan retrasos de 30 ms para cada confirmación de página.
user2973
4

Tuve exactamente este problema. Si el ATtiny está configurado para reloj externo, entonces el ArduinoISP no podrá programarlo sin un cristal externo. Conecté un cristal de 16 MHz y 2 condensadores y funcionó perfectamente.

(Luego pude configurar ATtiny en el reloj interno, eliminar el cristal y luego funcionó perfectamente sin el cristal).

jcwh2
fuente
1

Agregue el tablero y su descripción de fusible de lo que ya está configurado y funcionará.

Para agregar solo C:\Program Files\Arduino\hardware\arduino\avr\boards.txty agregar la descripción del tablero.

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

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

Lo usé.

shubham
fuente