Vous êtes sur la page 1sur 12

BootLoader USB

Multiplataforma para
el PIC18F4550


Implementacin de un BootLoader para el PIC18F4550 con conexin USB
utilizando la clase CDC (Communications Device Class) y desarrollo de la
aplicacin de escritorio en un entorno Multiplataforma que permita la carga de
programas de usuario desde PCs con diferentes Sistemas Operativos.

2011
Biblioman
www.AquiHayApuntes.com
28/01/2011
BootLoader USB Multiplataforma para el PIC18F4550

Biblioman www.AquiHayApuntes.com Pgina 2

En este artculo trataremos sobre como implementar un BootLoader con conexin USB para
PIC18f4550. El BootLader se comunicar con una aplicacin de escritorio Multiplataforma para que lo
podamos utilizar desde el Sistema Operativo que deseemos.
Qu es un BootLoader?
Un BootLoader para Microcontroladores se puede definir como un programa residente en el
Microcontrolador (en este caso un PIC) que facilita la carga de los programas del usuario.
El BootLoader hay que programarlo en el PIC de forma convencional a travs de un programador
externo como el ICD-U64, ICD3, PICkit 3, etc. Una vez programado el BootLoader la carga de los
programas de usuario se hacen directamente a travs de un canal de comunicacin, este canal puede
ser el puerto serie, paralelo o USB de nuestro ordenador, en este caso el archivo .HEX se transfiere al
PIC a travs de una pequea aplicacin de escritorio que hace de interfaz entre el PC y el firmware
del Microcontrolador, pero tambin se suelen utilizar otros buses de comunicacin como el bus
CAM, SPI, I2C, etc.
Ventajas de utilizar un BootLoader
Los BootLoaders llevan ya tiempo utilizndose en el mundo de los Microcontroladores y su uso ha
sido fundamental en el xito de muchos proyectos populares como: Arduino, Pinguino, Netduino,
etc. Estos proyectos basan su xito en facilitar al usuario una plataforma econmica con la que
empezar a programar los Microcontroladores y para ello es fundamental el abaratar costes, como el
no tener que utilizar un programador externo para cargar las aplicaciones de usuario. Estas placas de
desarrollo vienen ya con el Bootloader cargado en la memoria flash del PIC, por lo que no se necesita
de ningn Hardware adicional para empezar a programar el Microcontrolador insertado en la placa
de desarrollo.
Pero esta no es la nica ventaja de utilizar un BootLoader, otra ventaja la tenemos en que podemos
actualizar el programa de usuario cargado en el Microcontrolador de manera fcil y sin necesidad de
sacar el Micro fuera de la placa donde est montado. Por ejemplo un mdulo de control instalado en
un automvil que utilice Microcontroladores no se desmonta para actualizar su software, su
actualizacin se realiza a travs de puntos de control (SetPoints) accesibles por el tcnico de
mantenimiento y que se comunican con la unidad de control a travs de un canal de comunicacin
como el bus CAN (muy utilizado en la industria automovilstica).
Inconvenientes
El inconveniente principal e inevitable de utilizar un BootLoader, ya podis imaginar cual es, el gasto
de memoria ROM que implica el tenerlo cargado en la memoria del PIC de forma permanente, pero
este no es el nico inconveniente que tenemos cuando utilizamos un BootLoader, la reubicacin en
memoria del vector o vectores de interrupcin (cuando sea necesario) provoca un incremento en la
latencia del Micro, de tal forma que cada vez que se produzca una interrupcin ser necesario
ejecutar dos instrucciones mas como mnimo para reubicar los vectores de interrupcin en las
nuevas posiciones de memoria.
BootLoader USB Multiplataforma para el PIC18F4550

Biblioman www.AquiHayApuntes.com Pgina 3

