El sistema EMm47J53, tiene la capacidad de auto-programar la memoria FLASH del microcontrolador, esto lo logra usando un función que es programada con anterioridad en nuestro taller de fabricación, con lo que al conectar el dispositivo al puerto USB este se identificara con el PC como un dispositivo “PIC18F47J53 Bootloader” . El Bootloader es un pequeño código residente en la memoria FLASH del MCU, que se encarga de tomar los datos provenientes del puerto USB, organizarlos y grabarlos en las posiciones de memoria FLASH correspondientes, logrando así reprogramar en cualquier momento casi la totalidad de su memoria, permitiendo cambiar el funcionamiento del dispositivo diseñado. Cuando se dice “casi”, es porque como usuarios, no podemos permitir que ese pequeño código Bootloader pre--programado en taller sea borrado o sobrescrito. De hacerlo, perderemos la capacidad de auto-programación, y sería necesario que se acercara a nuestra oficina o a la oficina de su distribuidor autorizado más cercano para que le sea reprogramada nuevamente el código Bootoloader.
Para proteger esas posiciones de memoria, lo único que hay que hacer es escribir el código sobre una “plantilla” que es suministrada en el CD junto al sistema. Esta plantilla nos asegura que no serán sobrescritas o borradas las posiciones de memoria FLASH que nos interesan.
El modulo EMm47J53, puede ser alimentado desde el puerto USB, y así aprovechar para alimentar el protoboard sin necesidad de llevar un adaptador. Pero esta opción tiene una limitación, y es que no se debe conectar motores, reles, o circuitos que consuman más de 300mA. Si no se tiene en cuenta esta advertencia, puede dañar su computador. Ahora bien, se puede aprovechar la conexión del puerto USB para alimentar circuitos muy pequeños como leds, display, pulsadores e interruptores.
El Código Bootloader fue desarollado por MICROCHIP® bajo C18 usando USB HID evitando la previa instalación de un DRIVER en el PC para el correcto funcionamiento. Esto me permite poder crear mi propia aplicación en el MCU, incluyendo comunicación USB y en ningún momento existirá interferencia entre modo Bootloader y modo USER. Todas las interrupciones están disponibles que para que sean usadas por el usuario sin ningún tipo de restricción.
El código Bootloader ha sido desarrollado por MICROCHIP® para sea ejecutado en forma eficiente y con la menor cantidad de líneas de programación posibles. Es decir, el código Bootloader ocupa 1.8KB de memoria FLASH y usa solo 640B de la memoria RAM para su ejecución. El código reside en las primeras posiciones de la memoria FLASH 0X00000 – 0X00FFF.
Para implementar el Bootloader, se puede descargar el código fuente desde la pagina de
Microchip Microchip Application Libraries Una vez descargado el archivo, se instala en el equipo, lo cual toma varios minutos pues ahora Microchip en este solo paquete entrega todos sus programas de ejemplo y notas de aplicación incluyendo USB, ETHERNET, CAN, etc.
Después de la instalación aparece una carpeta en el DiscoDuro "C:\Microchip Solutions v2010-08-04"
Estos son todos los archivos instalados y estan resaltado los que nos interesan.
Ahora solo resta tener instalado C18 en el PC y claro esta MPLAB. Se abre el proyecto con el bootloader que nos interesa y compilamos...

