Arduino DFU Tutorial (Device Firmware Update)

10 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