Arduino DFU Tutorial (Device Firmware Update)

8 comments

La comunicacion de los Arduino UNO y el Arduino MEGA 2560 utiliza un chip AVR con un firmware que establece la comunicación del host por USB Serial interface y el MCU (chip principal) TTL serial port. Tanto el Arduino UNO R1 como el R2 utilizan el Atmega8u2, y el R3 utiliza el Atmega16u2.
Estos chip pueden ser reprogramados mediante DFU, lo que nos permite convertir el arduino en cualquier tipo de dispositivo USB (teclado, ratón, joystick, MIDI, etc.).
Vamos a instalar las librerias necesarias en Ubuntu (o derivados, como Debian, Elementrary OS...).
sudo apt-get install build-essential libusb-1.0-0-dev automake autoconf
Nos descargamos la última versión desde aquí (click).
tar xzf ~/Downloads/dfu-programmer-0.6.2.tar.gz cd dfu-programmer-0.6.2
#Configure 
./bootstrap.sh 
./configure 
make 
# INSTALL 
sudo make install
Ahora conectamos nuestro arduino al USB y conectamos estos dos pines durante unos segundos y los desconectamos. Escribimos en una terminal:
lsusb
Y nos debe de aparecer en uno de los buses como "Atmel Corp". Bien, ya tenemos el arduino en DFU. Ahora nos descargamos el firmware correspondiente desde aquí (click).
Si tenéis un Arduino UNO R3 (como es mi caso) os tenéis que descargar este (click).
Para descargároslo copiáis el link haciendo click derecho sobre "Raw" y "Copiar dirección de enlace." ahora en una terminal escribís:
wget (y la dirección web que tenéis en el portapapeles)
Ahora escribimos esta secuencia para subir el firmware:
sudo dfu-programmer atmega16u2 erase sudo dfu-programmer atmega16u2 flash Arduino-usbserial-atmega16u2-Uno-Rev3.hex sudo dfu-programmer atmega16u2 reset
Desconectamos el arduino del USB,lo volvemos a instalar y listo!
Ya sabemos como cambiar el firmware, en este caso hemos actualziado la versión. Es importante que tengáis el archivo que os habéis descargado porque es el original de arduino y lo necesitaréis para cargar los sketchs, ya que los otros firmwares no lo permiten.
Nota: si tenéis otro modelo de chip tenéis que cambiar el "atmega16u2" por el que tengáis vosotros.
Happy hacking. Twitter: @Pirobtumen

8 comentarios:

  1. Hola, tengo un problema... Como abro una terminal en windows???

    ResponderEliminar
    Respuestas
    1. Pulsa: "Tecla de windows" + R, se te abrirá una ventana. Ahora escribe: cmd.exe y pulsa "enter".

      Saludos! :)

      Eliminar
  2. discula no me funciona el comando wget en la terminal como le hago

    ResponderEliminar
    Respuestas
    1. ¿Estas usando linux? Si es así prueba a escribir "wget https://github.com/arduino/Arduino/raw/master/hardware/arduino/firmwares/atmegaxxu2/arduino-usbserial/Arduino-usbserial-atmega16u2-Uno-Rev3.hex".

      Eliminar
  3. porque a la hora de correr el "dfu-prog-usb-1.2.2" me aparece una ventana diciendo que "El pograma no puede iniciarse porque falta libusb0.dll en el equipo, Intente reinstalar el progra para corregir este problema."

    ResponderEliminar
    Respuestas
    1. Pues probablemente será problema de windows, trata de reinstalar o bajartela.

      Eliminar
  4. Creo que esto funciona solo para los arduinos italianos (versiones originales), la version china tiene un chip llamado CH340 el cual no se puede re-programar como los originales. ¿Estoy en lo cierto?

    ResponderEliminar
    Respuestas
    1. Estás en lo cierto, las versiones chinas llevan el CH340 (el otro día justo estuve trasteando con uno), pero no sé si puede reprogramar o no.
      El tutorial está hecho con un arduino uno original, sería cuestión de probar.

      ¡Saludos!

      Eliminar