Gestor Arranque

Que es el gestor de Arranque?
Para poder explicar que es tomaremos de ejemplo la placa de desarrollo Arduino Uno.
Dentro de la memoria Flash del microcontrolador incluido en las placas Arduino viene pregrabado de fábrica un pequeño programa llamado “bootloader” o “gestor de arranque”, que resulta imprescindible para un cómodo y fácil manejo de la placa en cuestión.

Este software (también llamado “firmware”, porque es un tipo de software que raramente se modifica) ocupa, en la placa Arduino UNO, 512 bytes de espacio en un apartado especial de la memoria Flash, el llamado “bootloader block”, pero en otros modelos de placas Arduino puede ocupar más (por ejemplo, en el modelo Leonardo ocupa 4 Kilobytes).

La función de este firmware es gestionar de forma automática el proceso de grabación en la memoria Flash del programa que queremos que el microcontrolador ejecute. Lógicamente, el bootloader realizará esta grabación más allá del “bootloader block” para no sobrescribirse a sí mismo.
Más concretamente, el bootloader se encarga de recibir nuestro programa de parte del entorno de desarrollo Arduino (normalmente mediante una transmisión realizada a través de conexión USB desde el computador donde se está ejecutando dicho entorno hasta la placa) para proceder seguidamente a su correcto almacenamiento en la memoria Flash, todo ello de forma automática y sin que nos tengamos que preocupar de las interioridades electrónicas del proceso. Una vez realizado el proceso de grabación, el bootloader termina su ejecución y el
microcontrolador se dispone a procesar de inmediato y de forma permanente (mientras esté encendido) las instrucciones recientemente grabadas.
En la placa Arduino UNO, el bootloader siempre se ejecuta durante el primer segundo de cada reinicio. Durante esos instantes, el gestor de arranque se espera a recibir una serie de instrucciones concretas de parte del entorno de desarrollo para interpretarlas y realizar la correspondiente carga de un posible programa. Si esas instrucciones no llegan pasado ese tiempo, el bootloader termina su ejecución e igualmente se empieza a procesar lo que haya en ese momento en la memoria Flash.

Estas instrucciones internas de programación de memorias Flash son ligeramente diferentes según el tipo de bootloader que tenga la placa, pero casi todas son variantes del conjunto de instrucciones ofrecido oficialmente por Atmel para la programación de sus microcontroladores, el llamado protocolo STK500 (http://www.atmel.com/tools/STK500.aspx). Un ejemplo es el bootloader que tiene pregrabado el ATmega328P del Arduino UNO, basado en un firmware libre llamado Optiboot (http://code.google.com/p/optiboot), el cual logra una velocidad de grabación de 115 kilobits de programa a cargar por segundo gracias al uso de instrucciones propias derivadas del “estándar” STK500.

Toda la información del Optiboot:

HoodLoader2 te la opción de reprogramar el ATmega16u2 de un Arduino normal con sketcehs: https://github.com/NicoHood/HoodLoader2, se  trata de un proyecto muy intersante.

Como funciona el optiboot: https://code.google.com/archive/p/optiboot/wikis/HowOptibootWorks.wiki

Adaboot es otro bootloader optimizado cuyas mejoras ya las incluye optiboot. Más información: https://learn.adafruit.com/arduino-tips-tricks-and-techniques/bootloader

Otro ejemplo de bootloader derivado del protocolo STK500 es el bootloader “wiring”, grabado de fábrica en el microcontrolador de la placa Arduino Mega. En este enlace es posible obtener el código en C del protocolo STK500: http://www.atmel.com/dyn/resources/prod_documents/avr061.zip

El bootloader que viene en la placa Leonardo (llamado “Caterina”) es diferente, ya que entiende otro conjunto de instrucciones independiente llamado AVR109 (también oficial de Atmel). Toda esta información se puede obtener consultando el contenido del fichero llamado “boards.txt”, descargado junto con el entorno de desarrollo de Arduino.

Si adquirimos un microcontrolador ATmega328P por separado, hay que tener en cuenta que no dispondrá del bootloader, por lo que deberemos incorporarle uno nosotros “a mano” para hacer uso de él a partir de entonces, o bien no utilizar nunca ningún bootloader y cargar entonces siempre nuestros programas a la memoria Flash directamente. En ambos casos, el procedimiento requiere el uso de un aparato específico (en concreto, lo que se llama un “programador ISP” –In System Programmer–) que debemos adquirir aparte. Este aparato se ha de conectar por un lado a nuestro computador y por otro a la placa Arduino, y suple la ausencia de bootloader haciendo de intermediario entre nuestro entorno de desarrollo y la memoria Flash del microcontrolador. Por lo tanto, podemos resumir diciendo que el gestor de arranque es el elemento que permite programar nuestro Arduino directamente con un simple cable USB y nada más.

Por conveniencia, dentro del paquete instalador del entorno de desarrollo de Arduino (descargable de su web oficial, para más detalles ver el capítulo siguiente), se distribuyen además copias exactas bit a bit de los bootloaders oficiales que vienen grabados en los diferentes microcontroladores Arduino. Estas copias exactas son ficheros con extensión “.hex” que tienen un formato interno llamado “Intel Hex Format”. Para el uso normal de nuestra placa no necesitamos para nada estos ficheros “.hex”, pero si dispusiéramos de un programador ISP y en algún momento tuviéramos que “reponer” un bootloader dañado (o bien grabar un bootloader a algún microcontrolador que no tuviera ninguno), Arduino nos ofrece estos ficheros para cargarlos en la memoria Flash de nuestro microcontrolador siempre que queramos.

El formato Intel Hex Format es el utilizado por todos los chips AVR para almacenar contenido en sus memorias Flash, por lo que hay que aclarar que no solamente los bootloaders son alojados internamente de esta forma en la memoria Flash, sino que todos nuestros propios programas que escribamos en el entorno de desarrollo también serán alojados allí en formato “.hex” (aunque de estos detalles no nos debemos preocupar por ahora).

Evidentemente, los bootloaders Arduino también son software libre, por lo que al igual que ocurre con el entorno de programación Arduino, siempre tendremos disponible su código fuente (escrito en lenguaje C) para poder conocer cómo funciona internamente e incluso para poderlo modificar, si así se estima oportuno

Crea un blog o un sitio web gratuitos con WordPress.com.

Subir ↑

A %d blogueros les gusta esto: