Calificación:
  • 0 voto(s) - 0 Media
  • 1
  • 2
  • 3
  • 4
  • 5
DUDA bootloader para pic
#1
Buenas a todos
Hace mucho que me manejo con PICs pero siempre los programo con PICkit 3, Alguno sabe de un buen tutorial, con ejemplos de como meterle bootloader al pic para poder programarlo por USB o UART?
Un saludo
Citar
#2
Busca el pinguino, lleva un bootloader para cargarlo por usb
Citar
#3
El bootloader es un hex que cargas con el programador via ICSP, como cuando grabas un programa normal. Luego ya, ese micro lo puedes programar via USB.
Citar
#4
Lamentablemente para cada tipo de micro vas a necesitar un bootloader adaptado a este... caracteristicas como la frecuencia del cristal, asi como la cantidad de memoria de programa que tiene cada micro hacen que cada bootloader sea diferente dependiendo del micro... no es lo mismo establecer una conexion via uart para reescribir el firmware con una conexion establecida a 56000 baudios utilizando un cristal de 4mhz que con uno de 20mhz (Los fuses cambian... la declaracion de frecuencia necesaria para los __delay() cambian... etc)

Si quieres encontrar informacion te recomiendo que te centres en buscar el bootloader de un pic en especifico... microchip proporcionaba ya algunos bootloader para cargar, yo los use hace tiempo e incluso adapte uno de otro micro para funcionar con un micro no soportado... eso si, asegurate bien de ajustar los fuses al grabarlo... y sobretodo de no activar el fuse de proteccion de codigo.

El mayor ejemplo de la aplicacion del bootloader hoy en dia es arduino... es muy comodo la verdad. Revisare por mi disco duro a ver si encuentro los bootloader de microchip que tenia ademas del programa utilizado para enviar el .hex...
Citar
#5
(27-11-2017, 06:51 PM)fbforos escribió: Busca el pinguino, lleva un bootloader para cargarlo por usb

Le echaré un vistazo, gracias Gran sonrisa

(27-11-2017, 10:19 PM)grafisoft escribió: El bootloader es un hex que cargas con el programador via ICSP, como cuando grabas un programa normal. Luego ya, ese micro lo puedes programar via USB.

Buenas.
Si, lo sé pero nunca he tenido muy claro que tipo de bootloader o si luego en el código normal con el que genero un hex debo hacer alguna cosa para poder cargarlo por usb una vez tiene el bootloader.
Seguiré investigando jeje gracias

(28-11-2017, 01:10 AM)Shellmer escribió: Lamentablemente para cada tipo de micro vas a necesitar un bootloader adaptado a este... caracteristicas como la frecuencia del cristal, asi como  la cantidad de memoria de programa que tiene cada micro hacen que cada bootloader sea diferente dependiendo del micro... no es lo mismo establecer una conexion via uart para reescribir el firmware con una conexion establecida a 56000 baudios utilizando un cristal de 4mhz que con uno de 20mhz (Los fuses cambian... la declaracion de frecuencia necesaria para los __delay() cambian... etc)

Si quieres encontrar informacion te recomiendo que te centres en buscar el bootloader de un pic en especifico... microchip proporcionaba ya algunos bootloader para cargar, yo los use hace tiempo e incluso adapte uno de otro micro para funcionar con un micro no soportado... eso si, asegurate bien de ajustar los fuses al grabarlo... y sobretodo de no activar el fuse de proteccion de codigo.

El mayor ejemplo de la aplicacion del bootloader hoy en dia es arduino... es muy comodo la verdad. Revisare por mi disco duro a ver si encuentro los bootloader de microchip que tenia ademas del programa utilizado para enviar el .hex...

Genial, muchas gracias, miraré en microchip a ver si encuentro para los pics de los que dispongo Sonrisa
Citar
#6
Recuerdo que en los hex que generaba posteriormente para cargarlos usando bootloader, tenia que indicar la posición de memoria donde empezaba la memoria libre del micro, si no chafaba el bootloader. Hablo ya de unos cuantos años, quizás esto cambiara.
Citar
#7
Umm, no recuerdo haber tenido que especificar la direccion de comienzo de aquella... y no, para cargarlo no habia que hacer nada raro ni tocar el codigo.

La unica restriccion era que si tu bootloader ocupaba digamos 128 bytes y tu pic tenia de memoria de programa 1024bytes, solo podrias escribirle encima 896 bytes sin chafarlo, ya que el bootloader se cargaba al final de la memoria del programa. Si no tenias esto en cuenta... pues se chafaba el bootloader y ya no arrancaba nunca mas al corromperse el programa.