Si queremos utilizar debuggers en circuito como el ICD-U64 hay que tener en cuenta tambin el
rango de direcciones reservadas para cargar el programa de depuracin (normalmente registros de la
parte alta de la memoria ROM).
Lgicamente todo este tipo de inconvenientes est estrechamente relacionado con la ubicacin del
BootLoader (parte alta o baja de la memoria Flash), en el siguiente punto veremos algunas
consideraciones que nos pueden ayudar a determinar en qu posicin de la memoria cargar el
BootLoader.
Consideraciones de diseo
Una de las metas que debe perseguir el diseo de un Bootloader y que muchas veces es tema de
discusin, es que debe de ocupar el menor espacio posible en la memoria flash del Micro, sin
embargo esto es relativo y depende del canal de comunicacin que se utilice para cargar la aplicacin
de usuario en el Microcontrolador, por ejemplo: si utilizamos un Microcontrolador que implementa
el mdulo necesario para una conexin USB como el PIC18F4550 y queremos que el bootloader
utilice ese canal de comunicacin para cargar el programa de usuario, el firmware del Bootloader
debe de incluir el stack correspondiente a la comunicacin USB. Por lo tanto un Bootloader que
utilice como canal de comunicacin un puerto USB siempre ocupara mas memoria ROM que otro que
utilice un puerto COMM serie.
Otro tema que se tiene que tener en cuenta en el diseo del Bootloader es la proteccin de las
direcciones de memoria donde est cargado el BootLoader para evitar su sobre escritura. Esto se
puede hacer de dos formas: por software o por hardware.
Proteccin por software: cuando la proteccin es por software es el propio firmware del
BootLoader el que se tiene que encargar antes de escribir en la memoria flash un nuevo
programa de usuario que las direcciones implicadas en la operacin de escritura no
pertenezcan a las direcciones donde est guardado el propio BootLoader.
Proteccin por Hardware: algunos dispositivos pertenecientes a la familia PIC18 como el
PIC18F46J11 y otros, permiten la proteccin contra escritura de un nmero determinado de
registros de la parte baja de la memoria flash a travs de los fusibles de configuracin del
PIC. Sin embargo la mayora de dispositivos solo permiten la proteccin de escritura de los
registros del principio de la memoria Flash. Si queremos utilizar la proteccin por hardware
para estos dispositivos deberemos ubicar el BootLoader al principio de la flash, por contra si
utilizamos la parte alta de la memoria para cargar el bootloader tendremos el inconveniente
de tener que re direccionar el vector o vectores de interrupciones, con el incremento en la
latencia que ello implica.
Por tanto no existe una solucin nica para todos los casos, siempre depender de las caractersticas
del PIC a utilizar, del tipo de proteccin que queramos emplear, de si vamos a utilizar debuggers o
no, etc.



BootLoader USB Multiplataforma para el PIC18F4550

Biblioman www.AquiHayApuntes.com Pgina 4

Empezando con el BootLoader
El trabajo de disear un BootLoader para Microcontroladores que cargue la aplicacin de usuario a
travs de un puerto de comunicacin del PC se puede dividir en dos apartados, por un lado est el
diseo del propio BootLoader que tendremos que cargar en el Microcontrolador y por otro lado est
el diseo de la aplicacin de escritorio necesaria para poder enviarle el archivo .HEX al Bootloader.
En este ejemplo vamos a utilizar un BootLoader con conexin USB que utiliza la clase CDC
(Communications Device Class) para comunicarse con el PC, esta clase se caracteriza por crear un
puerto COMM virtual en el ordenador donde se conecta el dispositivo y no necesita la instalacin de
ningn driver en el Sistema Operativo para su funcionamiento (en Windows es necesario la
instalacin del archivo .INF).
La parte correspondiente al firmware del BootLoader de este tutorial est basado en el ejemplo
EX_USB_BOOTLOADER.C que trae el compilador de CCS y que podemos encontrar en el directorio
donde instalamos el compilador, si en la instalacin dejamos la opcin por defecto ese directorio ser
C:\Archivos de programa\PICC\Examples.
El principio de funcionamiento en que se basa un BootLoader para saber si debe de cargar una nueva
aplicacin de usuario o ejecutar la que en ese momento se encuentre en la memoria flash del PIC es
la siguiente: despus de un reset en el PIC el BootLoader espera la llegada de un evento que
determine qu accin ejecutar, ese evento puede ser provocado por Hardware (por ejemplo el
cambio de estado en un determinado PIN del PIC) o por Software (la llegada de un determinado
comando por un canal de comunicacin como la USART del PIC).
En este ejemplo utilizaremos la deteccin de un evento Hardware que consiste en chequear el
estado de la patilla RD0 del PIC, si est a nivel bajo el BootLoader proceder a cargar una nueva
aplicacin de usuario en la memoria ROM del PIC, si RD0 es diferente de cero (Nivel Alto) se
ejecutar la aplicacin de usuario que en ese momento tenga cargado el PIC.
En la figura de abajo se muestra un diagrama de estados de este escenario:


BootLoader USB Multiplataforma para el PIC18F4550

Biblioman www.AquiHayApuntes.com Pgina 5

Como hemos comentado antes el firmware del BotLoader se puede programar para que utilice los
registros de la parte alta o baja de la memoria flash del PIC, nosotros utilizaremos la parte baja de la
memoria ROM para ubicar all nuestro BootLoader y nos ahorraremos el tener que re direccionar los
vectores de interrupcin.
En realidad el trabajo en cuanto a programacin se refiere de hacer esto se reduce bastante si nos
ayudamos del Wizard que incorpora CCS. Segn se muestra en la figura de abajo con un solo clic de
ratn seleccionamos el lugar donde queremos ubicar el Bootloader y el asistente se encargar de
generar el cdigo necesario. Para ello genera un archivo que se llamar:
Nombre_del_Proyecto_bootloader.h incluyendo todo lo necesario para que el BootLoader trabaje en
la parte alta o baja de la memoria ROM segn hayamos elegido.


