Autor Tema: Bootloader 18f67j10  (Leído 2853 veces)

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

Desconectado Cryn

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 4169
Bootloader 18f67j10
« en: 21 de Julio de 2009, 10:58:57 »
Hola amigos, nuevamente recurro a ustedes para que me den un poco de orientación, pasa que tengo que tratar con un bootloader para el pic18f67j10, leí un poco acá y comprendí como es que funciona un bootloader, pero me quedaron muchas dudas, ya más que todo en cuanto a programación, es decir como se incluye este en el codigo, si tiene direcciones especificas, me fije la hoja de datos del micro, y no hay un sector llamado SELF-PROGRAMING, ya que creo que ahí se debería explicar algo, no?

También quisiera saber si es necesario el uso de un programa, así como se menciona en el link que deje...

espero su ayuda, ya que me inicio en esto de los booloaders, usaré CCS

saludos y muchas gracias.
« Última modificación: 21 de Julio de 2009, 11:01:45 por Cryn »
.

Desconectado Suky

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 6758
Re: Bootloader 18f67j10
« Respuesta #1 en: 21 de Julio de 2009, 12:47:01 »
Primero en tu programa de CCS debes reubicar los vectores de reset y interrupción, porque veo que el Bootloader ocupa las primeras 4 direcciones.
Esto lo haces con:
Código: C
  1. #define VECTOR_RESET 0x3FA    //  <--- EJEMPLO
  2. #define VECTOR_INTERRUP 0x3FC
  3. #build(reset=VECTOR_RESET, interrupt=VECTOR_INTERRUP)

Y para protejer los 2 sectores del bootloader:

Código: C
  1. #org 0x00, 0x04{} // Protejer este espacio
  2. #org 0x....         {} // Protejer este espacio


Saludos!
No contesto mensajes privados, las consultas en el foro

Desconectado Cryn

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 4169
Re: Bootloader 18f67j10
« Respuesta #2 en: 21 de Julio de 2009, 14:42:09 »
gracias por la respuesta suky,

no creo que sea necesario reubicar el vector de interrupción, lo que entendí de esta imagen es que en vez de ejecutar primeramente nuestro programa, primero ejecutamos el bootloader, y cuando tenemos nuestro bootloader ejecutado recién nos vamos a la posición de inicio de nuestro programa.

Ahora se usa los #org para este fin verdad?

Y en CCS como hago para que primero ejecute el bootloader, con esta instrucción??:
#build(reset=VECTOR_RESET)

y para una vez ejecutado el bootloader, para que comience a ejecutar el programa cargado que se haría?

después se usa las instrucciones write_program_memory, erase_p..., read_...??

saludos
.

Desconectado Suky

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 6758
Re: Bootloader 18f67j10
« Respuesta #3 en: 21 de Julio de 2009, 15:05:14 »
Entendí mal  :mrgreen: Pensé que ibas a utilizar el bootloader del link en el micro. Es necesario que lo realices? Porque sino puedes utilizar el  que trae CCS. (Revisa Bootloader.h y Loader.c)

Saludos!
No contesto mensajes privados, las consultas en el foro

Desconectado Cryn

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 4169
Re: Bootloader 18f67j10
« Respuesta #4 en: 21 de Julio de 2009, 15:58:54 »
Tengo que hacer un bootloader para ese micro, ya no hay problema si se hace desde cero o se usan algunas librerías o ejemplos de CCS

Precisamente estaba viendo uno de esos ejemplos, la de ex_bootloader.c que utiliza a bootloader.h y loader.c hay varias definiciones que no las comprendo muy bien, al menos ya vi que define ambos vectores, reset y de interrupcion para PCH:

#define LOADER_END   0x4FF
#define LOADER_SIZE   0x3FF

#build(reset=LOADER_END+1, interrupt=LOADER_END+9)

para que va el LOADER_SIZE?


en el archivo loader.c se hace una lectura de un .hex? o que se hace con tanto código?

saludos.
.

Desconectado Suky

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 6758
Re: Bootloader 18f67j10
« Respuesta #5 en: 21 de Julio de 2009, 21:38:41 »
LOADER_SIZE no se para que lo define, porque realmente no lo usa, será a modo de información  :D

En el bootloader de CCS el *.HEX se transfiere  por medio del Siow (Utilidad que acompaña a CCS). Te adjunto los 2 archivo que genera la ultima versión del CCS al incluir el bootloader.

Saludos!
No contesto mensajes privados, las consultas en el foro

Desconectado Cryn

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 4169
Re: Bootloader 18f67j10
« Respuesta #6 en: 22 de Julio de 2009, 11:29:07 »
ok, ya veo, hice el wizzard como muestras y me genero los mismo archivos que adjuntaste

entonces con los archivos del wizard ya estaría listo para probar el bootloader?

ahi aparece:

if(!input(PIN_B5))
{
   real_load_program();
...

hay un pulsador para hacer q cargue el bootloader cargue el programa? como se sabe que se debe cargar o no un nuevo programa?

saludos y gracias por las respuestas suky
.

Desconectado Suky

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 6758
Re: Bootloader 18f67j10
« Respuesta #7 en: 22 de Julio de 2009, 17:57:30 »
Es cierto, este bootloader utiliza un pin para entrar al modo bootloader  :?

Me puse a revisar el Bootloader de microchip (AN851), y este no utiliza ningún pin adicional. Adjunto *.hex para grabar al PIC18F67j10 con un programador común y hay que bajar se el AN851 desde Microchip para instalar el soft necesario para cargar el hex.

En CCS hay que proteger el código del bootloader y re ubicar los vectores de reset y interrupción, que según el archivo de microchip, en la serie 18Fxxjxx debe ser en 0x400 y 0x408:

Código: C
  1. #define VECTOR_RESET 0x400
  2. #define VECTOR_INTERRUP 0x408
  3. #build(reset=VECTOR_RESET, interrupt=VECTOR_INTERRUP)
  4.  
  5. #org 0x00, 0x3FF {} // Protejer este espacio

Prueba y me cuentas :wink:
Saludos!

No contesto mensajes privados, las consultas en el foro

Desconectado Cryn

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 4169
Re: Bootloader 18f67j10
« Respuesta #8 en: 22 de Julio de 2009, 19:38:20 »
tienes el .c del .hex que dejaste? porque quisiera cambiar los pines de tx y rx, porque tengo un hard que no usa los convencionales

el AN851 ya lo descargue, pero no puedo grabar un nuevo programa con el bootloader ya grabado, quizá sea por los pines

saludos, y muchas gracias por toda la ayuda suky. :-/
.

Desconectado Suky

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 6758
Re: Bootloader 18f67j10
« Respuesta #9 en: 23 de Julio de 2009, 02:50:02 »
El 851 al instalarlo, en la carpeta raíz te crea una carpeta con el firmware, igualmente te lo adjunto.  :? Pero no vas a poder cambiar los pines, porque utiliza el módulo usart para la comunicación y esta hecho en asm.  :undecided:

Saludos!
No contesto mensajes privados, las consultas en el foro

Desconectado Alexandra

  • PIC10
  • *
  • Mensajes: 22
Re: Bootloader 18f67j10
« Respuesta #10 en: 11 de Agosto de 2009, 19:28:56 »
Hola Suky, estoy tratando de usar el AN851 con el CCS, siguiendo tus consejos he programado el PIC18F452 con el booloader, todo funciona OK   :-/ hasta la parte de programacion  de la aplicacion, es decir el PIc es reconocido por el programa Pic18QP, inclusive puedo programar la aplicacion pero mi problema esta en que por algun motivo cuando programo el pic con la aplicacion se modifica algunos sectores del bootloader,   :(  no funciona mi aplicacion y  tampoco puedo volver al modo bootloader, tienes algun comentario   :shock:

Desconectado Suky

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 6758
Re: Bootloader 18f67j10
« Respuesta #11 en: 11 de Agosto de 2009, 23:29:22 »
Agregaste lo siguiente al programa realizado en CCS?

Código: C
  1. #define VECTOR_RESET 0x200
  2. #define VECTOR_INTERRUP 0x208
  3. #build(reset=VECTOR_RESET, interrupt=VECTOR_INTERRUP)
  4.  
  5. #org 0x00, 0x1FF {} // Protejer este espacio

Agregando esto no debería de haber problemas  :?

Saludos!
No contesto mensajes privados, las consultas en el foro

Desconectado Alexandra

  • PIC10
  • *
  • Mensajes: 22
Re: Bootloader 18f67j10
« Respuesta #12 en: 12 de Agosto de 2009, 15:22:59 »
Citar
#define VECTOR_RESET 0x200
#define VECTOR_INTERRUP 0x208
#build(reset=VECTOR_RESET, interrupt=VECTOR_INTERRUP)
#org 0x00, 0x1FF {} // Protejer este espaci

Hola Suky, he incluido el codigo que me sugeriste, pero nada, hasta el momento ya puedo conectarme con el pic usando el P18QP.exe, puedo entrar al modo boot, puedo grabra el codigo de mi aplicacion en el pic usando el bootloader, inclusive puedo leer lo que he grabado, pero cuando presiono el boton de " ejecucion normal" supuestamente el pic deberia de entrar al modo de operacion normal, pero no lo hace y tampoco puedo regresar al modo boot, para regresar tengo que grabar nuevamente el pic con el codigo del bootloader o tengo que modificar la ultima direccion del la memoria EEprom poniendolo a 0xFF, por que cuando despues de programar el pic con el bootloader,  le indico que vaya al modo de ejecucion normal esta direccion de la eeprom se escribe con 0x00 y no hay manera de entrar al modo boot a menos que modifique este valor,  la aplicacion en modo normal no tiene problemas por que ya lo he probado sin usar el bootloader y todo funciona OK.
Agradeceria tus comentarios..



 

anything