Como montar un Bootloader en tu PIC

 

Bueno bueno, ya era hora de que publicáramos algo heeee!!!, ok, hoy les traigo una pequeña guía para que puedan montar un bootloader en sus PIC (o al menos en los que sean compatibles con el bootloader), pero para ello, debemos saber de manera muy muy breve, que es?  y para que sirve? un bootlader.

Sencillo, un bootloader es una pequeña aplicación que reside en nuestro PIC y nos permite escribir en la memoria de programa, nuestros códigos sin necesidad de un programador especializado, como pudiera ser, PICKIT3, o similares.

Obviamente, para poder poner ese programa residente en nuestro PIC por primera ves deberemos apoyarnos de un programador como el antes mencionado, solo por una única ves, a partir de que grabamos el bootloader, podemos decirle adiós al PICKIT3.

Existen muchos y muy variados bootloaders, para las distintas familias de PICs, pero a mi el que me agrada mucho y uso en mis aplicaciones, es ds30loader ya que es sumamente sencillo y super practico, ademas de que es gratis, y si lo desean, existe la versión de pago que es todavía mejor. La comunicación se lleva a cabo a través de puerto serie, he usado sin problemas convertidores USB-Serial como el FT232RL, y trabaja excelente.

Yo les mostrare la versión gratuita, ya que es la que uso, y va de maravilla, así que como es obvio, deberán descargarla desde el foro del autor, dando clic aqui

Una ves que lo tengan, lo descomprimen en donde deseen, y ubicaran la carpeta correspondiente a la familia del PIC que tengan. Por cierto,estos son los PICs compatibles para la familia 16F que es la que usare en los ejemplos:

16F87   16F88   16F818   16F819   16F873   16F874   16F876   16F877   16F882   16F883   16F884
16F886   16F887   16F1516   16F1517   16F1518    16F1519   16F1526   16F1527    16F1823   16F1824
16F1825   16F1826   16F1827   16F1828   16F1829   16F1933    16F1934    16F1936    16F1937
16F1938   16F1939   16F1946   16F1947    16F1454    16F1455    16F1459    16F1508   16F1509
16F1512    16F1513    16F1782    16F1783   16F1847    16F720     16F721    16F873A    16F874A
16F876A   16F877A

Para saber que pics son compatibles solo deben mirar el archivo llamado devices_PIC16F.inc que se encuentra dentro de la carpeta src, lo mismo aplica si quisieran saber que PICs son compatibles para la familia 12F y 18F

En mi caso, lo he probado sin ningún problema en los PICs que pongo en negritas, y especialmente hoy veremos como crear el bootloader para el 16F1825.

Seguiremos los siguientes pasos:

  1. Copien la carpeta llamada firmware_PIC12F_PIC16F
  2. Renombrenla agregando el modelo del PIC, velocidad de cristal, velocidad de comunicación, deberá quedarles algo asi:
    firmware_PIC12F_PIC16F – 1825-32Mhz-115200baud
  3. Dentro de la carpeta encontraran el proyecto de MPLAB llamado ds30Loader.mcp
  4. Abrimos el proyecto con MPLAB (yo uso la version 8.92)
  5. Abriremos y modificaremos el archivo llamado settings.inc 
  6. En el archivo settings, modificaremos los siguientes aspectos
    -Device, colocaremos el PIC a usar

     -FOSC, colocaremos la frecuencia de nuestro cristal conectado al PIC

    -USE_UART1, es el puerto serie del PIC a usar, esta seleccionado por defecto
pero bien podrías usar el UART2 si tu PIC tiene dos UART físicos, solo des-comenta
la linea que desees y comenta la que no vayas a usar

     -BAUDRATE, es la velocidad a la cual se comunicara el PIC con el bootloader

     -USE_BRGH y USE_BRG16, deberás seleccionarlo dependiendo de la configuración            que le des a tu puerto serie, normalmente solo viene seleccionado BRGH, pero si la            velocidad de comunicación que deseas es muy alta como 115200, deberás activar                BRG16, posteare un ejemplo en otra entrada del blog aclarando esta situación, por              ahora, no te lies y deja ambos activados

7. Después deberás setear los bits de configuración, por default vienen escritos en el código (en el mismo archivo settings.inc), pero yo lo veo mucho mas cómodo y sin fallos hacerlo desde la opcion que da MPLAB, asi que, comenta todas las lineas que tengan que ver con bits de configuración y setealos desde la ventana que da el MPLABEsta se encuentra en el menu de:   Configure—> Configuration BitsUna ves ahí, desmarca la casilla que dice:   Configuration bits set in code

Coloca los bits de configuración según necesites (si no sabes como hacerlo, déjame un comentario para hacer una entrada en el blog referente a ello)

8. Bien, ahora todo esta listo, dale clic a compilar ó Build all

9.Si todo ha ido bien tendrás el mensaje de que todo se a construido bien

10. El siguiente paso se realiza por única ves, y es grabar en nuestro PIC el bootloader que acabas de compilar con una herramienta de programación propia de la marca, como PICKIT3.Conecta tu programador, graba el PIC, dale las gracias a tu programador y dile adiós (bueno no mejor no, por si acaso lo volvemos a ocupar, dile hasta la proxima)

