TODOPIC

Microcontroladores PIC => Todo en microcontroladores PIC => Mensaje iniciado por: bitpic en 10 de Noviembre de 2012, 17:00:47

Título: SD Card Bootloader
Publicado por: bitpic en 10 de Noviembre de 2012, 17:00:47
Hola a todos,

Me gustaría saber si es posible hacer un bootlader desde una SD Card. La cuestión es que tu pongas el archivo .hex o .bin en una memoria SD y mediante un Bootloader se reprograme el PIC ¿Alguien lo ha probado?

Esto sería lo ideal, que el mismo micro principal de la aplicación se reprograme solo (esto lo he visto hacer con un ARM, pero con PIC no y ya va siendo hora ejjeeje).

En caso de que no sea posible ¿se podría hacer de la siguiente manera?:

- A demás del PIC principal que controla toda la aplicación se añadiría un pequeño PIC que sea capaz de leer archivos FAT de una memoria SD. A medida que va leyendo el archivo lo iría enviando por el puerto serie al PIC principal.

- Este PIC principal debería llevar un bootloader normal, de los que se reprograman por el puerto serie y de esta manera tendríamos un Bootloader con SD card.

Lo malo de esta manera de hacer el bootloader es que hay que añadir un microcontrolador más a la aplicación.

Y ahora vienen mis dudas:

- ¿Existen librarías para leer/escribir archivos FAT32 con un PIC?
- He visto que un forero (Sucky) hizo una librería que funcionaba bien ¿Alguien la a probado? ¿Microchip tiene librerías para manejar FAT32 en SD cards?

- El bootloader por puerto serie solo envía los datos del .hex por el puerto serie o además envía algún comando para que el PIC entre en modo Boot?
- ¿Hay algún tipo de protocolo que se deba implementar en el PIC que simulará el bootloader por puerto serie?

Saludos.

Título: Re: SD Card Bootloader
Publicado por: fantaxmax en 10 de Noviembre de 2012, 23:07:52
lo que puedes hacer, que dista mucho de lo que explicas aca, es hacer un interprete de tu propio lenguaje, en la tarjeta de memoria pasas tu programa en un archivo de texto plano, y ese archivo lo copias a una memoria interna, ejemplo una 24lc512, con esa tienes mas que suficiente para un programa bastante grande, luego el pic, cuando inicie verificara que el programa almacenado en la memoria interna sea el mismo que el de la tarjeta, si es que existe, si es el mismo o no hay tarjeta, el pic ejecutara el programa almacenado en la memoria, cuando insertes una tarjeta y los programas sean distintos, el pic debera reescribir su programa en la memoria, con un previo borrado total,

creo me explique bien, pero reformulo la idea:

-programas un pic para que sea interprete de tu propio lenguaje, o puede ser uno ya existente, pero creo que entenderas mejor el tuyo
-en un archivo del bloc de notas, escribes un programa para tu pic
-pasas tu programa a la tarjeta SD con un nombre ya predefinido en el programa del pic
-en el programa del pic, debes añadir la opcion de interrupcion cuando insertes la SD, lea la SD y copie el programa si es necesario a la memoria interna, con memoria interna me refiero a la 24lc512.
-una vez copiado comienze la ejecucion del mismo.

Título: Re: SD Card Bootloader
Publicado por: Nocturno en 11 de Noviembre de 2012, 03:17:22
Siempre que el PIC tenga la capacidad de escribir en su zona de programa en tiempo de ejecución, se podrá hacer un bootloader de cualquier tipo, y también desde una SD.

El bootloader normalmente se ejecuta al ocurrir determinada condición, por ejemplo, que se toque un pulsador, que al arrancar haya un jumper puesto, que llegue un comando por Ethernet, ..., queda a gusto del programador elegir el evento que más le convenga.

Aquí hay un ejemplo de bootloader con tarjeta SD:
http://www.microchip.com/forums/tm.aspx?m=402873
Título: Re: SD Card Bootloader
Publicado por: bitpic en 11 de Noviembre de 2012, 06:07:59
Hola,

Fantaxmax:
Me parece que tu solución es más complicada que el bootloader, supongo que alguien puede haberlo hecho de esta manera, pero hacer un interprete de código en el PIC me parece más complicado que el bootloader.

