domingo, 15 de febrero de 2015

TELECOMUNICACIONES

Bootloader

Introducción

De forma genérica un bootloader (cargador de arranque) es un programa sencillo que no tiene la totalidad de las funcionalidades para operar un sistema y que está diseñado para preparar todo lo que necesita el programa principal para ejecutarse o para actualizarse. Es capaz de cargar el programa principal propiamente dicho y transferirle el control, así como permitir su actualización.
Un sistema con bootloader permite que sea fácilmente reprogramable, ya sea en producción o en servicio.
Reside en una memoria no volatil, esto es, que no pierde su contenido aunque se desconecte la alimentación, en las que sólo se escribe para actualizar la versión de su contenido (normalmente son de tipo Flash). Es siempre la primera aplicación que se ejecuta después de un reinicio y decide si la aplicación principal está lista para iniciar su ejecución o no y si se procede a realizar una actualización. El beneficio de tener un bootloader es principalmente permitir la reprogramación del sistema.

Firmware

A la actualización del programa principal de un sistema microprogramable embebido (que gobierna y forma parte integral de un sistema electrónico) se le denomina actualización del firmware.
El firmware o programación en firme, es un bloque de instrucciones de programa para propósitos específicos, grabado en una memoria de tipo no volátil (ROM, EEPROM, flash,...), que establece la lógica de más bajo nivel que controla los circuitos electrónicos de un dispositivo de cualquier tipo. Al estar integrado en la electrónica del dispositivo es en parte hardware, pero también es software, ya que proporciona lógica y se dispone en algún tipo de lenguaje de programación. Funcionalmente, el firmware es el intermediario (interfaz) entre las órdenes externas que recibe el dispositivo y su electrónica, ya que es el encargado de controlar a ésta última para ejecutar correctamente dichas órdenes externas.
El término firmware ha evolucionado popularmente para significar casi cualquier contenido programable de un dispositivo hardware residente en una memoria no volatil, no sólo código máquina para dispositivos de lógica programable, cargadores de arranque (bootloader), o aplicaciones especializadas, sino también configuraciones y datos para los circuitos integrados tipo PLD o para aplicaciones específicas (ASICs). Un ejemplo de ASIC sería un c.i. que encarga una compañía a un fabricante de semiconductores para crear un decodificador de audio para sus reproductores MP3. Ver Dispositivos PLD y ASIC
El firmware, como antes se indicó al hablar del bootloader, reside en memorias no volátiles. Si no es actualizable estará en memorias o c.i.s de sólo lectura. Si es actualizable sólo se escribe en ellas para actualizar la versión de su contenido. En este caso suelen utilizarse memorias de tipo flash, independientes o formando parte de un c.i. con mas elementos.

Actualización del firmware

Existe una gran cantidad de dispositivos electrónicos que cuentan con un firmware actualizable. En primer lugar pueden actualizarse en producción, esto garantiza que los dispositivos se colocan en el mercado con la última versión disponible, posteriormente pueden actualizarse por medio de un servicio técnico o incluso por el usuario final.
Hasta mediados de los años 1990 el procedimiento típico para actualizar un firmware a una nueva versión era reemplazar el medio de almacenamiento que contenía el firmware, usualmente un chip de memoria ROM o EPROM enchufado en un zócalo. Hoy en día este procedimiento no es habitual ya que los fabricantes han añadido un bootloader que permite grabar las nuevas instrucciones en la misma memoria, de tipo flash, haciendo de la actualización un proceso mucho más cómodo y dinámico.
Dependiendo del equipo puede necesitarse un PC para la actualización y una conexión a través de un puerto serie, RS232 o USB. En otros casos puede actualizarse a través de una conexión de red, por cable o inalámbrica, incluso utilizándo servidores en Internet. En otros casos el dispositivo puede contar con un puerto USB HOST y la actualización del firmware realizarse a través de un pendrive.
Aún así el proceso de actualización de un firmware hay que realizarlo con mucho cuidado, ya que al ser un componente vital, cualquier fallo puede dejar al sistema inservible. Por ejemplo, un fallo de alimentación a mitad del proceso de actualización impediría la carga completa del código que gobierna el sistema, quizá incluso la carga de una modificación del bootloader que contiene el código que se encarga de actualizar el firmware, así que no podríamos actualizarlo de nuevo ni el sistema podría arrancar, debido a una corrupción del código del bootloader. Por lo tanto el sistema no volvería a funcionar. La única solución sería reprogramar la memoria con el bootloader mediante un programador hardware, lo que puede complicarse si el circuito integrado es de tipo SMD y está soldado a la PCB.

Ejemplos de firmware

