TODOPIC
Bienvenido(a), Visitante. Por favor, ingresa o regístrate.
¿Perdiste tu email de activación?
03 de Septiembre de 2010, 05:14:30

Ingresar con nombre de usuario, contraseña y duración de la sesión
Buscar:     Búsqueda Avanzada
257111 Mensajes en 28437 Temas por 27916 Usuarios
Último usuario: zororyuzaki
* Inicio Ayuda Buscar Calendario Ingresar Registrarse
Buscar en TodoPIC
+  TODOPIC
|-+  Microcontroladores PIC
| |-+  * PROYECTOS * (Moderadores: J1M, jfh900, MGLSOFT, Modulay, Sasián, LABmouse)
| | |-+  Bootloader USB para PIC18F4550 a full.
0 Usuarios y 1 Visitante están viendo este tema. « anterior próximo »
Páginas: [1] 2 3 4 5 Marcar como favorito Imprimir
Autor Tema: Bootloader USB para PIC18F4550 a full.  (Leído 18860 veces)
LABmouse
Moderador Local
DsPIC30
*****
Desconectado Desconectado

Sexo: Masculino
Colombia Colombia

Mensajes: 3135



WWW
« : 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 Cool.

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: 21 de Septiembre de 2008, 01:40:32 por PICmouse » En línea

El_Guitre
Colaborador
PIC24H
*****
Desconectado Desconectado

Sexo: Masculino
Argentina Argentina

Mensajes: 1012



WWW
« Respuesta #1 : 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
En línea

jeremylf
Colaborador
PIC24F
*****
Desconectado Desconectado

Sexo: Masculino
Peru Peru

Mensajes: 587



« Respuesta #2 : 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  Confused Bueno, otra cosa, el programa (el hex) lo guarda al principio del programa no?

Gracias, gran trabajo.
Salu2.
En línea
El_Guitre
Colaborador
PIC24H
*****
Desconectado Desconectado

Sexo: Masculino
Argentina Argentina

Mensajes: 1012



WWW
« Respuesta #3 : 21 de Septiembre de 2008, 11:40:48 »

Probado y funcionando ok  rebotando rebotando ahora a aprender C18 para poder programar desde la notebook.
En línea

scientist
Colaborador
PIC24F
*****
Desconectado Desconectado

Sexo: Masculino
Mexico Mexico

Mensajes: 830


Freescaler


WWW
« Respuesta #4 : 22 de Septiembre de 2008, 11: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
En línea

NO le digas a DIOS que tienes un gran problema, dile a tu problema que tienes un GRAN DIOS!!
LABmouse
Moderador Local
DsPIC30
*****
Desconectado Desconectado

Sexo: Masculino
Colombia Colombia

Mensajes: 3135



WWW
« Respuesta #5 : 22 de Septiembre de 2008, 11: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!
En línea

scientist
Colaborador
PIC24F
*****
Desconectado Desconectado

Sexo: Masculino
Mexico Mexico

Mensajes: 830


Freescaler


WWW
« Respuesta #6 : 23 de Septiembre de 2008, 12: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:

#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:
#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, 12:39:47 por scientist » En línea

NO le digas a DIOS que tienes un gran problema, dile a tu problema que tienes un GRAN DIOS!!
AKENAFAB
Colaborador
PIC24H
*****
Desconectado Desconectado

Sexo: Masculino
Mensajes: 2065


¿ hAstA dÓnDe pUeDeS LLeGaR ?


« Respuesta #7 : 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 » En línea
El_Guitre
Colaborador
PIC24H
*****
Desconectado Desconectado

Sexo: Masculino
Argentina Argentina

Mensajes: 1012



WWW
« Respuesta #8 : 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
En línea

LABmouse
Moderador Local
DsPIC30
*****
Desconectado Desconectado

Sexo: Masculino
Colombia Colombia

Mensajes: 3135



WWW
« Respuesta #9 : 23 de Septiembre de 2008, 04: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!
En línea

El_Guitre
Colaborador
PIC24H
*****
Desconectado Desconectado

Sexo: Masculino
Argentina Argentina

Mensajes: 1012



WWW
« Respuesta #10 : 23 de Septiembre de 2008, 06: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??  Confused
En línea

WSalas
PIC10
*
Desconectado Desconectado

Sexo: Masculino
Peru Peru

Mensajes: 16



WWW
« Respuesta #11 : 24 de Septiembre de 2008, 11: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, 12:25:57 por WSalas » En línea

Mi Blog


Un sueño se hace posible cuando no se tiene temor al fracaso
scientist
Colaborador
PIC24F
*****
Desconectado Desconectado

Sexo: Masculino
Mexico Mexico

