ArduinoISP falla con Atmega368, 168 - Firma del dispositivo = 0x000000

4

Entonces, aparentemente este es un error común, que muchas personas han corregido de muchas maneras diferentes, ninguna de las cuales me ha funcionado.

Tengo dos Arduinos diferentes: un NG y un Uno, con un Atmega168 y 328 respectivamente. Ambos tienen el cargador de arranque grabado en ellos. Estoy buscando quemar el cargador de arranque Arduino en otros 2 chips Atmega328 que compré (de Digikey).

Por lo tanto, configuro las conexiones como se indica en en el sitio de Arduino , usando los 168 NG para programar el nuevo 328 que puse en el uno. No funciona, y ejecutar avrdude -C "path\to\avrdude.conf" -p atmega328p -b19200 -P COM5 -c avrisp -v -v -v devuelve

avrdude: Version 5.11, compiled on Sep  2 2011 at 19:38:36
         Copyright (c) 2000-2005 Brian Dean, http://www.bdmicro.com/
         Copyright (c) 2007-2009 Joerg Wunsch

         System wide configuration file is "I:\Users\Collin\Documents\Arduino IDE\hardware\tools\avr
\etc\avrdude.conf"

         Using Port                    : COM5
         Using Programmer              : avrisp
         Overriding Baud Rate          : 19200
         AVR Part                      : ATMEGA328P
         Chip Erase delay              : 9000 us
         PAGEL                         : PD7
         BS2                           : PC2
         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    20     4    0 no       1024    4      0  3600  3600 0xff 0xff
                                  Block Poll               Page                       Polled
           Memory Type Mode Delay Size  Indx Paged  Size   Size #Pages MinW  MaxW   ReadBack
           ----------- ---- ----- ----- ---- ------ ------ ---- ------ ----- ----- ---------
           flash         65     6   128    0 yes     32768  128    256  4500  4500 0xff 0xff
                                  Block Poll               Page                       Polled
           Memory Type Mode Delay Size  Indx Paged  Size   Size #Pages MinW  MaxW   ReadBack
           ----------- ---- ----- ----- ---- ------ ------ ---- ------ ----- ----- ---------
           lfuse          0     0     0    0 no          1    0      0  4500  4500 0x00 0x00
                                  Block Poll               Page                       Polled
           Memory Type Mode Delay Size  Indx Paged  Size   Size #Pages MinW  MaxW   ReadBack
           ----------- ---- ----- ----- ---- ------ ------ ---- ------ ----- ----- ---------
           hfuse          0     0     0    0 no          1    0      0  4500  4500 0x00 0x00
                                  Block Poll               Page                       Polled
           Memory Type Mode Delay Size  Indx Paged  Size   Size #Pages MinW  MaxW   ReadBack
           ----------- ---- ----- ----- ---- ------ ------ ---- ------ ----- ----- ---------
           efuse          0     0     0    0 no          1    0      0  4500  4500 0x00 0x00
                                  Block Poll               Page                       Polled
           Memory Type Mode Delay Size  Indx Paged  Size   Size #Pages MinW  MaxW   ReadBack
           ----------- ---- ----- ----- ---- ------ ------ ---- ------ ----- ----- ---------
           lock           0     0     0    0 no          1    0      0  4500  4500 0x00 0x00
                                  Block Poll               Page                       Polled
           Memory Type Mode Delay Size  Indx Paged  Size   Size #Pages MinW  MaxW   ReadBack
           ----------- ---- ----- ----- ---- ------ ------ ---- ------ ----- ----- ---------
           calibration    0     0     0    0 no          1    0      0     0     0 0x00 0x00
                                  Block Poll               Page                       Polled
           Memory Type Mode Delay Size  Indx Paged  Size   Size #Pages MinW  MaxW   ReadBack
           ----------- ---- ----- ----- ---- ------ ------ ---- ------ ----- ----- ---------
           signature      0     0     0    0 no          3    0      0     0     0 0x00 0x00

         Programmer Type : STK500
         Description     : Atmel AVR ISP
         Hardware Version: 2
         Firmware Version: 1.16
         Vtarget         : 0.0 V
         Varef           : 0.0 V
         Oscillator      : Off
         SCK period      : 0.1 us

avrdude: AVR device initialized and ready to accept instructions

Reading | ################################################## | 100% 0.05s

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


avrdude done.  Thank you.

Aquí está todo lo que he hecho. Cada paso dio como resultado el mismo error al ejecutar el comando mencionado anteriormente.

  • Pensando que tal vez era un problema la programación usando el NG o el 168, reorganizo las cosas para que esté usando el Uno con un 328 para programar un 328 en el NG.
  • A continuación, intento todas las permutaciones de la placa y el chip.
  • Pensando que tal vez había bloqueado un chip con todos los cambios, probé una (nueva) 328 diferente.
  • Pensando que tal vez los dos habían llegado a DOA, lo intenté con mi chip 168 bien conocido.
  • Lo intenté con la nave 328 en buen estado.
  • Pensando que solo había perdido una hora cuando uno de los cables que estaba usando era intermitente, pero todos se probaron bien, y cambiarlos con otros no hizo ninguna diferencia.
  • Pensando que tal vez había algo mal en uno de mis tableros, dejé caer un 328 nuevo en una placa de pruebas y lo configuré según las instrucciones, usando Uno + 328 para programar.
  • Intentó lo mismo con el NG y 168 como ISP.
  • Probamos diferentes configuraciones del programador ( -c arduino , avrisp , stk500 )
  • Probamos varias configuraciones de -B ### con avrdude
  • Probé muchos de los anteriores en una Mac y una PC
  • Se intentó con una fuente externa de 5V
  • Intenté horquilla de ArduinoISP de Adafruit
  • Se intentó cargar el optiloader en cualquiera de las tarjetas: se obtuvo un error no descriptivo 0x0
  • Al programar con el Uno, colocó el pin de restablecimiento alto (165 ohmios)
  • Al programar con el Uno, conectó un condensador de 100uF entre la conexión a tierra y el restablecimiento