Nocturno:
Lo de la condición para entrar en modo bootloader lo tenía claro, lo que pensaba que igual se usaba un comando o protocolo estandarizado, pero pensándolo bien te lo puedes hacer a tu manera. Lo que no me queda claro es que tipo de fichero necesita el PIC, he trabajado con bootloader, pero no me he parado a pensar como funcionaba. Supongo que lo ideal es hacer un fichero .bin y los datos de este fichero se van grabando en la memoria de programa directamente. Si lo haces con un .hex supongo que el PIC tendrá que interpretarlo y convertirlo a .bin.

A ver si tengo las ideas claras (me baso un poco en suposiciones ya que hace tiempo que no toco PICs:

- Supongo que igual que hay instrucciones para grabar datos en flash también habrá instrucciones para grabar en memoria flash de programa, o sea que el propio PIC puede modificar su código de programa.

- Entonces lo único que hay que hacer es una función que este situada en una parte de la memoria de programa que no se sobre-escriba, que en determinada condición (ya sea un pulsador, un comando o la detección de una SD, o cualquier condición que tu le programes) reciba los datos en binario (por eso comentaba que sería mejor lo del .bin) y vaya sobre-escribiendo el programa principal (pero no el trozo de programa del Bootloader).

Visto así parece sencillo, pero no creo que esto sea así. ¿Podéis confirmarme que es así de sencillo?

Ademas supongo que de alguna manera habrá que indicar al PIC que en lugar de empezar el programa desde las primeras posiciones de memoria (que es donde se suele alojar el bootloader)  tiene que hacerlo a partir de X posición.

Nocturno, me he estado mirando el ejemplo que decías y no parece tan fácil. Voy a ver si encuentro un bootloader serie que supongo que será más sencillo de entender.

Saludos.
Título: Re: SD Card Bootloader
Publicado por: Nocturno en 11 de Noviembre de 2012, 06:32:17
Mírate el ejemplo de bootloader serie que trae CCS, es muy sencillito de entender y te aclarará bastante cómo funciona.

Respecto al formato del fichero, lo mejor es usar HEX y así te servirán los programas tal y como salen del compilador.
Título: Re: SD Card Bootloader
Publicado por: bitpic en 11 de Noviembre de 2012, 08:57:25
Ok, eso haré Nocturno.

Solo una pregunta más. Con CCS ya había trabajado hace tiempo y la verdad es que me fue muy bien, pero ahora quería probar con las herramientas de microchip, en concreto con MPLAB XC la versión gratuita.

¿Cual me recomendáis CCS o XC (o C18)?

Recuerdo que con CCS venían muchos ejemplos que iban muy bien y lo veía un poco más intuitivo, pero en el MPLAB no encuentro muchos ejemplos, también puede ser que no sepa muy bien donde encontrarlos.
Título: Re: SD Card Bootloader
Publicado por: Nocturno en 11 de Noviembre de 2012, 09:39:28
Cuestión de gustos, yo prefiero CCS por cómodo, aunque no es estándar. Pero encontraras muchos foreros que prefieren usar compiladores estándar prescindiendo de las facilidades de CCS
Título: Re: SD Card Bootloader
Publicado por: Suky en 11 de Noviembre de 2012, 10:50:39
Todo es cuestión de gustos, yo sin duda elegiría C18 o XC8  :undecided: Ahora, la implementación de un bootloader SD Card con sistemas de archivos en un PIC18 puede ser poco adecuado, por el espacio que ocuparía. Si buscas Bootloader PIC32 tenes varios tipos, USB, RS232, Ethernet y SD Card.


Saludos!
Título: Re: SD Card Bootloader
Publicado por: bitpic en 11 de Noviembre de 2012, 12:28:02
ufff esta reñida la cosa  :D

Para mi también es más fácil de usar el CCS, pero me gustaría usar el XC por ser de Microchip y gratuito, pero estoy ahora mismo intentando hacer un "blinking led" y se me a complicado  :D  :oops:

Bueno, voy a probar unos días el XC8 a ver que tal y si no siempre podré pasarme al CCS.

Gracias. Saludos.
Título: Re: SD Card Bootloader
Publicado por: bitpic en 11 de Noviembre de 2012, 14:04:51
OK, ya me funciona el "blinking led" que susto jejeje  :D . Era problema de la configuración del PIC. Me queda mucho por aprender.

Sucky: por lo que veo en San Google tienes que ser un crack porque hay muchos foros donde se te nombra. En algún foro nombraban un tutorial que habías hecho, ¿¿¿no tendrás uno de XC8???  :oops:

¿porque no puedo hacer esto?

#pragma config WDTEN = OFF

en cambio esto si:

#pragma config CONFIG1L = 0x80


¿Que diferencia hay? ¿no se puede configurar el WDTEN sin hacerlo con CONFIG1L?



Saludos.
Título: Re: SD Card Bootloader
Publicado por: Nocturno en 11 de Noviembre de 2012, 14:41:11
Claro que es un crack  :D
Mira qué tutorial nos regaló (http://www.micropic.es/mpblog/2010/08/tutorial-c18/)
Título: Re: SD Card Bootloader
Publicado por: bitpic en 11 de Noviembre de 2012, 15:01:48
Perfecto!!! lo tengo desde hace tiempo, de hecho lo tengo ahora mismo en mis manos encuadernado y todo  :D

Aunque tu no te quedas atrás Nocturno, es envidiable cuanta sabiduría en este foro ejeejej por eso me dejo caer por aquí.

Una cosa, veo que este tutorial es de C18, ¿hay mucha diferencia entre C18 y XC8? Todavía no me lo he leído, pero a simple vista parecen muy parecidos.

Saludos.
Título: Re: SD Card Bootloader
Publicado por: Suky en 11 de Noviembre de 2012, 17:24:01
Tutorial de XC8 (http://www.micros-designs.com.ar/tutorial-xc8-introduccion/) El problema que indicas puede ser por cambio de nombre del fuse, porque debería de funcionar de esa manera. En teoría es compatible con C18 y Hitech.

Aunque tu no te quedas atrás Nocturno, es envidiable cuanta sabiduría en este foro..

+1!!!


Saludos!
Título: Re: SD Card Bootloader
Publicado por: Alejodominguez en 11 de Noviembre de 2012, 18:20:29
Hola a todos,

Me gustaría saber si es posible hacer un bootlader desde una SD Card. La cuestión es que tu pongas el archivo .hex o .bin en una memoria SD y mediante un Bootloader se reprograme el PIC ¿Alguien lo ha probado?

Por supuesto que es posible, yo lo tengo implementado en PIC32MX, para actualizar por USB, con tarjeta SD y con Pendrive USB.
Puedes bajarte la nota aplicativa AN1388 y los fuentes de la página de Microchip.

En mi caso, además modifiqué los fuentes para añadir una encriptacion XTEA para dar las actualizaciones a mis clientes, de manera que estén protegidas para evitar que me las copien o las desensamblen. También modifiqué el bootloader para entrar en modo automático al conectar al PC o al introducir la tarjeta SD, ya que los fuentes originales, te obligan a pulsar un switch para entrar en modo bootloader.

Puedes descargarte mi aplicativo, en su versión básica, para PIC32 (HEX y programa para PC), del siguiente enlace:
http://www.pinballsp.com/PinballSP_Encrypted_Bootloader_Solution_Basic_Version.zip


Citar
- ¿Existen librarías para leer/escribir archivos FAT32 con un PIC?

Si, bájate el paquete de Microchip Solutions de la web de Microchip, tienes infinidad de ejemplos y código fuente.


Citar
- El bootloader por puerto serie solo envía los datos del .hex por el puerto serie o además envía algún comando para que el PIC entre en modo Boot?
- ¿Hay algún tipo de protocolo que se deba implementar en el PIC que simulará el bootloader por puerto serie?


No te recomiendo el puerto serie, es un puerto obsoleto, lento y prácticamente ya no se usa.
Mejor usa USB.




Título: Re: SD Card Bootloader
Publicado por: bitpic en 12 de Noviembre de 2012, 03:26:47
Alejodominguez: me bajaré la nota AN1388 para echarle un ojo, me alegra saber que a ti te ha servido esta nota, en otros foros decían que no funcionaba bien.

Suky: tienes manuales para todo, no me extraña que en todos los foros de PICs hablen de ti ejejej ;-)

Gracias por vuestros a portes, me han servido para mucho.  :-/


Saludos