Mensajes: 830


Freescaler


WWW
« Respuesta #12 : 25 de Septiembre de 2008, 01:13:04 »

muy bonita la plaquita. precisamente estoy haciendo algo parecido, saludos
En línea

NO le digas a DIOS que tienes un gran problema, dile a tu problema que tienes un GRAN DIOS!!
jeremylf
Colaborador
PIC24F
*****
Desconectado Desconectado

Sexo: Masculino
Peru Peru

Mensajes: 587



« Respuesta #13 : 26 de Septiembre de 2008, 08: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
En línea
El_Guitre
Colaborador
PIC24H
*****
Desconectado Desconectado

Sexo: Masculino
Argentina Argentina

Mensajes: 1012



WWW
« Respuesta #14 : 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
En línea

andreach16
PIC10
*
Desconectado Desconectado

Colombia Colombia

Mensajes: 4


« Respuesta #15 : 08 de Diciembre de 2008, 05:03:41 »

Es indispensable grabar el archivo .hex residente por medio de un programador externo? o como hago para que me detecte el usb
En línea
LABmouse
Moderador Local
DsPIC30
*****
Desconectado Desconectado

Sexo: Masculino
Colombia Colombia

Mensajes: 3135



WWW
« Respuesta #16 : 08 de Diciembre de 2008, 05:33:51 »

Si, así es.. Es necesario que tenga un Grabador externo por primera vez, ya luego no lo vas a necesitar siempre y cuando no sobrescribas el bootloader.

Saludos!
En línea

andreach16
PIC10
*
Desconectado Desconectado

Colombia Colombia

Mensajes: 4


« Respuesta #17 : 14 de Diciembre de 2008, 02:55:39 »

hola, tengo problemas en grabarle el archivo.hex, es decir ejecuto el PDFUSB.exe, y busco el archivo .hex para cargar, lo cargo lo salvo, y lo programa y me sale exitoso, pero en el modo demo no lo reconoce, y si le doy execute me aparece error  WARNING- FAILED TO RESET BOARD, y entonces se desconecta, porfavor me puedes ayudar para poder grabar un programa en el pic, el del demo, que es MCHPUSB.hex
gracias
y que pena la molestia, es la primera vez que trabajo con pics
En línea
LABmouse
Moderador Local
DsPIC30
*****
Desconectado Desconectado

Sexo: Masculino
Colombia Colombia

Mensajes: 3135



WWW
« Respuesta #18 : 15 de Diciembre de 2008, 12:37:01 »

para crear el programa tuyo, debes seguir una plantilla base que esta dentro de las carpetas creadas al instalar la AN de MICROCHIP. eso te asegura no sobrescribir las posiciones en donde esta el Bootloader.

Solo así funcionara siempre.

SALUDOS!
En línea

andreach16
PIC10
*
Desconectado Desconectado

Colombia Colombia

Mensajes: 4


« Respuesta #19 : 15 de Diciembre de 2008, 02:09:27 »

hola, a partir del archivo main.c de la carpeta DEMO , le copiamos esto
#include <p18f4550.h>
extern void _startup (void);        // See c018i.c in your C18 compiler dir
#pragma code _RESET_INTERRUPT_VECTOR = 0x000800
void _reset (void)
{
    _asm goto _startup _endasm
}
#pragma code

#pragma code _HIGH_INTERRUPT_VECTOR = 0x000808
void _high_ISR (void)
{
    ;
}

#pragma code _LOW_INTERRUPT_VECTOR = 0x000818
void _low_ISR (void)
{
    ;
}
#pragma code

al proigrama
#pragma config WDT = OFF
void main (void)
{
TRISB = 0;
/* Reset the LEDs */
PORTB = 0;
/* Light the LEDs */
PORTB = 0xff;

while (1)
;
}
para que se prenda los leds, lo fuimos a grabar con el picstarplus, y ya no detecta el pic, no prenden los leds, y no lo puedo reprogramar sale muchisimos fallos, y si le pedimos que lo lea nos sale el error,
 "Device is data protected! Data memory may be invalid.
Device is code protected! Program memory may be invalid."
y no podemos borrar lo que hay en el pic por medio de la herramienta eraser flash device
no conocen algun lugar en Bogotá donde alguien nos pueda ayudar personalmente.
gracias
En línea
TODOPIC
   

 En línea
Páginas: [1] 2 3 4 5 Imprimir 
« anterior próximo »
Ir a:  

Impulsado por MySQL Impulsado por PHP Powered by SMF 1.1.11 | SMF © 2006-2008, Simple Machines LLC XHTML 1.0 válido! CSS válido!
Página creada en 0.098 segundos con 25 consultas.