11. Para comprobar que ha quedado todo bien, conecta tu PIC por medio del puerto serie a la PC, y abre la aplicación que el autor nos da, que se encuentra en la carpeta de bin, y se llama ds30LoaderGui.exeTendras que configurar los parámetros esenciales, como por ejemplo:
-Device, colocaras el PIC que tienes (en mi caso un 16F1825)
-Baud Rate, la velocidad de comunicación (en mi caso 115200)
-Port, el puerto COM que estoy usando en la comunicaciónUna ves echo eso, das clic en el boton que dice, «check for bl», y si todo esta en orden veras en pantalla la respuesta de tu bootloader

Ahora ya estas listo para enviarle codigo a tu PIC atraves del puerto serie y usando un bootloader, sin necesidad de PICKIT u otro programador externo, todo en tu mismo PIC

Esto para mi trae varias ventajas, entre ellas podemos destacar que puedes fabricar dispositivos capaces de actualizarse sin problemas en campo, de echo, puedes hacerlo vía remota!!!!, así es como lo hago actualmente y va de maravilla, si les interesa, regalenme un comentario y les mostrare como hacerlo

Esto ha sido todo por hoy, si tienen algún comentario o duda comentenlo porfavor, hasta la próxima.

JCCA

MCU-Tronics

P.D. subiré el proyecto completo del PIC16F1825 con cristal de 32 MHz a 115200baud en la zona de descargas de mi pagina, MCU Tronics para que puedan usarlo de guía

Tambien pueden descargarlo de aqui:

 

5 comentarios en “Como montar un Bootloader en tu PIC

  1. Hola, gracias por compartir la forma de cargar un bootloader paso a paso, esta buscando algo así.
    tengo algunas preguntas:
    ¿Se puede usar el MPLAB x?
    ¿Se puede simular un bootloader en el ISIS?…si es si ¿lo haz hecho?

    Bueno en el post dices que si comentamos nos enseñaras hacer un bootloader remoto, me interesa muchísimo si pudieras enseñar hacerlo. Me imagino que lo haces por ethenet o algo así.

    Saludos

    • Como he tardado en responderte amigo, una disculpa, vamos por partes:

      Primero, ¿Puedes usar MPLab X?, bueno, el proyecto esta realizado para abrirse en estos IDEs, asi que no deberias tener problemas, personalmente no lo he echo pero debe funcionar a la perfeccion

      Segundo, ¿Simular un Bootloader? nunca he visto eso implementado y no, nunca lo he echo siempre armo todo en fisico

      Tercero, por supuesto que es posible, escribiré como lo realizo yo

      Gracias por leer el blog, Saludos

  2. Pingback: Bootloader con acceso remoto, como lo hago??? | MCU-Tronics

  3. Hola nuevamente.
    Bueno estoy aplicando tu tutorial con el pic16F873A, ero no me ha funcionado.
    Lo que he configurado es lo siguiente:
    – LIST P=16F873A
    – FOSC 16000000
    – BAUDRATE 9600
    Lo demás lo deje como viene por defecto, menos los fuses. Para mi pic utilice los siguientes fuses:
    __CONFIG _FOSC_HS & _WDTE_OFF & _PWRTE_OFF & _BOREN_OFF & _LVP_OFF & _WRT_OFF & _CP_OFF & _CPD_OFF

    Ademas uso el MPLAB X y seleccione los siguientes compiladores:
    – mpasmx
    – mpasm
    Con ambos me compilo.

    Cargue el programa generado y lo programe en mi pic sin problemas. Utilice la GUI que haz dicho en el tutorial con las siguientes configuraciones:

    – Device : PIC16F873A
    – Baud rate: 9600
    – Port: Com generada por mi USB-TLL
    – seleccione la casilla Write Flash
    – Hex-file: mi blink.hex (este programa funciona ya que lo probé con anticipación).

    Ahora pinche en el botom write, y obtengo lo siguente:

    Initiating write…
    Searching for bl .
    Found PIC16F873A fw ver. 1.0.2
    Waiting for the boot loader to be ready…ok
    Parsing hexfile…
    File timestamp: 05/02/2018 19:42:49
    Opening hexfile…ok
    Validating hexfile…ok
    Hex file successfully parsed
    Writing flash….checksum error (1), trying again…
    Writing flash…checksum error (2), trying again…
    Writing flash…write failed
    Write flash failed
    Tx 19 bytes / Rx 7 bytes / 0,4s
    Write failed

    Por lo que veo, tengo un error en la escritura de la flash y creo que puede ser algún fuse que este relacionado.
    Viendo el datasheet el fuses WRT esta relacionado con la escritura de la flash y la tengo seleccionada como OFF.

    Cualquier ayuda me sera util.
    Gracias por tu ayuda.

    Saludos!!

    • Ok, por lo que veo tienes cargado correctamente el bootloader, lo detecta, y carga correctamente el .HEX, hasta ahi todo bien, enviame porfavor el proyecto de MPLAB del bootloader, para revisarlo.

      Me suena a que talves hay un error en el archivo devices.inc, me sucedió con el PIC16F1947, contacte con el autor y resulto en un error del archivo que te comento.

      Quedo pendiente, puedes enviármelo a jcortes@mcutronics.com.mx

Deja un comentario