ATMega644PA posiblemente bloqueado al configurar fusibles con avrdude

He estado programando un ATMega644PA con avr-gcc y avrdude en linux por un tiempo sin problemas. Bueno hasta que decidi cambiar unos fusibles. Había estado usando la opción de avrdude -p ATMEGA644Ppara programar el chip a pesar de que el chip es ATMega644P A.

Después de leer la hoja de datos (y leer los fusibles en el chip) hice lo siguiente

avrdude -v -c avrispmkII -p ATMEGA644P -P usb -U lfuse:w:0x63:m

El chip ya no se comunicaría. Después de eso, me di cuenta de que el problema podría haber sido que configuré los bits para el reloj externo en lugar del oscilador de cristal, pero incluso con el uso de un ATTiny para generar una señal de 1 MHz en el pin adecuado de mi Mega644, sigo sin obtener nada.

¿Alguna idea de por qué el chip no responde? ¿Podría ser que usar la definición de avrdude para la versión P del chip en lugar de la versión PA sea la causa?

Y finalmente, ¿Qué puedo hacer para rescatar mi chip? Escuché que puede ser posible con la programación de alto voltaje o JTAG. ¿Sería capaz de hacer eso con un STK500?

Primero, ¡bienvenido al sitio! Espero que podamos ofrecerle una cálida bienvenida, pero su pregunta podría ser un engaño. Estas preguntas: chiphacker.com/questions/700/… , chiphacker.com/questions/717/… y chiphacker.com/questions/861/recovering-an-attiny13 también se refieren a la configuración de fusibles en los AVR. Pero, este es un chip diferente (ligeramente), configuraciones de fusibles diferentes y un programador diferente, así que digo que lo dejemos estar (y no tengo el representante para marcarlo).

Respuestas (1)

No, su configuración 0x63 en el byte lfuse ha seleccionado el oscilador interno de 128 kHz como fuente de reloj. (los bytes 3..0 son CKSEL, consulte la tabla 7.1 en la página 28 de la hoja de datos ATmega644 donde 0011 es 'Oscilador RC interno de 128 kHz'). Esto es agradable y de bajo consumo, pero significa que es probable que su programador no se registre lo suficientemente lento como para programar su dispositivo. No estoy familiarizado ni con avrdude ni con el STK500, pero aquí es de donde proviene su problema.

Sin embargo, será difícil para usted bloquear su chip, porque tiene el STK500, que puede hacer programación de alto voltaje y rescatarlo de la mayoría de las situaciones. Como nunca he usado el dispositivo, me referiré a los muchos otros hilos donde otros han publicado problemas y soluciones para la configuración de fusibles AVR. También hay uno aquí en Chiphacker (ver mi comentario).

La próxima vez, esta calculadora de configuración de fusibles es un buen recurso. Es fantástico que leyó la hoja de datos e intentó calcular lo que quería usted mismo, pero la herramienta lo hace mucho más fácil.

Por cierto, ¿en qué estaban configurados los fusibles antes de hacer el cambio?

Editar: parece que la opción 'A' solo indica que no es miembro de la serie "* P * ico Power", por lo que eso no debería marcar la diferencia.

el lfuse se configuró originalmente en 0x64. Gracias por ese enlace de calculadora de fusibles, un gran recurso de hecho.