Cami Can Calders, 8 2º-2ª | 08173 Sant Cugat del Valles info@bmotes.com 932504996

WhatsBee blog

Probando bootloaders alternativos para Arduino

Hace algunos años, cuando empezaba en el mundo de la informática me explicaron de donde proviene la palabra boot (referida al proceso de inicio de los ordenadores). En los ordenadores arranca el hardware, este se tiene que encargar de arrancar el software, pero la rutina que define como debe de arrancar el software no puede estar en el mismo software, el término boot deriva de que es un proceso parecido a levantarse a uno mismo del suelo estirando de los cordones de las botas.

En el mundo de los sistemas embebidos suele haber un pequeño programa que se llama bootloader, su función es poder cargar los programas en la memoria nvram sin la necesidad de un programador. Poniendo como ejemplo la placa Arduino, con la ayuda de un programador siempre podemos cargar un programa, pero si ponemos un bootloader podremos hacerlo a través del puerto serie. El micro se inicia, arranca el bootloader y este se encarga de escuchar por el puerto serie o por el puerto USB durante un tiempo después del reset para ver si queremos cargarle un programa en la nvram.

Normalmente la UART de los micros funciona con niveles lógicos de 0 y 5V (o de 0 y 3,3V), mientras que el puerto serie de un ordenador lo hace con +-10 ó 12 V (perdonad la imprecisión), por lo que es necesario un circuito que adapte los niveles. Si lo intentamos hacer a través de un puerto USB también necesitamos un circuito que adapte los niveles y los protocolos, generalmente con un chip de FTDI.

Nosotros intentamos hacer nodos pequeños y baratos, como esta circuitería adicional solo sirve para cargar el programa no es necesario que sea una parte fija del nodo, como norma general lo que se suele hacer es dejar unos headers (pines) en el nodo y utilizar una placa aparte como la de la foto.

Placa de FTDI para convertir de USB a UART

Todo esto en el campo parece un poco complicado, para actualizar el firmware tienes que abrir la caja del nodo, conectar esta placa, un PC con un puerto USB, el entorno de desarrollo y, posteriormente, actualizar el FW de la placa.

Pensando en la forma de simplificarlo he estado mirando bootloaders alternativos, que nos permitan actualizar de una forma más sencilla:

  • TFTP: Es el más obvio, a través de la red, he encontrado dos https://github.com/mharizanov/TFTPBootloader_0_2 y https://github.com/mharizanov/arduino-netboot, el segundo no me sirve demasiado, porque exige configurar un servidor BOOTP, un poco complicado para lo que lo quiero. El primero lo he probado, pero no he conseguido hacerlo funcionar.
  • SD: Una forma alternativa de actualizar el FW es poniendo un fichero en la tarjeta SD, simplemente hay que conectar la tarjeta SD a un PC, arrastrar el fichero HEX con un nombre concreto y el nodo al arrancar actualizará su firmware. Combinado con la posibilidad de que el propio programa del nodo busque en Internet actualizaciones, las descargue y las coloque en la SD nos da un procedimiento sencillo para actualizar, si la necesidad de sacar la tarjeta. Podemos tener un repositorio en Internet y que los nodos comparen la versión de FW que tienen con la última, si hay una posterior que la descarguen y la graven en la propia tarjeta, la proxima vez que reinicemos la placa se actualizará mágicamente.

He encontrado esto 2boots, que es un bootloader para Arduino que permite la carga por la UART y por la SD. Me falta probarlo, pero parece una buena idea….

seguiremos informandoHace algunos años, cuando empezaba en el mundo de la informática me explicaron de donde proviene la palabra boot (referida al proceso de inicio de los ordenadores). En los ordenadores arranca el hardware, este se tiene que encargar de arrancar el software, pero la rutina que define como debe de arrancar el software no puede estar en el mismo software, el término boot deriva de que es un proceso parecido a levantarse a uno mismo del suelo estirando de los cordones de las botas.

En el mundo de los sistemas embebidos suele haber un pequeño programa que se llama bootloader, su función es poder cargar los programas en la memoria nvram sin la necesidad de un programador. Poniendo como ejemplo la placa Arduino, con la ayuda de un programador siempre podemos cargar un programa, pero si ponemos un bootloader podremos hacerlo a través del puerto serie. El micro se inicia, arranca el bootloader y este se encarga de escuchar por el puerto serie o por el puerto USB durante un tiempo después del reset para ver si queremos cargarle un programa en la nvram.

Normalmente la UART de los micros funciona con niveles lógicos de 0 y 5V (o de 0 y 3,3V), mientras que el puerto serie de un ordenador lo hace con +-10 ó 12 V (perdonad la imprecisión), por lo que es necesario un circuito que adapte los niveles. Si lo intentamos hacer a través de un puerto USB también necesitamos un circuito que adapte los niveles y los protocolos, generalmente con un chip de FTDI.

Nosotros intentamos hacer nodos pequeños y baratos, como esta circuitería adicional solo sirve para cargar el programa no es necesario que sea una parte fija del nodo, como norma general lo que se suele hacer es dejar unos headers (pines) en el nodo y utilizar una placa aparte como la de la foto.

Placa de FTDI para convertir de USB a UART

Todo esto en el campo parece un poco complicado, para actualizar el firmware tienes que abrir la caja del nodo, conectar esta placa, un PC con un puerto USB, el entorno de desarrollo y, posteriormente, actualizar el FW de la placa.

Pensando en la forma de simplificarlo he estado mirando bootloaders alternativos, que nos permitan actualizar de una forma más sencilla:

  • TFTP: Es el más obvio, a través de la red, he encontrado dos https://github.com/mharizanov/TFTPBootloader_0_2 y https://github.com/mharizanov/arduino-netboot, el segundo no me sirve demasiado, porque exige configurar un servidor BOOTP, un poco complicado para lo que lo quiero. El primero lo he probado, pero no he conseguido hacerlo funcionar.
  • SD: Una forma alternativa de actualizar el FW es poniendo un fichero en la tarjeta SD, simplemente hay que conectar la tarjeta SD a un PC, arrastrar el fichero HEX con un nombre concreto y el nodo al arrancar actualizará su firmware. Combinado con la posibilidad de que el propio programa del nodo busque en Internet actualizaciones, las descargue y las coloque en la SD nos da un procedimiento sencillo para actualizar, si la necesidad de sacar la tarjeta. Podemos tener un repositorio en Internet y que los nodos comparen la versión de FW que tienen con la última, si hay una posterior que la descarguen y la graven en la propia tarjeta, la proxima vez que reinicemos la placa se actualizará mágicamente.

He encontrado esto 2boots, que es un bootloader para Arduino que permite la carga por la UART y por la SD. Me falta probarlo, pero parece una buena idea….

seguiremos informando

Dejar un comentario