En esta entrada te enseñamos a configurar MPLAB X de manera que puedas grabar un PIC con bootlader directamente desde el IDE en el momento en el que se compila de manera satisfactoria un proyecto sin la necesidad de utilizar un programador para descargar el Hex. Esta técnica es utilizada por muchas herramientas de bajo costo, como las ya conocidas placas Arduino y las variantes que utilizan microcontroladores PIC como el Chipkit Uno32. De hecho, los tips que escribimos a continuación pueden utilizarse también para cargar programas realizados en MPLAB X a placas Chipkit Uno32 o a cualquier otra placa diseñada a medida basada en microcontroladores PIC.
En la portada del articulo: MPLABX ejecutando la herramienda de DS30 Loader en sistema operativo MAC OSX.
¿Que es un bootloader?
Un bootloader es una pieza de software que se incluye precargada en la memoria de un microcontrolador con el propósito de facilitar la descarga de nuevo firmware por medios convencionales como RS-232, USB, Tarjetas SD, etc. En vez de requerir un programador y hardware especializado.
En dispositivos terminados que salen al mercado, es especialmente útil cuando se requiere alguna actualización del firmware, de manera que el usuario final pueda llevar a cabo dichas actualizaciones sin requerir hardware adicional (un programador especializado como el PICKit, por ejemplo). Durante la fase de desarrollo y aprendizaje, un bootloader también puede ser de utilidad al evitar que se requiera un programador para realizar la carga del software experimental, lo cual supone un ahorro considerable para el estudiante o el aficionado que recién comienza.
Una desventaja del bootloader es que abarca espacio en la memoria flash del microcontrolador, reduciendo el espacio disponible para la aplicación final. Su uso también hace necesario tomar en cuenta otros aspectos sobre los recursos que son utilizados por dicho software, como el tiempo de arranque del programa, uso y configuración del puerto de comunicaciones, etc.

