AVR AtTiny84 está atascado en un reloj de 128 kHz, avrdude + Arduino como ISP no puede alcanzarlo

Mientras experimentaba con el consumo de energía de diferentes frecuencias de reloj configurando bits de fusible, parece que programé irreversiblemente un chip ATTiny84 para el oscilador interno de 128 kHz, y ahora avrdude ya no puede establecer comunicación SPI con el chip.

He estado usando un Arduino Duemilanove para programar el chip, con el boceto "ArduinoISP".

Algunas líneas de comando avrdude que he estado usando, si ayudan, mis vanos intentos de volver a 1MHz:

avrdude -p t84 -C "C:\Program Files (x86)\arduino-1.0.4\hardware\tools\avr\etc\avrdude.conf" 
    -c stk500v1 -P COM7 -b 19200 -U lfuse:w:0x62:m -u

avrdude -p t84 -C "C:\Program Files (x86)\arduino-1.0.4\hardware\tools\avr\etc\avrdude.conf" 
    -c stk500v1 -P COM7 -b 19200 -U lfuse:w:0x62:m -u -B833 -i833

He probado muchos retrasos diferentes en las configuraciones -B e -i, que van desde 1 us hasta 10000 us. La salida es:

avrdude: please define PAGEL and BS2 signals in the configuration file for part
ATtiny84
avrdude: AVR device initialized and ready to accept instructions

Reading | ################################################## | 100% 0.07s

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.

Agregar la opción -F no ayuda: intenta programar, pero la configuración del fusible no funciona.

¿He perdido este chip de $2.50 para siempre? :)

¿ Le echaste un vistazo a esta pregunta de hace unas horas? Creo que ArduinoISP está tratando de programar el chip demasiado rápido y que el reloj SPI más bajo para el programador podría ayudar.
Interesante: suena precisamente como el mismo problema. Se supone que esas opciones -B e -i controlan la velocidad del reloj SPI, pero no creo que tengan efecto con el boceto del programador ArduinoISP. Tal vez intentaré piratear ese código mañana, veré si puedo reducir la tasa de SPI.
Esa me parece la solución.

Respuestas (3)

Bien, encontré una versión del boceto ArduinoISP que admite una opción de velocidad lenta para la programación SPI:

https://github.com/adafruit/ArduinoISP/blob/master/ArduinoISP.ino

Al definir la LOW_SPEEDmacro, pude reprogramar los bits del fusible al valor predeterminado de 1 MHz. Así que problema resuelto.

Guau. He tenido problemas con un ATTiny44A, obtuve firmas aleatorias de dispositivos y esporádicamente pude obtener una lectura adecuada de la configuración de la firma y el fusible. Este boceto solucionó eso de inmediato. Ni siquiera necesitó configurar LOW_SPEED. ¡Gracias!

https://github.com/lmpipaon/ArduinoISP_slow_SCK.git

ArduinoISP lento SCK

Es una modificación del boceto Arduino ISP que permite una frecuencia más baja de SCK para programar microcontroladores con relojes lentos, por ejemplo, usando el reloj de vigilancia dividido por 8.

Cuando ArduinoISP inicia el modo de programación de baja frecuencia utilizando el System Clock Prescaler.

Cuando finaliza el modo de programación, el Prescaler del reloj del sistema vuelve a establecerse en 1

A veces me encuentro en esta situación cuando estoy programando el Flash y los fusebits de una parte por separado (AVR Studio 4 afirma que la firma de la parte es incorrecta, por lo que no me permite usar el formato .elf).

He probado a bajar la frecuencia del reloj de programación lo más bajo posible y al igual que tú, no funciona. Lo que funciona es desoldar el cristal y reemplazarlo con un generador de pulsos ajustado a 1 MHz más o menos el tiempo suficiente para reprogramar los fusibles. Si no tiene un generador de funciones de sobremesa, debería ser rápido construir un R/C simple o un generador de pulsos de cristal. Muchos esquemas en línea y es una herramienta útil para tener a mano.

Un enfoque con el que estoy experimentando actualmente (cuando uso un Arduino como programador) es simplemente usar uno de los pines PWM como generador de pulsos de 1MHz.
Interesante, gracias, en mi caso, el chip usa un reloj interno de 128 kHz, así que no creo que pueda influir con ningún cambio de reloj externo.
Sí, me temo que @lyndon y yo nos estábamos yendo por la tangente: si su MCU está configurado en una fuente de reloj interna, ninguna fuente de reloj externa podría marcar la diferencia. Sin embargo, reducir la velocidad del reloj SPI ayuda: es solo una cuestión de ir a una implementación de software, ya que, paradójicamente, la implementación de hardware no se puede configurar para que sea lo suficientemente LENTA para sus propósitos.