domingo, 24 de febrero de 2013

Bootloader - AN1310

En esta entrada voy a hablar del Bootloader que utilizo para programar mi PIC16F88.

Un Bootloader es una porción de código estática dentro del pic que se ejecuta antes del código que nosotros programaremos. Cuando se activa permite comunicarse con la PC para realizar actualizaciones del programa que debe ejecutar el pic. Esto permite que el pic se programe a sí mismo sin necesidad de un grabador de pics.

Este código generalmente se encuentra en la parte más alta de la memoria de programa y no debe ser modificado por el programa que nosotros hagamos

¿Cuál es la ventaja de utilizar un bootloader? La ventaja más significativa es que podemos construir un circuito con un código base, soldar todos sus componentes y a medida que desarrollamos el software o descubrimos bugs, mediante el bootloader le actualizamos su firmware.

Como desventaja, hay menos espacio en el chip para nuestro código.

En la siguiente imagen podemos ver de forma simple cómo se ve un pic normal y uno con bootloader:




AN1310


Hay varios Bootloader disponibles para el pic16f88 y hasta podríamos hacernos el propio pero en lugar de eso vamos a utilizar el que nos provee Microchip, el AN1310.

El AN1310 es un Bootloader bastante pesado ya que ocupa unas 1000 palabras de programa (el PIC16F88 tiene 4096 palabras). Está escrito en assembler y debemos compilarlo para cada tipo de pic en particular ya que cambian las posiciones de memoria.

Para descargarlo debemos ir a la siguiente dirección:

Este es el esquema que debe tener el circuito que hagamos para conectar nuestro pic:


Para el PIC 16F88 en lugar +3.3V utilizaremos los +5V que venimos usando en los posts anteriores.

Para explicarlo brevemente, se utilizan las líneas RXD y TXD del puerto serial para cargar los datos al pic mediante la interfaz USART mientras que se utiliza la línea de control RTS para provocar un "Reset" del pic.

Este reset por software es muy útil para que luego de cargar un programa se pueda probar o frenar el mismo. 

Interfaz del programa:


Al conectar nuestro pic mediante el circuito presentado anteriormente al puerto serial de la pc y hacer click en el botón "bootloader Mode" (el cuadrado rojo), y si todo está conectado ok, veremos lo siguiente:


Cargaremos el mismo programa que vengo haciendo en los primeros posts con algunos cambios que mostraré más adelante y haciendo click en write device pasará el programa a nuestro pics pocos segundos:


Luego de cargar el programa hacemos click en el botón "Run application firmware" (el verde) y podremos ver nuestro programa funcionado.

En el manual de este bootloader podremos encontrar muchas más opciones.

Configuración que debe tener nuestro programa para que funcione correctamente:


Para que un programa hecho en MPLABX cargue correctamente utilizando el bootloader debemos modificar las opciones del linker de XC8 para que no sobreescriba los sectores de memoria reservados:


Para el PIC 16F88 las opciones son: --ROM=default,-e40-fff --RAM=default,-7E-7F

Lo que estamos indicándole es: Para la memoria rom usá el espacio default excepto las posiciones entre E40 y FFF. Para la memoria RAM usá el espacio default excepto las posiciones entre 7E y 7F.

Acabo de subir a GitHub el proyecto PIC16F88_03_TestBootLoader con el programa del led intermitente más la configuración anterior y el proyecto PIC16F88_04_Bootloader_20Mhz con la configuración necesaria para compilar el bootloader. Hay que tener en cuenta que el bootloader se compila en assembler así que tienen que tener habilitado el compilador MPASMX que se encuentra en la carpeta de instalación del MPLABX.

Repositorio:

Saludos,


Fuentes:
TinyPIC - http://www.etc.ugal.ro/cchiculita/software/picbootloader.htm
AN1310 - http://ww1.microchip.com/downloads/en/AppNotes/01310a.pdf


5 comentarios:

  1. Este comentario ha sido eliminado por el autor.

    ResponderEliminar
  2. Amigo muchas gracias por tus aportes me han servido mucho hasta el momento, estuve mirando lo del bootloader y me surgieron unas dudas en la ultima parte.
    es que no entiendo una cosa...
    dejaste unas carpetas en la pagina GitHub, en cada carpeta hay unos archivos o mejor dicho unos códigos, la pregunta es que debo hacer con todo eso. o que es lo que debo tomar de ahí?
    Gracias amigo, espero tu respuesta mi correo es junal810026@gmail.com

    ResponderEliminar
    Respuestas
    1. Hola. Lo que está en las carpetas de GitHub son proyectos de MPLABX. Cada carpeta es un ejemplo de programa distinto. En otro posts está explicado cómo utilizarlo:

      http://programandopics.blogspot.com.ar/2012/09/como-configurar-mplabx-para-compilar.html
      http://programandopics.blogspot.com.ar/2012/09/primer-proyecto-en-xc8-parte-1-creacion.html
      Saludos,

      Eliminar
    2. Lo que sucede es que estoy diseñando un circuito con un PIC16F88 pero yo programo en un compilador llamado (PIC C) no se si lo conoscas y quisiera saber si desde ahi pueda cargar un programa al PIC16F88 por medio del bootloader, si me pudieras colaborar en decirme los pasos que deberia seguir me seria muy util.
      Gracias Amigo.

      Eliminar
    3. Hola. Yo únicamente programé con MPLABX así que no sabría decirte. En principio supongo que se debería poder hacer. Tendrías que encontrar la forma de indicarle al compilador de PIC C que no pise determinadas zonas de la memoria y luego pasarle ese programa compilado (.hex) al cargador del bootloader (AN1320).

      Eliminar

Related Posts Plugin for WordPress, Blogger...