Una imagen ms detallada de como quedara mapeada la memoria ROM del PIC la tenis en la figura
de abajo. En ella se puede ver como el vector de reset ahora apunta al comienzo del programa del
BootLoader, este determinar segn sea el estado de RD0 si debe ejecutar la aplicacin de usuario
(RD0=1) guardada en memoria o cargar una nueva aplicacin de usuario (RD0=0).

BootLoader USB Multiplataforma para el PIC18F4550

Biblioman www.AquiHayApuntes.com Pgina 6




Diseo de la Aplicacin de escritorio
Una vez que tenemos programado el firmware del BootLoader en nuestro Pic necesitamos una
aplicacin de escritorio que nos permita enviarle el archivo .HEX a l, para ello tenemos dos
opciones:
Utilizar la aplicacin SIOW.exe que incorpora CCS y que podemos acceder a ella desde el
propio IDE de programacin seleccionando Tools-> Serial Port Monitor. Nos aparecer la
ventana de la figura de abajo en la que tendremos que pulsar sobre el icono Download
Software para seleccionar el archivo .HEX a cargar y envirselo al BootLoader.

BootLoader USB Multiplataforma para el PIC18F4550

Biblioman www.AquiHayApuntes.com Pgina 7

Disear nuestra propia aplicacin de escritorio, para ello hay que tener en cuenta que la
comunicacin entre el Bootloader cargado en el PIC y la aplicacin de escritorio debe de ser
bidireccional y que el protocolo de comunicacin serie debe de implementar un control de
flujo de datos por software. Esto debe de ser as ya que la velocidad en que la aplicacin
manda los datos al microcontrolador es mayor que la capacidad que tiene el BootLoader en
recibir esos datos, decodificarlos y grabarlos en la memoria Flash del PIC. Para ello el
BootLoader utiliza tres caracteres de control: ACK, XON y XOFF. Cada vez que el BootLoader
recibe una lnea de datos correcta enva un ACK, si el buffer de recepcin se llena enva un
XOFF para que la aplicacin de escritorio deje de enviar datos momentneamente, cuando
est listo de nuevo enviar un XON para que la aplicacin reanude la transmisin de datos.
Para el desarrollo de la aplicacin de escritorio se ha utilizado el lenguaje de programacin C++ a
travs del Framework QtCreator.
Qu es Qt?
Qt es un conjunto de libreras o bibliotecas que se caracterizan por ser independientes de la
plataforma donde se ejecutan y que nos permiten generar interfaces grficas (GUIs) para muchos
sistemas operativos (incluyendo sistemas embebidos) de forma rpida y sencilla. Qt fue creado por la
compaa Trolltech en el ao 1994 y vendida a Nokia en el ao 2008 donde continua su desarrollo, a
partir de la versin 4.5 existe una versin con licencia LGPL.
Originalmente Qt solo trabajaba con el lenguaje C++ pero actualmente existen mdulos (bindings)
para otros lenguajes como Python, Java, Perl, Ruby, PHP, etc.
Aplicaciones que han utilizado Qt para su desarrollo tenemos entre otras las siguientes: Google Earh,
Skype, VLC Media Player, Editores de texto como FocusWriter, Qt Creator, ect.
Qt Creator es un entorno de desarrollo integrado (IDE) de software libre y multiplataforma
desarrollado por Nokia y es con el que se ha realizado la aplicacin de escritorio para el BootLoader.
En las siguientes figuras se muestra el IDE trabajando en diferentes sistemas operativos:









BootLoader USB Multiplataforma para el PIC18F4550

Biblioman www.AquiHayApuntes.com Pgina 8

Windows:

Linux:


BootLoader USB Multiplataforma para el PIC18F4550

Biblioman www.AquiHayApuntes.com Pgina 9

