Hola! Todo nace de
este hilo.
Efectivamente es de mucha utilidad poder "Programar tu PIC si necesidad de un Programador".. Esto que digo es relativo, ya que al menos una vez debes programar como siempre un código residente en memoria flash, que se encargara de tomar los datos y re-programar su propia memoria Flash. Mejor dicho, hablemos que es un Bootloader.
El termino bootloader hace referencia a un pequeño programa que se realiza para determinado microcontrolador, ya sea PIC, Freescale, Atmel, etc. Este código lo que hace es tomar los datos que se le enviaran por puerto serial (UART), USB, Ethernet, el que sea que pueda enviar una cadena de Bytes al microcontrolador. El microcontrolador va tomando esos datos que le van llegando y los va "Programando" en su propia memoria Flash. que obtenemos con eso, que puedes actualizar en cualquier momento el código del PIC. Utilidades de esto, son grandes, puedes desarrollar un producto o un proyecto y el usuario final no necesita un programador de PIC para poder actualizarlo. Un fiel y gran ejemplo de esto es lo que implementan los programadores ("Quemadores") profesionales de PICs. El programador te llega a casa totalmente funcional, pero en cualquier momento aparece una nueva referencia de microcontrolador y si quieres actualizar el programador, solo te bajas de internet la actualización, conectas el micro al USB y listo, le envías la actualización al programador. Listo el se autoprogramó la FLASH y ya tiene la nueva referencia del micro para trabajar con este.
Lo anterior permite sacar las siguientes conclusiones:
• Es necesario tener un programador para usarlo solo una vez y así grabarle el programa residente en memoria FLASH. Ya después de esto se usa el Bootloader para grabar la flash del micro.
• El programa residente ocupa memoria flash y por ende tienes un poco menos de memoria para la aplicación real del micro. No es mucha la que quita, pero hay que tener eso claro.
• Por ningún motivo se puede sobrescribir las posiciones de memoria FLASH en la que se encentra el programa residente Bootloader. Si se borra por algún error, pierdes el bootloader y toca nuevamente programarlo con un grabador externo.
• No todos los micros pueden soportar Bootloder, esto se limita a aquellos que tienen la capacidad de autograbar su memoria FlLASH. Por ejemplo el 16F84 no lo permite, por eso sacaron la versión PIC16F628A que si lo deja y además tiene mejores prestaciones.
Ya con lo anterior en teoría, PODEMOS GRABAR EL PIC SIN NECESIDA DE UN PROGRAMADOR.
Bueno, este hilo trata de cómo implementar un bootloader en un PIC18F4550 usando el puerto USB 2.0 Ful-Speed que es su máximo atractivo.
HARDWARE
El hardware es casi nada. El PIC y unas cuantas cositas para que pueda trabajar el puerto USB ya esta. Ver imagen No 1.
Imagen No 1. Circuito basico para trabajar con el PIC18F4550 en modo Bootloader.
Para entrar en modo Bootloader, se debe presionar el botón conectado en RB4, manteniéndolo presionado, de se debe dar RESET al pic con otro pulsador en el pin MCLR o, como en este caso se conecta al puerto USB el PIC y listo, lo primero que hace el PIC es preguntar por el estado del PIN RB4 donde esta el pulsador. De estar presionado este botón, el PIC entra en modo Bootloader y si no ejecuta el código normal que le grabamos al PIC.
El led conectado en el puerto RD1 que enciende y apaga cuando entra en modo Bootloader.
El esquemático mostrado, solo tiene la particularidad de tener un PIC18F4550 encapsulado QFN44. En esta practica, usare el EMMini de la empresa
Octoplus. Ver fotografia No1.
Fotografía No 1. Mini sistema de desarrollo EMMini de la empresa
Octoplus.
SOFTWARE
Como decía al principio, el Bootloader es un código residente en la memoria FLASH del pic que será ejecutado cuando se le necesite y lo que hace el PIC es tomar los datos que le llegaran por el puerto USB y reprogramar su memoria FLASH. Este código ocupara un espacio de la memoria FLASH, específicamente este es el reporte de MPLAB en el que se ve la memoria usada.
Imagen No 2. Reporte de memoria usada por el Bootloader.
Este código residente no es necesario desarrollarlo, aunque no es muy complicado hacerlo, no hay ninguna razón en dedicar tiempo en programación del Bootloader si ya el fabricante de los microcontroladores MICROCHIP regala el código que se deba grabar por primera vez en el PIC, el código fuente si se quiere ver como esta hecho, la plantilla sobre la que debe programar las aplicaciones siguientes y también entrega programas de ejemplo usando la plantilla.
También es indispensable tener una aplicación en el PC con la cual se pueda buscar el archivo .hex que se quiere grabar en el PIC y con la que se pueda enviar los datos por el USb al PIC. Esta también la regala MICROCHIP.
Para poder empezar a trabajar con esto, se debe descargar la aplicación desde la página de MICROCHIP llamada
USB Bootloader Setup.EXE después de descargarlo, solo se debe instalar para generar los siguientes archivos:
Imagen No 3. Carpetas creadas al instalar el USB Bootloader Setup.EXE
Como vemos son 2 carpetas.
1. fw (Firmware). En esta están los códigos para el microcontrolador PIC. Vemos 4 nuevas carpetas.
1.1. _factory_hex. Solo encontramos el archivo .hex a grabar en el PIC. Es decir el programa residente.
1.2. Boot. Es el código fuente del programa residente (Bootloader). Si se quiere, se puede compilar este codigo fuente y trabajara igual que el .hex encontrado en la carpeta anterior.
1.3. Demo y Demo02. Son programas de ejemplo con cofigo fuente para saber como se usa la plantilla para crear el programa que ejecutara el PIC cuando no esta en modo Bootloader.
2. Pc. Herramientas para usar en el PC.
2.1. MCHPUSB Driver. Cuando el PIC entra en modo bootloader, el Windows detectara un nuevo dispositivo conectado en uno de sus puertos USB. Seguido pedirá el Driver a instalar. En ese momento, se le debe buscar manualmente en esta carpeta.
2.2. Mpusbapi. Esta es un DLL entregada por Microchip pues es con esta que se desarrolla la aplicación de Windows que se encarga de enviarle los datos al PIC. Con esta podríamos desarrollar nuestra propia aplicación Windows.
2.3. Pdfsusb. Es la aplicación que se debe usar siempre que se quiere programar el PIC en modo Bootloader.
GRABANDO EL PIC
Si el PIC no tiene el programa residente, debemos usar un programar de PICs externo. Ver fotografía No 2. Con el grabaremos el archivo .hex encontrado en la carpeta _factory_hex.
Ya grabado el PIC, se presiona el pulsador, manteniéndolo presionado conectarlo al puerto USB. Inmediatamente el Windows lo reconocerá. Ver imagen No 4.
Imagen No 4. Instante en que Windows detecta al PIC entrando en modo Bootloader.
Ya luego solo queda buscar manualmente el driver. (Ver secuencia de instalación desde imagen No 5 hasta la imagen No
.
Imagen No 5. Paso uno en instalación de driver.
Imagen No 6. Paso dos en instalación de driver.
Imagen No 7. Paso tres en instalación de driver.
Imagen No 8. Paso cuatro. Verificación de instalación.
Antes que el Windows Instale el Driver, el led permanece apagado. Una vez completado el proceso y el Windows instale el PIC, el led empezara a parpadear indicando espera de archivo .hex.
En este momento, ejecutamos el archivo PDFSUSB.exe, se carga el archivo.hex y se programa el microcontrolador. Ver Imagen No 9.
Imagen No 9. Identificación del software de control.
Si se graba el ejemplo que se encuentra en la carpeta Demo, veremos como el PIC al entrar en modo normal, también se identifica con el Windows por puerto USB pero ahora totalmente diferente al Bootloader. Esto permite concluir que en la aplicación normal, el PIC también puede trabajar con el puerto USB y de forma totalmente diferente al Bootloader. Si se quiere ver como trabaja este ejemplo, el mismo programa PDFSUSB tiene otra aplicación denominada PICDEM FS USB. Ver imagen No 10.
Imagen No 10. Test del ejemplo Demo.
Espero les ayude en algo esta guía de cómo usar el Bootloader y aprovechar esta gran ventaja que tienen en generar todos los micros que pueden reprogramar su memoria FLASH. En particular este PIC al tener puerto USB, lo hace bastante práctico y potente, ni fuente de voltaje se necesita porque se alimenta del puerto USB.
Saludos!
Ernesto.