usar-arduino-para-reprogramar-el-bootloader

Usar Arduino para reprogramar el bootloader de otro Arduino

El bootloader de Arduino es un software alojado en la memoria flash que nos permite programar Arduino a través del puerto serie sin necesidad de usar un programador externo.

De forma resumida, durante el arranque de Arduino el bootloader comprueba si se está intentando programar el Arduino. Si es así, graba el programa en la memoria, y reinicia Arduino. En caso contrario, el bootloader ejecuta el último programa grabado.

El bootloader de Arduino es una de las partes esenciales en las que reside la comodidad y sencillez de uso de Arduino (y por tanto de su éxito). En general lo normal es que no necesitemos lidiar con él.

Sin embargo, hay varias circunstancias en las que necesitaremos ser capaces de modificar el bootloader de Arduino. Por ejemplo:

  • Los usuarios avanzados pueden querer modificar y personalizar el proceso de arranque.
  • En proyectos grandes, podemos querer aprovechar el espacio ocupado por el bootloader.
  • Algunos fabricantes envían sus placas sin el bootloader precargado.
  • En alguna circunstancia el bootloader puede corromperse.

En cualquiera de los casos, no necesitamos disponer de un programador externo si no que podemos grabar el bootloader de un Arduino usando otro Arduino como programador.

Al Arduino que actúa como programador lo llamaremos master, y al que vamos a programar slave. La comunicación entre PC y master se realiza a través de puerto serie, mientras que el master se comunicará con el slave a través de SPI.

Preparar el Arduino Master

En primer lugar vamos a configurar nuestro Arduino Master como programador. Para ello, simplemente tenemos que carga el Sketch “Arduino as ISP” de la librería de ejemplos de Arduino. Lo cargamos en el Master como cualquier otro sketch.

arduino-as-isp

Así de fácil. Con esto hemos convertido nuestro Arduino en un programador ISP.

Conectar Arduino Master con Slave

Desconectamos el master del ordenador, y conectamos master y slave. Para ello, alimentamos el Arduino Slave desde el Master conectando Vcc y Gnd de ambas placas. Por otro lado, conectamos los pines del bus SPI entra ambas placas.

Si, por ejemplo, estamos usando un Arduino UNO como programador Master y un Arduino Mini como slave, el esquema de conexión en el master a los pines del slave quedarían de la siguiente forma.

arduino-grabar-bootloader-master

Mientras que la conexión vista desde slave (Mini en el ejemplo) a los pines del master serían las siguientes.

arduino-grabar-bootloader-slave

Grabando el bootloader

Ahora podemos proceder a quemar el bootloader en el Arduino. Conectamos el master al ordenador a través del puerto serie, manteniendo la conexión entre master y slave.

Configuramos el IDE de Arduino. Seleccionamos:

  • El puerto COM al que tenemos conectado el master.
  • El modelo de placa del slave
  • Como programador, “Arduino ISP”

arduino-as-isp-2

Finalmente seleccionamos “Quemar bootloader” para iniciar el proceso de grabación.

arduino-as-isp-3

Tras un montón de lucecitas y parpadeos en los LED de ambas placas veremos un mensaje en el IDE informando de que el bootloader se he grabado correctamente.

Listo, hemos grabado con éxito el bootloader, y podemos desconectar ambos Arduinos y usarlos con normalidad.

Descarga el código

Todo el código de esta entrada está disponible para su descarga en Github. github-full