Sé que al menos se está haciendo una conexión entre los dos chips ya que, al programar con el Uno contra el NG, si no sostengo el pin Digital 10 / Reset al pin 1 del chip objetivo, obtengo un error stk500_disable(): protocol error, expect=0x14, resp=0x51 Y sí, al final de esto, ambos chips originales todavía funcionan bien, así que no creo que los haya arruinado a pesar de todo esto.

Aquí hay una foto de una de mis configuraciones: sí, el cable amarillo es para restablecer, no 3v3. Se supone que la placa NG inferior está programando el chip en el Uno superior.

    
pregunta cpf

7 respuestas

3

Lo único que me funcionó fue seguir este tutorial: enlace

Una nota muy importante: aunque el tutorial se concentra en la configuración mínima, para algunos chips (dependiendo del proveedor) funciona SOLO CUANDO se agrega el oscilador externo y los dos 22 pC.

El tutorial también muestra una resistencia de 10k entre el restablecimiento y el riel de 5V. Los componentes que faltan pueden hacer que tu configuración (la de tu imagen) también funcione. Muchos usuarios declararon en sus comentarios que obtuvieron exactamente el mismo error que usted hasta que agregaron el oscilador: ¡¡¡podría ser este !!!

Espero que ayude: luché por un día antes de encontrar esto

    
respondido por el Radu Simionescu
1

Tuve el mismo problema al usar el ISP de Arduino para reconvertir el cargador de arranque Arduino en una placa Nano (también m328p). Sin embargo, había otra aplicación en él (AmForth). Aunque avrdude se quejó de la firma no válida 0x000000, el chip funcionaba normalmente (solo quería volver a flashearlo de nuevo a Arduino).

No había posibilidad de comunicarse con el ISP de Arduino. Afortunadamente, tenía un USBasp en mi cajón y con este programador todo funcionaba normalmente, sin ningún problema.

Lo que me desconcierta es que USBasp se basa en el chip AVR, por lo que no sé exactamente qué está mal con el croquis de Arduino. Quizás la sobrecarga en el cableado en el ISP de Arduino rompe el tiempo, mientras que en USBasp hay un programa normal escrito en el ensamblador y, por lo tanto, no hay sobrecarga y demoras innecesarias.

La condición básica para el éxito es que los fusibles no estén fundidos de manera incorrecta (es decir, no hay configuraciones de reloj externo).

    
respondido por el Jindrich Vavruska
0

Un par de otras cosas que podrían ir mal con él:

  • Esta persona también tuvo problemas con la línea de reinicio. Se recomienda un boceto diferente para programar a través de Uno. Esperemos que sea solo la línea de reinicio en el Uno, pero si no lo es ...
  • Esa página me recordó que la mayoría de los cargadores de arranque colocan los fusibles en los chips de destino de tal manera que ya no funcionan sin el cristal externo (más las dos pequeñas tapas a tierra desde las líneas hasta el cristal). Por lo tanto, si alguna vez comenzó con éxito la carga, es probable que haya configurado sus fusibles para cristal externo, lo que simplemente significa que tendrá que adquirir un cristal 8/10/16/20 más algunas tapas pequeñas para resucitar tus atmegas Esto no se aplica a los ATmegas cuando están en NG o Uno, pero el NG es problemático, ya que la línea RESET no es fácilmente accesible.
respondido por el angelatlarge
0

La línea "avrdude: dispositivo AVR inicializado y listo para aceptar instrucciones" en realidad demuestra que al menos su primera transacción SPI se completó con éxito.

Algo que podría ayudar a diagnosticar el problema es el registro de salida si pasa -v -v -v -v a avrdude. También puede pasar la opción -t -F a avrdude y hurgar un poco (por ejemplo, para ver cómo se leen los fusibles). Sin embargo, no intentes ninguna modificación cuando operes con -F .

    
respondido por el microtherion
0

El ATmega328 y el ATmega328P no son lo mismo, en realidad son ligeramente diferentes, por lo que si estás usando el incorrecto, la comprobación de la firma fallará.

Cuando llame a avrdude, cambie el tipo de chip de destino para que coincida con el tipo de chip real que está utilizando. :)

    
respondido por el Luke
0

Está bien. Si obtiene un error de verificación de firma, necesita la firma de 328p en el archivo avrdude.conf y engañar al IDE arduino para que cargue el cargador de arranque en el 328p de barebones.

Intente hacer las conexiones proporcionadas (mire la última imagen con oscilador externo y mayúsculas) en la página ArduinoISP

Editaré la respuesta con imágenes más tarde.

    
respondido por el ammar.cma
-1

Para mí fue la versión del arduino UNO la que hizo la diferencia. Lo he intentado con uno más reciente y todo está bien ahora.

    
respondido por el hachpai

Lea otras preguntas en las etiquetas