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:
- Copien la carpeta llamada firmware_PIC12F_PIC16F
- Renombrenla agregando el modelo del PIC, velocidad de cristal, velocidad de comunicación, deberá quedarles algo asi:
firmware_PIC12F_PIC16F – 1825-32Mhz-115200baud - Dentro de la carpeta encontraran el proyecto de MPLAB llamado ds30Loader.mcp
- Abrimos el proyecto con MPLAB (yo uso la version 8.92)
- Abriremos y modificaremos el archivo llamado settings.inc
- 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:
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
Pingback: Bootloader con acceso remoto, como lo hago??? | MCU-Tronics
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