sábado, 27 de julio de 2024

Programar PIC16F con Bootloader


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
 
Conclusiones

Se 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