Autor Tema: Bootloader USB para PIC18F4550 a full.  (Leído 181075 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado LABmouse

  • Moderador Local
  • DsPIC30
  • *****
  • Mensajes: 3575
    • Juntos es mejor
Bootloader USB para PIC18F4550 a full.
« en: 21 de Septiembre de 2008, 01:13:23 »
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 8).

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.
« Última modificación: 18 de Noviembre de 2011, 17:13:37 por LABmouse »

Desconectado El_Guitre

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1046
Re: Bootloader USB para PIC18F4550 a full.
« Respuesta #1 en: 21 de Septiembre de 2008, 01:57:11 »
Ernesto, muy explicativa tu respuesta, la verdad de maravillas. Mañana mismo me pongo a jugar con esto que de la forma que lo explicas parece tan sencillo. Felicitaciones por la exposición. Saludos

Desconectado jeremylf

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1341
Re: Bootloader USB para PIC18F4550 a full.
« Respuesta #2 en: 21 de Septiembre de 2008, 12:57:11 »
Vaya que gran trabajo PICmouse! deverdad que muy explicativo, no sabia que con ese ejemplo se podria manejar dos distintas configuraciones de USB (porq mi aplicacion trabaja con una) con solo apretar un boton.

Lo estare analizando bien porque el del ccs me dio algo de errores  :? Bueno, otra cosa, el programa (el hex) lo guarda al principio del programa no?

Gracias, gran trabajo.
Salu2.

Desconectado El_Guitre

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1046
Re: Bootloader USB para PIC18F4550 a full.
« Respuesta #3 en: 21 de Septiembre de 2008, 23:40:48 »
Probado y funcionando ok  :-/ :-/ ahora a aprender C18 para poder programar desde la notebook.

Desconectado scientist

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 999
Re: Bootloader USB para PIC18F4550 a full.
« Respuesta #4 en: 22 de Septiembre de 2008, 23:04:31 »
hola PICmouse, he intentado tu ejemplo, y me ha salido con un 18f2550, no se que tanto dependa esto, con respecto a que solo se puede utilizar programas compilados en c18, mmm, hay alguna propabilidad de programarlos con algun truquillo, algun pragma, bueno, sino tendre que empezar con el c18, muy buen articulo, saludos
NO le digas a DIOS que tienes un gran problema, dile a tu problema que tienes un GRAN DIOS!!
Alma mia y castillo mio, mi Dios en quien yo confiare....

Desconectado LABmouse

  • Moderador Local
  • DsPIC30
  • *****
  • Mensajes: 3575
    • Juntos es mejor
Re: Bootloader USB para PIC18F4550 a full.
« Respuesta #5 en: 22 de Septiembre de 2008, 23:06:36 »
Scientist, precisamente estoy trabajando en eso.  Ya casi lo tengo trabajando con CCS también. Es decir, programar el Bootloader de C18, pero la plantilla de CCS.


SALUDOS!

Desconectado scientist

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 999
Re: Bootloader USB para PIC18F4550 a full.
« Respuesta #6 en: 23 de Septiembre de 2008, 00:32:10 »
hola picmouse, ya logre hacer lo que queremos, hacerlo con ccs
 ahora,lo unico que tenemos que hacer, es no grabar nada de nuestro programa en las direcciones de la 0x00 hasta la 0x7FF, ya probe varios programas y funcionan que dan miedo, aqui lo unico que tenemos que anexar a nuestro programa es:

Código: [Seleccionar]

#define LOADER_END 0x7FF
#define LOADER_SIZE 0x6FF
#build(reset=LOADER_END+1, interrupt=LOADER_END+9)
#org 0, LOADER_END {} // nothing will replace the bootloader memory space
// END OF bootloader definition



aqui os pongo un ejemplo que funciona muy bien

Código: [Seleccionar]
#include <18F2550.h>
#fuses HSPLL,NOWDT,NOPROTECT,NOLVP,NODEBUG,USBDIV,PLL5,CPUDIV1,VREGEN
#use delay(clock=48000000)
#include <usb_cdc.h>
#define LOADER_END 0x7FF
#define LOADER_SIZE 0x6FF
#build(reset=LOADER_END+1, interrupt=LOADER_END+9)
#org 0, LOADER_END {} // nothing will replace the bootloader memory space
// END OF bootloader definition


void main() {

usb_cdc_init();
usb_init(); //inicializamos el USB

while (!usb_cdc_connected()) {}
while (true)
{
usb_task();
if(usb_enumerated())
{
usb_cdc_putc(0x41);
}
}
}

solo hay que anexarlo a cualquier programa y chevere, cuando vayamos a programarlo con el PDFUSB nos va a salir una advertencia, le decimos que no, y lo programamos, listo, saludos y espero les haya ayudado

