No escribir fusibles ATMega16U4 con avrdude

Estoy tratando de configurar los fusibles en un ATMega16U4 con avrdude. El primer problema que encontré es que la versión 5.11.1 de avrdude no parece ser compatible con ATMega16U4. Alguien mencionó en avrfreaks que debería copiar el bloque ATMega32U4 en avrdude.conf y cambiar la firma, la descripción y los tamaños de memoria para adaptarse a ATMega16U4 y eso es lo que hice, aquí está mi avrdude.conf: http://paste.dy. fi/SQP

Esto parece funcionar, pero no estoy 100% convencido.

El problema real es que avrdude no puede configurar los fusibles (estoy usando mi buspirate como programador de ISP):

avrdude -c buspirate -p m16u4 -P /dev/ttyUSB0 -U lfuse:w:0xe2:m -U > hfuse:w:0xd8:m -U efuse:w:0xf8:m

Detectando BusPirate... **
** Bus Pirate v3a ** Firmware v5.10 (r559) Bootloader v4.4 ** DEVID:0x0447 REVID:0x3046 (24FJ64GA002 B8) ** http://dangerousprototypes.com ** BusPirate: utilizando el modo BINARIO avrdude: dispositivo AVR inicializado y listo para aceptar instrucciones

Lectura | ############################################## | 100% 0.02s

avrdude: firma del dispositivo = 0x1e9488 avrdude: leyendo el archivo de entrada "0xe2" avrdude: escribiendo lfuse (1 byte):

Escritura | | 0% 0.00s >***fallido;
Escritura | ############################################## | 100% 0.07s

avrdude: 1 byte de lfuse escrito avrdude: verificación de la memoria lfuse contra 0xe2: avrdude: cargar datos lfuse desde el archivo de entrada 0xe2: avrdude: el archivo de entrada 0xe2 contiene 1 byte avrdude: lectura de datos lfuse en el chip:

Lectura | ############################################## | 100% 0.00s

avrdude: verificando ... avrdude: error de verificación, primer error de coincidencia en el byte 0x0000 0xe2 != 0x5e avrdude: error de verificación; discrepancia de contenido

avrdude: modo seguro: lfuse cambió! Era e2 y ahora es 5e ¿Le gustaría que este fusible se cambiara de nuevo? [s/n]

Parece poder leer bien el microcontrolador, lee la firma correcta y lee los fusibles correctos (predeterminados), pero no los cambia.

Aquí hay una impresión de avrdude más detallada con -vvv: http://paste.dy.fi/JA6

Estoy usando un cristal de 12MHz con cerámica de 22p y tengo una resistencia pull-up de 4.7kohm en el reinicio.

¿Alguien tiene alguna idea de por qué no funciona? He revisado las conexiones con un multímetro, etc. varias veces y están todas bien. También dudo que la lectura del dispositivo funcionara incluso si las conexiones tuvieran un problema. El ATMega es completamente nuevo, nunca se usó, nunca se programó (por lo que los fusibles de bloqueo no están configurados), etc.

Ahora estoy MUY seguro de que el problema radica en avrdude.conf. Un amigo mío se encontró con el mismo problema.

Respuestas (1)

¡RESUELTO! ¿Por alguna razón, el AVR se envía con los bits de bloqueo habilitados? Según la hoja de datos, así es como se especifica. Borrar el chip desactiva los bits de bloqueo y me permitió programar los fusibles.

Dago, ¿cómo borras el chip?
¿Cómo hiciste eso?
Descubrí que si programa con algo primero antes de configurar los fusibles, funcionará. No importa qué hexadecimal uses para programar, solo flashéalo con cualquier cosa
Tengo el mismo problema con attiny85. El valor de efuse actual es 0x62. No tengo idea de cómo sucedió. Intenté borrar y cargar diferentes hex. Pero todo termina con 'error de verificación'