Encontramos firmware en memorias no volátiles de sistemas de diversos dispositivos periféricos de un ordenador, como en monitores de video, unidades de disco, impresoras, etc., pero también en los propios microprocesadores, c.i.s de memoria principal y en general en cualquier circuito integrado.
El programa BIOS de un PC es un firmware cuyo propósito es activar la máquina desde su encendido y preparar el entorno para la instalación o ejecución de un sistema operativo complejo, así como responder a otros eventos externos (como por ejemplo el teclado) y al intercambio de órdenes entre distintos componentes del ordenador.
Relación de ejemplos:
  • Sistemas de control domésticos de "línea blanca" como una lavadora, un microondas, un frigorífico, un lavavajillas o industriales como un autómata programable o un regulador de velocidad de un motor eléctrico.
  • Sistemas de control domésticos de "línea marrón ", como el control de sonido, video y lista de canales en televisores modernos, TDTs, reproductores DVD y HD, equipos de música (control y c.i.s procesadores digitales de audio) ,videoconsolas, cámaras fotográficas o de video, etc.
  • En ordenadores: BIOS de PCs, EFI de máquinas Mac OS X basadas en Intel, Open Firmware, usado por ordenadores de Sun Microsystems, ARCS, usado en ordenadores de Silicon Graphics, etc.
  • Reproductores de música portátiles (MP3). Las actualizaciones del firmware agregan incluso nuevos formatos de archivos de reproducción de sonido (codecs) actualizaciones del GUI e incluso de la vida de la batería.
  • Teléfonos móviles. La mayoría de los teléfonos móviles tienen un firmware actualizable. Pueden incluso ser actualizados para mejorar la recepción o la calidad de sonido. La mayoria de las grandes empresas brindan programas gratuitos para la actualización del firmware por partel del cliente final.
  • Automóviles. Desde 1996 la mayoría de los automóviles han empleado un ordenador de a bordo y varios sensores para detectar problemas mecánicos. Los vehículos modernos emplean sistemas controlados por microprocesador, por ejemplo para el ABS o los sistemas de control del motor, de la transmisión, etc. El conductor puede también recibir información mientras conduce, como por ejemplo lecturas en tiempo real de la economía del combustible y de la presión de los neumáticos. La mayoría del firmware del vehículo puede ser actualizado en un distribuidor local autorizado.
  • Dispositivos de electrónica de red, como router o puntos de acceso WiFi.
Cuando tengamos la posibilidad de actualizar un firmware, aunque sea una versión oficial, por ejemplo en un móvil, antes de realizar cualquier modificación en el equipo, es importante verificar que no se viole la garantía del fabricante o derechos de autor.

Hackeando el firmware

A veces una nueva o modificada versión no oficial de un firmware es creada por terceros para proporcionar nuevas características o para abrir funcionalidades ocultas o restringidas. Se hace con reproductores de audio digital, cámaras digitales, enrutadores inalámbricos (por ejemplo para que emitan con mas potencia), consolas de videojuegos, receptores de TDT, decodificadores de televisión, motores de auromóviles (saltanso por ejemplo límites de potencia a costa de mayores consumos o el incumplimiento de la normativa sobre emisión de gases), etc. Hay que tener en cuenta que en la mayoría de los casos esta "actualización" puede vulnerar derechos y ser ilegal.
Muchos de los firmwares almacenados en memoria no volatil están protegidos por derechos de autor.

Bootloader en el PIC

Mediante un bootloader podemos actualizar el programa o firmware de un PIC sin necesidad de utilizar un programador específico, a través de la conexión de un puerto del PC con un puerto del PIC (puerto serie RS232 o USB).
Para lograrlo, ademas de disponer de un software adecuado en el PC, se debe programar previamente al PIC cargándole un programa bootloader que permita por si mismo modificar la memoria de programa, manejar el flujo de información entre el PC y el PIC y finalmente lanzar la aplicación principal del PIC.
Siempre queda que es necesario programar el PIC la primera vez para cargar el bootloader mediante un programador hardware. Por tanto el bootloader es útil para actualizar el programa de aplicación del microcontrolador no para programar un PIC virgen o borrado.
Lógicamente el bootloader consume un cierto porcentaje de flash y RAM y no todos los PIC lo soportan. Hay que utilizar un modelo con suficiente memoria, donde el programa pueda modificarse a sí mismo y que cuente con puertos hardware serie RS232 o USB. El PIC16F84A no cumple con estos requisitos . Si lo hace, por ejemplo, el PIC16F876A o el PIC16F886, donde típicamente ocupa unos 256 bytes de memoria.

Bootloader y boostrap. Funcionamiento típico

Para evitar confusiones, a partir de ahora llamaremos bootloader al sistema de cargador de arranque en general y al programa en el PC en particular. Llamaremosboostrap al programa que implementa el cargador de arranque en el PIC.
Una vez programado el boostrap en el PIC, se trata de transferir o después actualizar, el programa de aplicación principal .hex desde el PC hasta el PIC, por ejemplo a través el puerto serie o el usb y así directamente el PIC se entiende con el PC sin necesidad de utilizar un programador específico.
En la mayoría de los tipos, el boostrap se carga al final de la memoria de programa, dejando libre lo anterior para el programa principal
El boostrap dirije el flujo de información según el estado en que se encuentra el PIC al inicio (esto es, tras un reset). Si al iniciarse el PIC están conectados PIC y PC y activo el bootloader del PC, estonces se graba el programa que entra en las primeras posiciones de la memoria de programa, del PIC sobreescribiendo lo que hubiese, por supuesto sin llegar a la posición donde está el boostrap. Después cede el control a la aplicación principal que funcionará normalmente. Si al inicio no se dan las condiciones anteriores, el boostrap, después de un tiempo (por ejemplo 0,2 segundos) lee el contenido de la memoria: si esta contiene un programa le cede el control y se ejecutará normalmente, si está vacía no hará nada.
En definitiva el bootloader es ideal para la programación in-circuit, sin tener que retirar el PIC de la aplicación ni complicarnos con la programación ICSP con programadores específicos.

Implementación física y conclusión

Para la implementación física básica no hay que modificar excesivamente el circuito de la aplicación ni tomar precauciones especiales como ocurre con la programación ICSP.
Además, en la mayoría de los casos no hay que adaptar los programas que ya tengamos para descargarlos mediante bootloader, sino que pueden grabarse tal cual.

No hay comentarios:

Publicar un comentario