Reinstalando el Bootloader de tu Arduino
¿Cómo reprogramar el bootloader en un Arduino Uno?
Lo que necesitas (Opción 1):- Tu Arduino Uno (para programar)
- Un Arduino Funcional.
- Algunos cables para el interconectado.
Lo que necesitas (Opción 2):
- Tu Arduino Uno (para programar).
- Un Programador AVR como el AVR Pocket Programmer o el AVR-ISP500.
- Un Cable para Programar el AVR (el pocket programmer viene con uno).
- El Arduino Optiboot Bootloader
- WinAVR (Windows) o Crosspack for AVR Development (Mac) - Este software contiene elavrdude, el cual es necesario! (Nota: podrías obtenerlo bajándolo o usando una copia del avrdude que viene con el Arduino, sin embargo, instalando la versión con el WinAVR, éste agregará las rutas a Windows Environment Variables lo cual lo hace mucho más fácil de usar por medio de comandos (prompt).
- Arduino 0018 (o más nuevo) si es que estás usando la opción 1.
Programando el Arduino para que funcione como programador (para la Opción 1)
Primero debemos tener el Arduino programado para trabajar como programador. Esto es muy simple, con el Arduino IDE, abrir el ArduinoISP realizando lo siguiente:
File->Examples->ArduinoISP.
Lo anterior hará que el Arduino actúe como un programador ISP. Selecciona tu tarjeta en menú de herramientas (Tools), y luego asegúrate de seleccionar el puerto COM correcto (anota el puerto seleccionado, porque se volverá a usar más adelante). Luego sólo sube el programa al Arduino.
Por ahora, el Arduino se programó para funcionar como un programador ISP, y se encuentra conectado al computador por medio de un cable USB. Lo siguiente que necesitamos es que este Arduino se conecte a la tarjeta objetivo (la que queremos reinstalar el Bootloader), para luego poder cargar los archivos *.HEX a esta tarjeta.
Conexionado de tu Tarjeta
Arduino | Programador AVR | Arduino al que se le reinstalará el bootloader |
---|---|---|
VCC / 5V | 5V | VCC / Pin2 |
GND | GND | GND / Pin 6 |
MOSI / D11 | MOSI | MOSI / Pin 4 |
MISO / D12 | MISO | MISO / Pin 1 |
SCK / D13 | SCK | SCK / Pin 3 |
D10 | RESET | RESET / Pin 5 |
Nota: Puedes usar el cable que viene con el programador. El lado que se conecta al Pocket Programmer sólo se puede conectar de una forma. El lado que se conecta al Arduino va con la muesca de frente al botón Reset.
Programando la Tarjeta a Reinstalar
Lo único que queda por hacer es enviar el archivo *.hex desde el computador al Arduino Programador (el que se encuentra conectado al PC) para que éste pueda luego pasarle el programa al Arduino objetivo (al que se le reinstalará el Bootloader). AVRdude es un programa incluido con WinAVR (o Crosspack) que puede enviar un archivo *.hex a un programador ISP. Una vez que tengas el AVRdude instalado (vía WinAVR o Crosspack) sólo necesitas un comando para llevar el archivo *.hex a la tarjeta objetivo. Instalar este programa es simple, sólo sigue las indicaciones e instala el programa usando los valores por defecto.
AVRdude en un programa que funciona por línea de comando, por lo que debes abrir la línea de comandos de Windows (Inicio-Ejecutar- "cmd") para poder usarlo. Una vez abierto el "cmd", escribe "avrdude" y presiona Enter. Si la instalación está correcta entonces se mostrará una lista de opciones disponibles. Con esto estamos listos para enviar comandos que programarán la tarjeta. Comienza por dirigirte hacia el directorio en el cual se encuentra el archivo *.hex.
Primero vamos a configurar los Fuse Bits (bits de memoria que según su valor, ´0´ o ´1´, permiten configurar a muy bajo nivel un microcontrolador, el cual corresponde en este caso al chip que controla el Arduino, un ATMega328). Te permiten controlar cosas como si vas a usar o no un reloj externo, la velocidad del reloj interno, habilitar el Reset externo, y así muchas otras opciones las cuales aparecen detalladas en la hoja de datos del chip. Como una forma de asegurarse del correcto funcionamiento del chip, se van a configurar todos los fuse bits de éste.
Opción 1: avrdude -P comport -b 19200 -c avrisp -p m328p -v -e -U efuse:w:0x05:m -U hfuse:w:0xD6:m -U lfuse:w:0xFF:m
Opción 2: avrdude -b 19200 -c usbtiny -p m328p -v -e -U efuse:w:0x05:m -U hfuse:w:0xD6:m -U lfuse:w:0xFF:m
Ahora ingresa el comando, reemplazando comport (com5 por ejemplo) por el puerto COM al cual tu Arduino fue conectado (para la opción 1), y hexfilename por el nombre de tu archivo. No olvides que el comando es sensible a mayúsculas y minúsculas, por lo que ten cuidado al escribir o algún error podría ocurrir. El comando utiliza 7 parámetros: -P es el puerto usado, -b es el baudrate, -c es el tipo de programador, -p es el microprocesador que está siendo programado, y -v le dice al Avrdude que utilice una salida verbal, es decir, para cada respuesta de un comando o algún error, entonces se mostrará la descripción del error en vez de sólo el código, lo cual es útil si una persona está viendo la salida y no un programa. El resto indica: -e le dice al Avrdude que borre el chip antes de programarlo, y -U le dice al Avrdude dónde colocar el archivo *.hex. Además escribimos los Lock Bits en tu chip. Estos bits son similares a los Fuse Bits, con la excepción de que los Lock Bits controlan la seguridad de acceso en el chip. En este caso esto es importante, ya que evita que se sobreescriba accidentalmente en el Bootloader al instalar por ejemplo un programa demasiado grande.
Opción 1: avrdude -P comport -b 19200 -c avrisp -p m328p -v -e -U flash:w:hexfilename.hex -U lock:w:0x0F:m
Opción 2: avrdude -b19200 -c usbtiny -p m328p -v -e -U flash:w:hexfilename.hex -U lock:w:0x0F:m
Nota: recuerda que Arduino es sólo una tarjeta de desarrollo AVR que ejecuta el Arduino Bootloader. Por lo tanto, puedes usar este método para cargar cualquier archivo *.hex a un chip ATMega328. Para más información ingresa a este tutorial para usar tu Arduino para programar un AVR. (http://www.sparkfun.com/tutorials/200)
Nota: también puedes saltar la opción de usar la línea de comandos de Windows y usar el Arduino IDE para reprogramar el Bootloader. Asegúrate de tener la tarjeta correcta y el puerto seleccionado, luego dirígete a Tools-Burn Bootloader-(selecciona tu ISP) y selecciona "w/USBtinyISP" para el Pocket Programmer. La desventaja de usar este método es que no tienes ningún control sobre cual Bootloader estás cargando en tu tarjeta.