Hice una placa simple con microcontrolador ATMega8U2 para mi experimentación USB (me gustaría hacer dispositivos MIDI, HID, ...). Me inspiré en Arduino Uno. Si observa el esquema a continuación, puede ver que es casi el mismo que Uno.
Programé 8U2 con firmware del proyecto Arduino - UNO-dfu_and_usbserial_combined.hex . Ahora, si conecto la placa al USB, obtengo el puerto serie y funciona como Arduino, así que esto está perfectamente bien.
Mi problema es: ¿cómo puedo poner 8U2 en modo DFU, para poder cambiar el firmware sin un programador externo? Si te fijas en la imagen, conecté HWB (pin PD7) a tierra, por lo que debería ser simple, simplemente presionando el botón de reinicio. Desafortunadamente, no está funcionando.
¿Me estoy perdiendo algo? ¿Puede ser un problema en las picaduras de fusibles incorrectos?
Editar: Mis fusibles son lfuse = 0xff hfuse = 0xd9 efuse = 0xf4
Editar2:
Revisé los fusibles en el chip
$ avrdude -p at90usb82 -P /dev/tty.usbmodem411 \
> -F -c arduino \
> -U lfuse:r:low:h \
> -U hfuse:r:high:h
$ cat high low
0x00
0x00
Para la programación, estoy usando Arduino Uno como ISP y este comando (en Mac):
$ avrdude -p at90usb82 -F -P /dev/tty.usbmodem411 \
> -c arduino \
> -U flash:w:UNO-dfu_and_usbserial_combined.hex \
> -U lfuse:w:0xFF:m \
> -U hfuse:w:0xD9:m \
> -U efuse:w:0xF4:m \
> -U lock:w:0x0F:m
.......
avrdude: verifying ...
avrdude: verification error, first mismatch at byte 0x0000
0xff != 0x00
avrdude: verification error; content mismatch
Supongo que, avrdude no programó los fusibles y aún están en blanco. ¿Es posible? Debido a que la placa funciona correctamente, excepto el modo DFU después del reinicio.