4 votos

Arduino Diecimila (ATMEGA168) + JTAG ICE MKII Infierno ¿He freído el chip?

Hace dos semanas, saqué mi AVR JTAG ICE MKII y grabé con éxito algunos programas en C en mi Arduino a través de AVRStudio 4 SP3. Todo funcionaba muy bien.

La vida me alcanzó y no toqué el Arduino ni el JTAG hasta ayer. Decidí que quería jugar con unos cuantos XBees. Descargué XCTU para actualizar el firmware y demás. Me di cuenta de que tenía que volver a instalar el firmware de Arduino en la Diecimila para utilizar el escudo Arduino-XBee para actualizar el firmware. Intenté cargar el archivo hexadecimal original del cargador de arranque de Arduino a través del JTAGICE2 con AVRProg en AVRStudio y me encontré con un problema que no he podido resolver en las últimas 9 horas.

Cambié a AVRDude para poder ver la salida verbosa. Cada vez que uso AVRDude para programar el ATMEGA168, obtengo lo siguiente:

avrdude: AVR device initialized and ready to accept instructions

Reading |                                                    | 0% 0.00savrdude:
Send: u [75]   [20]
avrdude: Recv:
Reading | ################################################## | 100% 0.05s

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

También he recibido:

avrdude: jtagmkII_setparm()
avrdude: jtagmkII_setparm(): Sending set parameter command (parm 0x03, 1 bytes): 0xa0 (1 bytes msg)
avrdude: jtagmkII_setparm(): bad response to set parameter command: RSP_FAILED
avrdude: jtagmkII_getsync(): ISP activation failed, trying debugWire
avrdude: jtagmkII_setparm()
avrdude: jtagmkII_setparm(): Sending set parameter command (parm 0x03, 1 bytes): 0xac (1 bytes msg)
avrdude: jtagmkII_setparm(): bad response to set parameter command: RSP_DEBUGWIRE_SYNC_FAILED
avrdude: failed to sync with the JTAG ICE mkII in ISP mode
avrdude: jtagmkII_close()
avrdude: jtagmkII_close(): Sending sign-off command: avrdude: usb_fill_buf(): usb_bulk_read() error error reaping URB: No such device
avrdude: jtagmkII_recv(): Timeout receiving packet

avrdude: jtagmkII_close(): timeout/error communicating with programmer (status -1) 

Mientras usaba el JTAGICE2, conectaba su cabezal de 6 pines al cabezal ICSP del Arduino. Primero conectaba mi cable de pared de 12VDC al Arduino, luego encendía el JTAGICE2 conectado por USB, y luego abría AVRStudio o usaba AVRDude en DOS para intentar la programación. Ambos programas nunca han tenido problemas con el propio jtag... sólo con el objetivo. Durante la emisión del JTAGICE2, yo usaría el siguiente comando:

arduino-0021...\avr\bin>.\avrdude -C .\avrdude.conf -p m168 -c jtag2isp -P usb:64:b0 -vvvv -b 19200 -t

o

arduino-0021...\avr\bin>.\avrdude -C .\avrdude.conf -p m168 -c jtagmkII -P usb:64:b0 -vvvv -b 19200 -t

Después de unas cuantas horas sin éxito, finalmente saqué un Arduino Nano v3.0 (ATMEGA328P) y le puse ArduinoISP a través del último Arduino Wiring. Conecté los cables correctamente de acuerdo a la Arduino.cc (primer "esquema") sitio web y trató de cargar el cargador de arranque a la Diecimila de nuevo. Esta vez probé el siguiente comando avrdude:

arduino-0021\..\avr\bin>.\avrdude -C .\avrdude.conf -p m168 -c avrisp -P com4 -b 19200 -vvvv -t

Sigo recibiendo el mismo error. Lo raro es que el último programa que cargué hace 2 semanas en la Diecimila funciona perfectamente. ¡Simplemente no puedo sacar el maldito aparato de ahí!

El hecho de que el error mencione que el Device Signature del chip ATMEGA168 es 0xffffff me preocupa.