En resumen, la operacion del microcontrolador con el bootloader es que una vez arranca, el vector de arranque del micro tiene la direccion de comienzo del bootloader cargada, el bootloader carga, hace toda la cacharrada que tenga que hacer y tras terminar ejecuta un salto hacia el programa principal.
Esto es lo que yo recuerdo del tema... puede que este equivocado o la info este desactualizada, ya que como he dicho, hace mucho tiempo que no toco este tema.

Te dejo un link a mi carpeta del dropbox donde guarde en su momento los bootloader que tenia, alguno de ellos lo adapte yo:
https://www.dropbox.com/sh/4vg5cd45cxr70...1KaBa?dl=0

Por cierto... OJO con las configuraciones de puertos y los registros al utilizar bootloaders... no es lo mismo arrancar un programa grabado directamente con un programador que haciendolo con un bootloader, los registros como la configuracion de entradas/salidas así como la del uart pueden diferir de como estarían al iniciar el microcontrolador desde 0 con un programa limpio sin bootloader. Tiene sentido, ya que el bootloader a veces toca registros internos y configuraciones para hacer sus operaciones, un ejemplo es la configuracion inicial que hace del uart para poder comunicarse... nada asegura que tras arrancar tu programa principal el uart no siga habilitado o que la configuracion de velocidad difiera de la que habria arrancando el micro sin bootloader.

Lo aviso porque recuerdo haber tenido algun problema y haberme vuelto loco intentando averiguar porque un programa me iba en un micro y en otro no, para al final acabar descubriendo que algún registro quedaba "mal" configurado por culpa del bootloader.... para evitar estas sorpresas recomiendo el buen habito de inicializarlo todo al inicio, no es bueno dejar cosas en el aire porque asumamos que por defecto tal registro tiene tal valor o que los puertos sin configurar "son entradas".
Suerte con ello.
Citar
#8
(28-11-2017, 11:36 PM)Shellmer escribió: Umm, no recuerdo haber tenido que especificar la direccion de comienzo de aquella... y no, para cargarlo no habia que hacer nada raro ni tocar el codigo.

La unica restriccion era que si tu bootloader ocupaba digamos 128 bytes y tu pic tenia de memoria de programa 1024bytes, solo podrias escribirle encima 896 bytes sin chafarlo, ya que el bootloader se cargaba al final de la memoria del programa. Si no tenias esto en cuenta... pues se chafaba el bootloader y ya no arrancaba nunca mas al corromperse el programa.

En resumen, la operacion del microcontrolador con el bootloader es que una vez arranca, el vector de arranque del micro tiene la direccion de comienzo del bootloader cargada, el bootloader carga, hace toda la cacharrada que tenga que hacer y tras terminar ejecuta un salto hacia el programa principal.
Esto es lo que yo recuerdo del tema... puede que este equivocado o la info este desactualizada, ya que como he dicho, hace mucho tiempo que no toco este tema.

Te dejo un link a mi carpeta del dropbox donde guarde en su momento los bootloader que tenia, alguno de ellos lo adapte yo:
https://www.dropbox.com/sh/4vg5cd45cxr70...1KaBa?dl=0

Por cierto... OJO con las configuraciones de puertos y los registros al utilizar bootloaders... no es lo mismo arrancar un programa grabado directamente con un programador que haciendolo con un bootloader, los registros como la configuracion de entradas/salidas así como la del uart pueden diferir de como estarían al iniciar el microcontrolador desde 0 con un programa limpio sin bootloader. Tiene sentido, ya que el bootloader a veces toca registros internos y configuraciones para hacer sus operaciones, un ejemplo es la configuracion inicial que hace del uart para poder comunicarse... nada asegura que tras arrancar tu programa principal el uart no siga habilitado o que la configuracion de velocidad difiera de la que habria arrancando el micro sin bootloader.

Lo aviso porque recuerdo haber tenido algun problema y haberme vuelto loco intentando averiguar porque un programa me iba en un micro y en otro no, para al final acabar descubriendo que algún registro quedaba "mal" configurado por culpa del bootloader.... para evitar estas sorpresas recomiendo el buen habito de inicializarlo todo al inicio, no es bueno dejar cosas en el aire porque asumamos que por defecto tal registro tiene tal valor o que los puertos sin configurar "son entradas".
Suerte con ello.

Genial, muchas gracias por tu respuesta, te lo has currado jejeje a ver si esta tarde puedo hacer alguna prueba.
Un saludo
Citar