A raíz de un problema que ha tenido un usuario, que no podía poner el chip en modo DFU, he investigado la forma de grabar el firmware en el chip, usando un arduino como isp.
En este ejemplo, usamos un arduino uno como isp, para re-grabar el firmware en el 16u2 de un arduino mega.
Cargamos el código del arduino isp en el arduino uno.
Conectamos los arduinos así:
Nos creamos una carpeta en c: que se llame avrdude
Allí vamos a copiar varios archivos.
Copiamos el archivo avrdude.exe que está en C:\Program Files (x86)\Arduino\hardware\tools\avr\bin
Copiamos el archivo avrdude.conf que está en C:\Program Files (x86)\Arduino\hardware\tools\avr\etc
Copiamos el archivo Arduino-COMBINED-dfu-usbserial-atmega16u2-Mega2560-Rev3.hex que está en C:\Program Files (x86)\Arduino\hardware\arduino\avr\firmwares\atmegaxxu2
Estos archivos, los saco del IDE 1.6.1 de arduino. No se si funciona con otra versión. Con esta, puedo certificar que funciona.
Bien, con estas tres cosas copiadas, abrimos una consola de DOS, ponemos
cd c:\avrdude
y después, con el arduino uno conectado por usb al ordenador, ponemos el siguiente comando, cambiando el com3 por el puerto com en el que nos detecte el arduino el pc.:
avrdude -p m16u2 -F -P com3 -b19200 -c arduino -U flash:w:Arduino-COMBINED-dfu-usbserial-atmega16u2-Mega2560-Rev3.hex -U lfuse:w:0xFF:m -U hfuse:w:0xD9:m -U efuse:w:0xF4:m -U lock:w:0x0F:m
Con esto saldrán una serie de cosas por la pantalla de DOS, y acabará diciendo un "avrdude done. Thank you."
Con esto, tedríamos que tener el AtMega 16u2 regrabado como de serie.
Usamos el firmware "COMBINED" para que el chip tenga la funcionalidad de poderlo poner en modo DFU. Si usamos el que usamos normalmente con el software Atmel Flip, perdemos esa capacidad, ya que no estamos grabando en modo DFU, si no que estamos grabando directamente al chip.