Requisitos para grabar un PIC mediante Bootloader
No todos los PIC soportan el uso de bootloader, los siguientes puntos deben considerarse para saber si un bootloader es adecuado o posible en nuestra aplicación:
- Para poder grabar un PIC con Bootloader es necesario que este soporte la escritura de la memoria Flash mediante software, es decir, requerimos que sea capaz de “autoprogramar” su memoria flash. La mayoría de los dispositivos PIC modernos tienen esta característica, sin embargo, algunos modelos que aún son populares en el mercado educativo como el PIC16F84 y el PIC16F628 no pueden utilizar un bootloader para actualizar su firmware, ya que no soportan la escrutura de memoria flash bajo el control del software. En este caso utilizaremos un PIC16F88 que es similar a los anteriores y podemos instalarle un Bootloader.
- Es necesario también que el dispositivo que aloja el bootloader disponga de memoria suficiente para la aplicación, ya que el bootloader ocupa una cantidad de memoria flash que puede hacer que la aplicación del usuario no quepa, siempre hay que considerar esto.
- También vamos a requerir un programador de PICs para cargar el bootloader al PIC que se encuentra en blanco.
- Tener el entorno de software listo MPLAB instalado, bootloader descargado y listo, etc.
Preparando el software del bootloader
Vamos a asumir que ya tenemos el hex del bootloader listo (hemos ensamblado el código fuente) y además lo hemos programado de alguna manera a nuestro PIC. Si tienes alguna duda te recomendamos revisar el manual o documentación del bootlader ya que la preparación del bootloader podría extenderse lo suficiente como para requerir otro artículo. Si hemos adquirido una tarjeta de desarrollo para PIC, puede ser que este paso ya lo hayan hecho por nosotros, incluyendo la grabación del bootloader.
El archivoZIP que hemos descargado desde el sitio web de ds30 loader contiene las herramientas de linea de comandos e interfaz gráfica que se comunican con el bootloader en el PIC. La apariencia de dichas aplicaciones se muestra a continuación:
NOTA SOBRE LA HERRAMIENTA DE LINEA DE COMANDOS:
Para este tutorial utilizaremos la herramienta de linea de comandos, ya que MPLAB la invocará de manera automática para realizar la carga del código a la memoria del microcontrolador.
Hay que descomprimir la utilidad “ds30LoaderConsole.exe” en una ubicación de fácil acceso en el disco duro de nuestra PC. Por ejemplo, podemos colocarla en “C:\ds30loader”
Conviene que estudiemos los parámetros que recibe este programa a través de la linea de comandos, para esto basta escribir ds30loader.exe y el programa nos mostrará todos los parámetros y configuraciones que acepta. No es nuestra intención cubrir cada uno de ellos, sin embargo, como ya dijimos es conveniente comprender el funcionamiento básico de la herramienta para los pasos siguientes.
Procedimiento para grabar un PIC con Bootloader desde MPLAB X
Una vez que descomprimimos la herramienta de ds30 loader en una ubicación fácil de recordar, procederemos a configurar MPLAB para que cargue el Hex generado por nuestros proyectos directamente al microcontrolador. Es necesario que ya estemos trabajando con un proyecto creado en MPLAB X.
- Accedemos a las propiedades de dicho proyecto (haciendo click derecho sobre nuestro proyecto en el panel de proyectos) y luego en el menú contextual que aparece, hacemos click en “Properties”
- En la ventana de Propiedades del proyecto (Project Properties), hacemos click en el apartado de “Bulding” en la lista de la izquierda. Esta ventana permite definir programas que se ejecutarán antes y después de que se haya completado la compilación del código fuente. En esta ventana es necesario activar el checkbox cuya leyenda es “Execute this line after build” y además escribir en el campo correspondiente la ruta completa donde se ubica la herramienta de linea de comandos de ds30 loader y sus parámetros. En la siguiente imágen se ve como ha quedado configurado MPLAB X. En la siguiente imágen podemos apreciar como quedó configurado MPLAB:
- Para conocer el significado de cada una de las opciones que debemos pasar a la herramienta de linea de comandos, basta con colocarnos el el directorio donde la descomprimimos y ejecutarla sin ningún parámetro (esto se hace usando la consola del sistema). La herramienta de consola nos mostrará un mensaje de ayuda indicándonos cuales son los parámetros obligatorios que requiere para comunicarse con el bootloader en el microcontrolador. La salida del programa es la siguiente:
El comando completo en Windows nos quedó de la siguiente forma:
1 | C:\ds30loader\ds30LoaderConsole.exe -p -o -n -d="PIC16F88" -k="COM1" -r="9600" -f=${ImagePath} |
El puerto serie en nuestro caso es “COM1”, pero según la configuración del sistema en donde ejecutemos MPLAB, este puede variar. De igual manera, debemos tener cuidado en la velocidad de bits (baudrate) que estamos utilizando y también en pasarle como parámetro a ds30 loader el dispositivo PIC que estamos utilizando (PIC16F88 en este caso). En MAC OS y Linux también podemos utilizar la herramienta de ds30 Loader pero necesitamos que el entorno de ejecución de Mono este instalado. Para MAC, el comando a ejecutar quedó de la siguiente forma.
1 | mono /Users/Jesus/Desktop/ds30Loader/bin/ds30LoaderConsole.exe -p -o -n -d="PIC16F88" -k="/dev/cu.usbserial" -r="9600" -f=${ImagePath} |
De nuevo hay que revisar todos los parámetros: puerto serie, baudrate y dispositivo. Cuando estemos listos, hacemos click en el botón Ok en el cuadro de dialogo de Propiedades del Proyecto.
Compilar el proyecto y Grabar un PIC con Bootloader.
Una vez que hayamos realizado los pasos anteriores ya podemos hacer un primer intento de compilar el proyecto y grabar el Hex resultante usando el bootloader. Si el proyecto se compila de manera satisfactoria, el siguiente paso que realiza el IDE es la invocación de la herramienta ds30LoaderConsole.exe. La herramienta devolverá mensajes de estado en la consola de salida de de MPLAB X mientras intenta comunicarse con el bootloader en el PIC.
Si la comunicación es satisfactoria, deberiamos ver algo similar a lo siguiente en la consola de MPLAB.
Circuito de Interfaz Rs232 para el bootloader.
El circuito de interfaz que hemos utilizado es un circuito bastante común. Podemos utilizar un cable RS-232 o también se puede pensar en un covertidor USB a TTL serial. En la siguiente figura mostramos el diagrama que utilizamos para hacer la interfaz RS-232 en nuestra tarjeta entrenadora. El circuito es para un ST3232 (MAX3232) que funciona a con sistemas de 3.3 volts. Para el MAX232, que es más comercial, solamente se deben cambiar los capacitores por electrolíticos de 1 uF.