Ventajas de utilizar Qt
Es un proyecto de Cdigo Abierto y gratuito, de libre distribucin.
Es Multiplataforma su cdigo se puede compilar en diferentes sistemas operativos:
Windows, Linux, MAC y sistemas embebidos como un telfono mvil, sin necesidad de hacer
cambios en el cdigo fuente.
La compilacin es a cdigo nativo con instrucciones mquina y no en cdigo intermedio, por
tanto la mquina cliente donde se ejecute la aplicacin no necesita la instalacin de ninguna
mquina virtual como en el caso de Java o .NET
Al utilizar C++ como lenguaje de programacin podemos acceder directamente a los puertos
del ordenador a travs de libreras, sin la necesidad de tener que utilizar libreras dinmicas
(.dll) de terceras partes.
Con Qt Creator tienes el mismo IDE para trabajar en diferentes sistemas operativos. Por
ejemplo la plataforma .NET se puede decir que es Multiplataforma gracias al proyecto
Mono, pero el IDE en Windows (Microsoft Visual Studio) es totalmente diferente al IDE para
Linux (MonoDevelop).
Qt Creator al igual que cualquier IDE moderno permite crear fcilmente interfaces grficas
por el mtodo de arrastrar y soltar componentes como botones, labels, textbox, etc. Adems
permite la depuracin visual de los programas por medio de la simulacin del programa paso
a paso, insercin de breakpoint, etc.
Inconvenientes
La verdad es que bajo mi punto de vista prcticamente no le veo inconvenientes, por citar algo decir
que para ejecutar las aplicaciones en un sistema que no tenga instaladas las libreras Qt se deben de
integrar en la carpeta del ejecutable todos los archivos necesarios que necesita QT para su ejecucin,
eso implica que una aplicacin de usuario por pequea que sea ocupar como mnimo unos 11
Megas aproximadamente. En este aspecto lo veo exactamente igual que RealBasic.
Para empezar a trabajar con Qt se necesitan dos pre-requisitos que son: saber programar en C++ y
conocer la tcnica de programacin orientada a objetos. De no conocerlos puede llegar a ser un poco
frustrante el inicio con Qt.
Creando una aplicacin de usuario para cargar con el BootLoader.
La nica condicin necesaria que tenemos que tener en cuenta en el cdigo de nuestra aplicacin de
usuario si queremos cargarla a travs del BootLoader es incluir el archivo de cabecera
usb_bootloader.h, este se encarga de re direccionar los vectores de interrupcin y de reset as como
de reservar el espacio en memoria utilizado por el BootLoader. Un ejemplo sencillo para comprobar
que el archivo es cargado en la ROM, podra ser el siguiente:




BootLoader USB Multiplataforma para el PIC18F4550

Biblioman www.AquiHayApuntes.com Pgina 10

///////////////////////////////////////////////////////////////////////////////////////////////////
// Ejemplo de Aplicacin de usuario para usar con el Bootloader //
// //
// www.AquiHayApuntes.com //
// //
//////////////////////////////////////////////////////////////////////////////////////////////////
#include <18F4550.h>
#fuses HSPLL,NOWDT,NOPROTECT,NOLVP,NODEBUG,USBDIV,PLL5,CPUDIV1,VREGEN
#use delay(clock=48000000)
//Archivo de cabecera necesario para trabajar con el Bootloader
#include "usb_bootloader.h"
void main(void)
{
while(true){
output_toggle(PIN_B7);
delay_ms(1000);
}
}
El archivo .HEX resultado de la compilacin es el que le enviaremos al BootLoader a travs de la
aplicacin de escritorio.
Nota: Si creamos una aplicacin que utilice USB la aplicacin debe de incluir su propio stack USB. El
stack del BootLoader es solo para l, ya que la aplicacin de usuario no puede acceder a las regiones
de memoria del BootLoader.
Ejecucin del programa en diferentes sistemas operativos


BootLoader USB Multiplataforma para el PIC18F4550

Biblioman www.AquiHayApuntes.com Pgina 11

Y un par de vdeos del BootLoader funcionando:
En Windows:

http://www.youtube.com/watch?v=L1K5TKjMJCw
En Linux:

http://www.youtube.com/watch?v=ncU0cdnGwhk
BootLoader USB Multiplataforma para el PIC18F4550

Biblioman www.AquiHayApuntes.com Pgina 12

En MAC:
Estn pendientes las pruebas en este sistema operativo, puedes seguir las
actualizaciones de este software en el siguiente hilo del foro de aquihayapuntes.com

Cualquier sugerencia, comentario o error que encuentres lo puedes postear tambin
en el mismo hilo.
Fuentes de Informacin
CCS Custom Computer Services
Qt
Qestserialport. Librera para acceso al puerto serie.
Otra librera acceso al puerto serie.
Aplicacin AN1310 de Microchip
Marcas registradas
Las marcas citadas en este artculo as como las imgenes procedentes de capturas de pantallas
pertenecen a sus respectivos propietarios su utilizacin en este artculo es con fines educativos y sin
nimo de lucro.
Licencia
Autor de este artculo: Biblioman
Versin: 1.01
Pgina Web: http:\\www.aquihayapuntes.com
Email: email.Biblioman@gmail.com
Los comentarios y conclusiones hechos en este artculo son personales y no se garantiza la veracidad
de los mismos por parte del autor, para una informacin ms amplia y precisa consultar las fuentes
citadas.
Este artculo esta bajo una licencia Creative Commons: Reconocimiento-No Comercial-Compartir
bajo la misma licencia.

Vous aimerez peut-être aussi