Programación de PIC16 con TinyBootloader
Que tal, soy Pablo y te doy la bienvenida por visitar mi blog relacionado
con la programación de microcontroladores PIC, mencionar que estoy
abierto a cualquier critica constructiva con referencia a esta
publicación.
En
esta entrada quiero mostrar como utilizar un cargador o bootloader en los microcontroladores PIC16F88x, si bien es posible adaptar el código fuente a una gran variedad de modelos PIC16F y PIC18F, solo considerare esos modelos porque son los que habitualmente utilizo en los ejemplos publicados en este blog. Entre las herramientas que utilizaremos están:
- Un programador para PIC, que permite grabar el bootloader
- Una cable de interfaz o adaptador USB-UART
- El software del bootloader <TinyBootloader> para Windows o la variante <TinyBootloader> para linux.
- Software de desarrollo MPLABx cualquier versión.
Introducción
Un bootloader es un programa reducido que permite transferir el código de nuestro programa al microcontrolador MCU, esto sin necesidad de utilizar grabador como el pickit, para llevar a cabo esta transferencia se utiliza uno de los puertos de comunicación serial uart o usb del MCU. La ventaja que conlleva utilizar un bootloader es sobre todo facilitar la actualización del código o firmware de un circuito basado en MCU, utilizando una PC.
Un bootloader o cargador aprovecha la característica que tienen los MCU de modificar su memoria de programa en tiempo de ejecución, en el caso de los PIC esta característica la denominan Self-Write Program Memory, no todos los modelos poseen esta opción, pero gracias a esto el código bootloader que reside en la memoria del PIC, puede transferir cada byte de un nuevo firmware desde una PC hasta la memoria de programa (Actualización)
Existen varios cargadores bootloader disponibles para PIC, cada uno con características propias en cuanto a soporte y requerimientos de memoria, para nuestro caso utilizaremos el conocido TinyBooloader, siendo uno los de aspectos mas relevantes su tamaño, que ocupar solo 100 posiciones de memoria y es adaptable a varios modelos PIC, este cargador utiliza el modulo UART de comunicación serial.
|
Fig1. Software del Cargador Tiny Bootloader
|
Encontrara mayor información sobre las características de esta cargador y una clara descripción de su funcionamiento en la pagina de su autor: Claudiu Chiculita, abajo dejo el enlace
En su pagina también encontrara una lista de PIC's que han sido probados con TinyBootloader, y una tabla comparativa con otros cargadores.
Desarrollo
Para hacer uso del cargador TinyBootloader en nuestro PIC16F, debemos descargar el software que es gratuito y además posee el código fuente del cargador:
<Enlace para descarga de TinyBootloader>
Una vez descargado este software, que es un archivo zip, lo descomprimiremos en un carpeta y notaremos que en su estructura están el programa ejecutable, las fuentes de cargador y algunos ficheros boot generados, utilizaremos un programador Pickit3 para cargar un bootloader en la memoria del PIC. Hay dos caminos para abordar este punto:
Utilizar un firmware bootloader(ficheros boot) generado para un modelo de PIC, con la frecuencia del oscilador y velocidad de comunicación serial, preestablecidos.
Compilar el código fuente, para ajustar al modelo de PIC, la frecuencia del oscilador y velocidad de comunicación serial que necesitamos en nuestro circuito, para esto recomiendo utilizar la antigua versión MPLAB, dado que el código fuente esta escrito en este IDE.
Como verán la primera opción es la forma mas simple de implementar el cargador, porque solo necesitamos descargar el firmware bootloader para nuestro modelo de PIC, por eso dejare una lista de enlace para los PIC16F887 y PIC16F886 que utilizo en los ejemplos de este blog:
Los pasos para grabar el bootloader en el PIC, con nuestro programador Pickit3 o cualquier otro que se disponga, son primero realizar la conexión necesaria del programador al PIC, respetando las indicaciones de la programación en circuito <ICSP>, luego utilizando el software del programador en mi caso MPLABX IPE pasamos el bootloader al PIC, como se ve en las figura 2 y 3.
|
Fig2. Carga del Bootloader en Tarjeta PIC16F
|
|
Fig2. Grabando el bootloader en el PIC
|
Una vez cargado el bootloader en el PIC, conectamos el adaptador USB-UART al puerto de nuestro ordenador y el otro extremo del adaptador a los pines RXD, TXD del PIC en forma cruzada, así mismo se deberán conectar las lineas de GND en ambos extremos, como se observa en el diagrama que muestra la figura 3. El adaptador que utilizare sera el CP2102 de Silicon Labs, el cual debe ser reconocido por el sistema operativo, si usas Windows el asistente iniciara el proceso de instalación de manera automática y como resulta se asignara un serial COMxx en la lista de dispositivos. En caso de que el asistente de instalación no funcione deberá proceder a la instalación manual, para lo cual debe descargar del driver desde la pagina que provee el fabricante.
|
Fig3. Conexión USB-UART al PIC
|
Una vez completada la instalación del controlador para el adaptador USB-UART, abrimos el programa TinyBootloader, seleccionamos el puerto COMx asignado en la instalación y la velocidad de comunicación.
Luego presionado el boton [CheckPIC] verificamos
el reconocimiento del PIC, este paso nos
sirve también para confirmar la comunicación correcta entre la
aplicación y el bootloader del PIC. Para llevar a cabo esta prueba es importante mencionar que el PIC debe estar en modo boot, por lo tanto deberá reiniciarlo.
(Nota) Cuando suministra energía al PIC, este se mantiene en modo bootloader por unos 5 segundos, y luego pasara a modo normal, la verificación [CheckPIC] y actualización [Write Flash] solo puede llevarse a cabo en modo bootloader
|
Fig4. Ajuste y verificación TinyBootloader
|
Ya en este punto solo resta cargar nuestro código al PIC, seleccionando el archivo hex desde la carpeta de nuestro proyecto MPLABX, y luego presionamos el botón de reinicio del PIC, para después de un lapso no mayor a los 5 segundos presionar el botón [Write Flash]. La trasferencia demorar unos segundos dependiendo del tamaño del archivo hex, finalmente nuestro PIC quedara actualizado y listo para funcionar.
|
Fig5. Programación del PIC con TinyBootloader
|
ConclusionesSe ha comprobado el funcionamiento del cargador TinyBootloader de forma satisfactoria, utilizando programas básicos para el PIC16F887, si bien la tabla provista por el auto indica pruebas correctas para otros modelos, queda pendiente ir actualizando esta informacion conforme realice pruebas de este cargador en otros modelos de PIC, como recomendación es importante considerar los siguiente aspectos:
- TinyBootloader
no permite realizar cambios a los fusibles de PIC, ya que estos valores
se establecen al momento de programar el bootloader vía ICSP.
- Como
el bootloader se aloja en las ultimas 100 posiciones de la memoria
Flash del PIC, es necesario que el compilador reserve estas posiciones
para su uso. En el caso de XC8 se adicionara al linker dentro de MPLABX
los siguientes parámetros --ROM=default,-1F80-1FFF.
Donde los últimos valores resaltados, representan el rango de
posiciones reservadas. PIC16F887 Flash 8K posiciones, 0000h-1FFFh,
ultimas posiciones 1F80-1FFF.
|
Fig6. Configuración Proyecto MPLABX para bootloader |
Sin
mas que mencionar agradezco tu visita al blog y espero que el ejemplo
visto pueda ser útil en tu formación y el proyecto que desarrollas.
Atte. Pablo Zárate Arancibia
email: pablinza@me.com / pablinzte@gmail.com, @pablinzar
Santa Cruz de la Sierra - Bolivia
No hay comentarios.:
Publicar un comentario