NOTA: solo una aclaracion, al parecer con el metodo que menciono, no podemos configurar los FUSES, se quedarian como el programa del bootloader lo tiene
« Última modificación: 23 de Septiembre de 2008, 00:39:47 por scientist »
NO le digas a DIOS que tienes un gran problema, dile a tu problema que tienes un GRAN DIOS!!
Alma mia y castillo mio, mi Dios en quien yo confiare....

Desconectado AKENAFAB

  • Colaborador
  • DsPIC30
  • *****
  • Mensajes: 3227
Re: Bootloader USB para PIC18F4550 a full.
« Respuesta #7 en: 23 de Septiembre de 2008, 03:01:16 »
Hola

Les dejo este enlace , espero les sirva.

Es sobre el bootloader.

http://www.piccoder.co.uk/content/view/51/26

Saludos!

Instalo correctamente el boot , pero al cargar el driver me rompe las b*las , porque no tiene soporte para 64 bits.



« Última modificación: 23 de Septiembre de 2008, 06:10:58 por AKENAFAB »

Desconectado El_Guitre

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1046
Re: Bootloader USB para PIC18F4550 a full.
« Respuesta #8 en: 23 de Septiembre de 2008, 07:22:38 »
NOTA: solo una aclaracion, al parecer con el metodo que menciono, no podemos configurar los FUSES, se quedarian como el programa del bootloader lo tiene

Que bueno, felicitaciones, ahora podemos probar el bootloader sin aprender C18 antes, respecto a los fuses, no se puede modificar el codigo del bootloader de C18 cambiando los fuses en el? En este momento no recuerdo si microchip te da el codigo fuente o solo el .hex

Desconectado LABmouse

  • Moderador Local
  • DsPIC30
  • *****
  • Mensajes: 3575
    • Juntos es mejor
Re: Bootloader USB para PIC18F4550 a full.
« Respuesta #9 en: 23 de Septiembre de 2008, 16:31:14 »
Lo de los fusibles, es cierto, quedan tal cual como se programaron en el Bootloader, es decirm, siempre vas con 20MHz, siempre vas a 48MHz , es decir, 24 Mips. Siempre con MCLR, Siempre con.... Bueno los de siempre, ya que esos solo se pueden cambiar desde el programador externo.



hola picmouse, ya logre hacer lo que queremos, hacerlo con ccs ahora,lo unico que tenemos que hacer, es no grabar nada de nuestro programa en las direcciones de la 0x00 hasta la 0x7FF, ya probe varios programas y funcionan que dan miedo.

Que bueno!  Apenas llegue a casa lo intentare.

SALUDOS!

Desconectado El_Guitre

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1046
Re: Bootloader USB para PIC18F4550 a full.
« Respuesta #10 en: 23 de Septiembre de 2008, 18:47:16 »
Ya probe lo que proponía scientist y funciona, estoy cargando programas de ccs con el bootloader de microchip y funcionan. Ahora bien, si necesitaramos cambiar algo, por ejemplo el valor del oscilador, podríamos modificar la configuración en el código del bootloader y volver a programar el microcontrolador (con el programador externo) con el código del bootloader con los fusibles que necesitemos para la aplicación, estoy en lo cierto??  :?

Desconectado WSalas

  • PIC10
  • *
  • Mensajes: 36
Re: Bootloader USB para PIC18F4550 a full.
« Respuesta #11 en: 24 de Septiembre de 2008, 23:50:02 »
Hola a todos, aqui les presento una aplicacion parecida.. para mas detalles ver aqui

Bootloader usando el PIC18F2550





Bootloader usando el PIC18F4550

« Última modificación: 25 de Septiembre de 2008, 00:25:57 por WSalas »

Desconectado scientist

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 999
Re: Bootloader USB para PIC18F4550 a full.
« Respuesta #12 en: 25 de Septiembre de 2008, 13:13:04 »
muy bonita la plaquita. precisamente estoy haciendo algo parecido, saludos
NO le digas a DIOS que tienes un gran problema, dile a tu problema que tienes un GRAN DIOS!!
Alma mia y castillo mio, mi Dios en quien yo confiare....

Desconectado jeremylf

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1341
Re: Bootloader USB para PIC18F4550 a full.
« Respuesta #13 en: 26 de Septiembre de 2008, 20:13:21 »
No entiendo algo, ocea que es necesario que en todos tus proyectos de ccs pongas ese codigo para decir q grave despues de donde esta el bootloader de c18 ???


Salu2

Desconectado El_Guitre

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1046
Re: Bootloader USB para PIC18F4550 a full.
« Respuesta #14 en: 27 de Septiembre de 2008, 01:08:49 »
Asi es en los proyectos que vayas a cargar en un PIC mediante el bootloader tenes que incluir esas lineas para indicarle al compilador como organizar los datos en las posiciones de memoria