Ahora creo que este problema puede estar ocurriendo por varias razones diferentes:

  1. Mientras programaba el Arduino hace dos semanas con AVRProg y JTAGICEMK2, quizás los fusibles estaban puestos. Sin embargo, puedo decir que estaban en cualquier estado por defecto que utiliza AVRProg, ya que NUNCA he jodido con la pestaña de los fusibles en absoluto. Mi explicación más plausible, sin embargo, es que el ISP se ha desactivado a través de los fusibles.
  2. De alguna manera el hardware puede haber sido dañado causando que la capacidad de programación no funcione. No sé de ningún daño que haya hecho pero no puedo descartar eso.
  3. El JTAGICEMKII puede estar dañado... aunque recibir el mismo error usando ArduinoISP debería desmentir esa posibilidad
  4. Durante la investigación en Google, leí que el cable de cinta JTAG tiene grandes problemas de sensibilidad. No estoy seguro de si esto es un problema grave o no.

Bueno, estoy oficialmente perdido. Espero haber incluido toda la información necesaria. Estoy ejecutando esta configuración en un PC estable con Windows 7 de 64 bits utilizando el último software de Arduino, AVR ToolChain y AVRStudio disponible desde hace dos semanas. En caso de que fuera mi ordenador de sobremesa, también descargué Arduino D/L y libusb-win32 en mi portátil Vista, intenté la consulta de AVRDude utilizando el primer comando DOS y recibí el primer error mencionado anteriormente. ¿Tengo que comprar un nuevo chip? Sé que no cuestan nada, pero preferiría guardarlo y aprender de mi error para poder arreglarlo la próxima vez o evitar el problema por completo.

¿Tiene alguna sugerencia que pueda ayudar? Gracias de antemano por su respuesta.

0 votos

Me encontré con un problema similar con mi PICkit 2 y algunos dsPIC. Me había olvidado de conectar el conector Vdd y Vss del PICkit 2 a la Vdd/Vss de mi circuito, lo que estaba causando todo tipo de problemas intermitentes. Añadiendo mi sonda de alcance a veces lo hacía funcionar.

2voto

paraba Puntos 96

Creo que he encontrado una solución en dos partes para mi problema particular. Actualmente tengo un Arduino Diecimila (que tiene el ATMEGA168 con el problema) y también un nuevo Arduino Nano 3.0. Seguí adelante y flasheé el Arduino Nano con el ArduinoISP firmware. A continuación, recogí 3 chips DIP ATMEGA328P de 28 pines por 5,00 dólares cada uno en la tienda de electrónica local.

Utilicé el ArduinoISP para flashear uno de los chips vírgenes con el Arduino Firmware utilizando el enlace anterior con un cristal. Ahora planeo flashear uno de los otros ATMEGA328P con el Programador de alta tensión de los firmwares. Este chip junto con un poco de cableado en una protoboard debería permitirme resetear todos los fusibles del ATMEGA168 original. Una vez hecho esto, podré utilizar el Arduino Nano para reprogramar el chip.

Dado que los ATMEGA328P sólo cuestan 5 dólares cada uno, mi objetivo final es configurar un 328 como programador Arduino ISP, configurar el 168 como programador HV, mantener un chip 328 en mi actual Arduino Diecimila (¡actualización!), y me quedará uno para lo que sea. Entonces puedo cambiar los chips en la Diecimila o construir una placa real para las placas del ISP y del Programador HV.

Todavía no he probado el JTAG ICE MKII con un osciloscopio lógico. No estoy seguro de si es la raíz del problema o no. Trataré este tema después de construir el programador HV.

Informaré sobre el éxito/fracaso del programador HV. Sólo tengo que ir a buscar unas cuantas resistencias más de 1K para llevarlo a cabo. ¿Alguien ha probado el programador HV? ¿Alguna otra sugerencia? Si nada más, espero que esto ayude a alguien.

0 votos

Me alegra informar que el firmware del programador de alto voltaje enlazado arriba me permitió usar el Arduino Nano para arreglar el ATMEGA168P que había estropeado. Hoy voy a realizar pruebas en el JTAG ICE MKII para determinar si tiene un problema de hardware.

0 votos

JTAG ICE MKII funciona perfectamente después de HVP. No se ha producido ningún daño real, así que caso cerrado en mi problema.

0 votos

Es raro ver que la gente siga después de su problema está resuelto. Normalmente el tipo XYZ necesita una respuesta ahora y cuando el hilo se detiene bruscamente (después de que alguien publicara una solución para ellos); desaparecen. Es una vergüenza. Así que, seas quien seas, te felicito por informar detalladamente de tu solución, saludos.

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X