MPLAB
Ahora ya generado el archivo HEX con el Bootloader desde C18, resta tener PICKIT3 o similar para descargar como primera y ultima vez el código al microcontrolador. Después de programado con el PICKIT3, el usuario actualizara el programa que sera ejecutado por el microcontrolador usando modo Bootloader y no mas el PICKIT3 o cualquier otro programador externo.
Prueba del Bootloader
Para probar que el procedimiento anterior quedo bien, se conecta el modulo al puerto USB, se oprimen los pulsadores RESET y RB2 al tiempo y luego de un segundo liberar solo RESET, asi al iniciar el microcontrolador este detectara que se quiere estar en modo Bootloader y así Windows debería reconocerlo e instalarlo sin pedir driver alguno, al final lo podríamos encontrar en el Administrados de Dispositivos.
Detección de Microcontrolador en modo Bootloader
En la ruta: "C:\Microchip Solutions v2010-08-04\USB Device - Bootloaders\HID - Bootloader" Encontraremos un archivo.exe llamado
HIDBootLoader.exe, esta es la aplicación que servirá para enviar el archivo .hex de nuestros futuros proyectos al microcntrolador.
Aplicación para programar por Bootloader HID.
Ya solo queda probar programandole un pequeño proyecto y verificar su funcionamiento.
Adjunto proyecto para usar Bootloader USB-HID. Enciende y apaga un LED en el pin RA0 usando C18 y CCS 4.114.
Como usar CCS Con el BOOTLOADER
Muchas personas estamos acostumbrados a programar en CCS, pero este ultimo esta presentando problemas al compilar código que sea compatible con el Bootloader HID. Cuando se usaba CCS y se programaba el microcontrolador con Bootloader, este no hacia absolutamente nada!! Lo mas extraño es que con versiones anteriores a la 4.084 de CCS si funcionaba. Pero como este microcontrolador PIC18F47J53 es muy nuevo y solo de la 4.114 lo tiene en lista, procedo a explicar el problema.
Cuando se compila un proyecto en C18 que funciona sin problemas, el archivo .hex generado tiene la siguiente estructura:
:020000040000FA
:0600000075EF08F012008C
:0610000075EF08F012007C
:021008001200D4
:021018001200C4
:02102A000000C4
:04102C002A0EF66E24
:10103000100EF76E000EF86E00010900F550656F96
:101040000900F550666F03E1656701D03DD00900E6
:10105000F550606F0900F550616F0900F550626F3F
:1010600009000900F550E96E0900F550EA6E090023
:1010700009000900F550636F0900F550646F09001D
:101080000900F6CF67F0F7CF68F0F8CF69F060C0DD
:10109000F6FF61C0F7FF62C0F8FF0001635302E191
:1010A000645307E00900F550EE6E6307F8E2640749
:1010B000F9D767C0F6FF68C0F7FF69C0F8FF000105
:0A10C0006507000E665BBFD7120043
:0610CA00B00EF36E00EE13
:1010D00000F00E0E01D81200EA6002D0EE6AFCD7D2
:0A10E000F350E9601200EE6AFCD73D
:0610EA001CEE00F02CEEEC
:1010F00000F0F86A019C16EC08F085EC08F083EC2F
:0611000008F0FBD712000D
:041106008A701200D9
:02110A001200D1
:020000040001F9
:01FFF8009A6E
:01FFF900F710
:01FFFA003DC9
:01FFFB00FF06
:01FFFC0061A3
:01FFFD00F80B
:01FFFE008181
:01FFFF00F908
:00000001FF
Ahora si hacemos lo mismo con CCS, obtenemos lo siguiente:
:0410000004EF08F001
:08100800F86AD09EEA6AE96A69
:10101000FF0E0F01486FC29CC29E4951E00B1F0991
:0C102000496F256BD16AD26A8A900300E8
:020000040001F9
:08FFF8009AF73DFF61F880F962
:00000001FF
;PIC18F47J53
;CRC=DA4D CREATED="14-Ene-11 18:56"
Hay un cambio en la estructura del archivo hex.
Este problema anterior se ve reflejado en que cuando se le da "Open Hex File" con la aplicación "HIDBootLoader.exe" de Microchip, el de C18 va sin problemas, pero el de CCS es cargado en 0x00 toda la memoria.... Por eso al programar en el microcontrolador un proyecto usando CCS, este simplemente NO HACE NADA, esta en blanco!!!
Viendo este problema, hay una solución poco ortodoxa pero da buen resultado.
PASO1. Abrir el proyecto que adjunto pero no desde el IDE de CCS, hacerlo desde MPLAB. (Se debe revisar que este bien configurada la ruta del .exe de CCS desde MPLAB)
Project - Open
PASO2 Compilar el proyecto.
Proyecto de CCS desde MPLAB.
Este archivo .hex de CCS si lo dejamos tal cual como quedo después de compilar no funcionara si lo descargamos por Bootloader, es por eso que se debe cambiar el formato usando la herramienta de exportar .hex de MPLAB.
PASO3 Exportar archivo hex.
PASO4 Ahora si, ya se puede programar el microcontrolador usando la aplicación Bootloader de Microchip.
Esta solución planteada da los resultados esperados, pero es un poco molesto hacerlo siempre después de compilar. Nuestro amigo JIM encontró otra solución al problema y nos la explica en el siguiente post.
Es atacar el problema desde la raíz y modificar la aplicación "HIDBootLoader.exe" gracias a que Microchip nos entrega el código fuente de ella en VisualC++
continuara...