domingo, febrero 20, 2011 23:30
Publicado en la categoría Hardware, Linux, Programación, Software, Tutoriales
Download PDF

Hace poco me compré un Arduino Uno y me encontré con ciertos problemas para que linux se comunicara con el dispositivo. Con otras placas antiguas no tenía ningún tipo de problema, pero para el modelo Uno no conseguía que cargara el código al Atmega328. Resulta que era debido a que el Arduino Uno utiliza el chip Atmega8U2 para la comunicación por USB mientras que los modelos anteriores lo realizan mediante el chip FTDI. La primera solución que encontré fue eliminar la GUI de arduino que instalé mediante los repositorios de Fedora y en su lugar descargar de la página oficial la versión anterior (la 0021 en vez de la 0022) y utilizarla.

Buscando un poco más me encontré con que actualizando el firmware del Arduino Uno se solucionaban algunos problemas de comunicación serial en Linux como el que yo estaba teniendo y que el proceso para realizarlo es seguro. Así que sin pensármelo dos veces me puse a ello.

Para escribir el firmware en el Atmega8U2 es necesario usar un software que utilice el protocolo USB DFU. Para linux el ‘dfu-programmer’ nos servirá.

Lo instalamos desde los repositorios. Si usas una distribución basada en Red Hat este es el comando:

[usuario@equipo ~]$ su -c 'yum -y install dfu-programmer'
contraseña:

Y si usas una distribución basada en Debian este otro:

[Usuario@Equipo ~]$ sudo apt-get install dfu-programmer
contraseña:

Una vez instalado descargamos el archivo Arduino-usbserial-uno.hex de la página de arduino.

Ahora conectamos la placa al ordenador mediante el cable USB y procedemos a reiniciar el Atmega8U2. Para realizar esta tarea tenemos dos métodos.

El primero consiste en soldar una resistencia de 10K en las pistas indicadas en las fotografía siguiente. Si no tienes algo de práctica manejando el soldador mejor te recomiendo realizar el segundo método, explicado más abajo.

resistencia-parte-trasera-de-arduino-uno

Una vez soldada la resistencia reiniciamos el 8U2 uniendo con un cable los dos pines indicados en la foto. Para esto no es necesario soldar el cable, basta con juntar los dos pines.

arduino-uno-frontal

El segundo método consiste en tocar con un cable los contactos de la parte posterior de la placa y sin soltar, con un segundo cable juntar los dos pines de parte frontal de la placa, después soltar el cable de la parte frontal y luego el de la parte posterior. Para comprobar si lo has reiniciado correctamente y el chip esta en modo DFU basta con escribir en un terminal ‘ls /dev‘ y ver si en la lista está el arduino (se llama ttyUSB0 o ttyASM0). Si no está, el Atmegao8U2 se reinició de forma correcta y podemos seguir con el siguiente paso.

arduino-uno-detras

arduino-uno-frontal

Ahora vamos a reprogramar el Atmega8U2. Primero tenemos que borrar el firmware que ya hay en el chip, después escribiremos el nuevo firmware y por último reiniciaremos el chip, todo esto con permisos de root. Abrimos un terminal, nos movemos hasta el directorio donde se encuentre el archivo Arduino-usbserial-uno.hex y escribimos lo siguiente.

[Usuario@Equipo ~]$ su
contraseña:
[usuario@equipo ~]# dfu-programmer at90usb82 erase
[usuario@equipo ~]# dfu-programmer at90usb82 flash Arduino-usbserial-uno.hex
Validating...
4058 bytes used (99.07%)
[usuario@equipo ~]# dfu-programmer at90usb82 reset
[usuario@equipo ~]# exit
exit
[Usuario@Equipo ~]$ exit

Ya solo tienes que desconectar y volver a conectar el Arduino al ordenador. Es posible que el nombre del dispositivo haya cambiado y en vez de ser ttyASM0 (o ttyUSB0) aparezca como un dispositivo MIDI o HID, etc. si esto te pasa consulta la información del siguiente enlace.

Yo tras realizar estos pasos (usando el segundo método para reiniciar el 8U2) pude utilizar la última versión de la GUI de Arduino y hasta el momento no he vuelto a tener ningún problema con la comunicación serial. Para más información o para actualizar el firmware en Windows Mac o Linux puedes consultar la página oficial de arduino.

Un Comentario a “Actualizar el firmware de Arduino Uno en Linux”

  1. wendigo dice:

    junio 1st, 2012 a las 18:15 pm

    Me resulto muy util tuve el mismo problema serial y era un engorro. muchisimas gracias

Deja un comentario