Autor Tema: Bootloader en C  (Leído 9263 veces)

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

Desconectado Nocturno

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 18286
    • MicroPIC
Re: Bootloader en C
« Respuesta #15 en: 24 de Enero de 2007, 12:17:52 »
Si te sirve de ayuda y/o inspiración, aquí hay un Bootloader para dsPIC con código abierto:
http://www.ingenia-cat.com/es/downloads.php

Desconectado maunix

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 4751
    • Mi Sitio Web Personal
Re: Bootloader en C
« Respuesta #16 en: 24 de Enero de 2007, 12:40:06 »
togarha es viable ubicarlo en otra posición de la memoria, el tema es que del micro que yo hablaba es un 18F y cómo dije antes debiera ponerme a ver bien la arquitectura de un dsPIC para darte una respuesta en concreto.

el bootloader lo puedes poner donde te plazca, pero quieras o no los pics (salvo los extremadamente viejos) arrancan o inican el Program Counter de la posicion 0x0000.

Entonces, en los 18F la región BOOT está en la primer página.

Esta región tiene protección de lectura (para evitar que algún vivo lea nuestro código) pero también protección de escritura, para evitar que el PIC se autoescriba en esa región.

Otra cosa que se puede hacer para evitar sobreescritura es que el mismo bootloader controle el rango de posición de memoria de programa que recibe para que evite grabar sobre donde está ubicado.

 
- La soberbia de un Einstein es entendible.. la de un salame es intolerable (A.Dolina)
- En teoría no hay diferencia entre la teoría y la práctica. En la práctica... si la hay.
- Lee, Lee, Lee y luego pregunta.(maunix)
- Las que conducen y arrastran al mundo no son las máquinas, sino las ideas (V. Hugo)
- Todos los hombres se parecen por sus palabras; solamente las obras evidencian que no son iguales.(Moliere)
- Todo debería ser hecho tan simple como sea posible pero no mas simple que eso.(A.Einstein)

Desconectado togarha

  • PIC12
  • **
  • Mensajes: 87
Re: Bootloader en C
« Respuesta #17 en: 25 de Enero de 2007, 04:11:17 »
Wenas!!!

Nocturno:
Gracias por la informacion, ya la conocia, pero como ves cambian un poco los requisitos, y por tanto la programacion (aparte de tener que aprender asm30, que cambia bastante respecto al asm de la serie 16 que es el unico que conozco)...
La idea no es recibir los datos via puerto serie, sino ir leyendo de una memoria externa... Quizas esto no es mucho, pero quizas es bastante (tanto por tamaño como por desarrollo en asm...)

maunix:
La idea seria que el pic controlase la direccion de memoria y evitase programar encima de algo que no queremos...

Saludos,

PS: Parece que esto se anima, se animara del todo???

Desconectado togarha

  • PIC12
  • **
  • Mensajes: 87
Re: Bootloader en C
« Respuesta #18 en: 08 de Febrero de 2007, 04:46:03 »
Buenas,

Ya casi tengo implementado el bootloader, al final ha sido en asm :s y es para PIC24F. No es compatible con dsPIC y no estoy seguro de que lo sea de PIC24H (en ambos por temas de registros y demas...)

Cuando avance un poco mas lo publicare, pero sera en un tema distinto, ya que al final no es en C, sino en ensamblador, y este post tiene mas divagaciones que otra cosa ;)

Gracias a todos, no se si realmente alguno estubo interesado, pero espero que si y que siga interesado en ello...

Un saludo,

Desconectado Milo

  • PIC16
  • ***
  • Mensajes: 101
Re: Bootloader en C
« Respuesta #19 en: 08 de Febrero de 2007, 06:25:50 »


Buennass:

Claro que si, bienvenida sea toda la información, además puede ser la excusa perfecta para empezar con los pic24,

suerte con ello,


saludos,
"En tanto que haya alguien que crea en una idea, la idea vive" Ortega y Gasset

Desconectado reiniertl

  • Moderadores
  • PIC24H
  • *****
  • Mensajes: 1187
Re: Bootloader en C
« Respuesta #20 en: 09 de Febrero de 2007, 13:37:33 »
Cuando me dijeron que tenía que trabajar con PIC18f8722, una de las cosas que más me llamó la atención fue la opción del bootloader, sin embargo, de lo que aprendí en la carrera y lo que plantea en este hilo, me preocupa más el diseño de un equipo que haga uso de esta potencialidad que la programación en sí de código en el bootloader que permita actualizar nuestro firmware.

Hay varias formas de diseño que se me ocurren al especto y en todas ellas lo que menos me llama la atención es cargar con un programador hasta donde está el equipo para meterle el código. Si yo tuviese que molestarme en ir a algún lugar, probablemente lejano, para actualizar el programa de un equipo: además de un programador, multímtero, ..., cargaría con una copia de la tarjeta a cambiar con el programa bien quemado, y si no tuviese esa tarjeta o el equipo no permitiese ese cambio, sencillamente que se quede sin actualizar. Es mejor un equipo funcionando que uno que no lo hace y todo eso donde el diablo dio las tres voces y nadie lo escuchó.

Sin embargo el poder de los bootloader lo veo en el caso donde la actualización se hace desde un terminal remoto, conectado por ejemplo a una LAN a través de algún dispositivo de red. En ese caso yo no tendría que moverme de mi puesto para actualizar el equipo remoto, aquí es donde entra a jugar el bootloader y la opción de copiar el programa en una memoria de espaldo es muy buena opción y se utiliza mucho. Mi PC tiene una opción de actualziar el BIOS desde Internet, pero si la actualización falla, se carga nuevamente desde una memoria ROM con la versión original de la tarjeta, nosotros por supuesto podemos utilizar una FLASH en lugar de la ROM, para tener la versión del sw n-1.

Otra versión del asunto, es el caso en que no hay una red, pero tenemos un montón de tipos que tienen que actualizar este programa en unos equipos regados por la ciudad, entonces le damos una memoria flash. Parecidas a las que usamos para llevar y traer nuestros datos y música. En este caso el tipo (que no sabe nada microcontroladores), llega al lugar conecta su memory flash al equipo y aprieta un botón, se actualiza el programa y se enciende un led verde diciéndole todo OK. Si la cosa falla, cargamos el programa de bakUp y encendemos un led naranja, para que el tipo cuando regrese me diga que vaya a arreglar yo el asunto. En este caso nos ahorramos el programador porque el propio PIC puede escribir en su memoria de programas SIN PROGRAMADOR.

Otro caso es un equipo conectado a una PC, y el usuario descarga de INTERNET, la última actualización del firmware, se conecta por puerto serie o USB y manda a actualizar, si todo está bien se le notifica OK, pero si no es así le decimos que lo intente y lo intente ... hasta que se convenza de botar el aparato y comprarse otro nuevo.

Como pueden ver en ningún caso tiene sentido el uso de un programador, de ninguna clase, y el objetivo fundamental es implementar mecanismos de actualización remota o semi-remota. Con esto quiero hacerles ver que antes de afrontar cualquier diseño lo primero que tenemos que evaluar es cómo va a funcionar el tareco, porque amigos, en este mundo todo tiene un costo, desde el tiempo hasta los circuitos y un diseño cuidadoso vale más que un programa que haga a un equipo sacar la lengua y chiflar.

Por otro lado estos mecanismos son bastante confiables y es por eso que una de las cosas que más tenemos que plantearno es si vale la pena meter una memoria de respaldo, si va a ser flash (más costosa) o ROM (una quilera), etc.

Desconectado togarha

  • PIC12
  • **
  • Mensajes: 87
Re: Bootloader en C
« Respuesta #21 en: 12 de Febrero de 2007, 03:53:17 »
Buenas!

Lo primero siento si esto puede llegar a ofender a alguien...

reiniertl:
Me parece que no he entendido tu divagación. No me refiero que no entienda lo que estas diciendo, sino porque lo estas diciendo. El tema consiste en implementar un bootloader para PIC24 no en si es conveniente hacerlo. La conveniencia de ponerlo o no en un equipo tiene que evaluarla cada desarrollador, pero en el caso final que se decida poner, porque no tenerlo?

Creo que el uso que tu estas haciendo de la palabra programador, no es el mismo que puede haberse llegado a tratar en el post. Tu usas programador como el aparato que es capaz de hacer una programacion ICSP tipica de microchip, mientras que en el post se ha usado el termino programdor como el aparato que es capaz de enviar el codigo de programa al microcontrolador que se tiene que actualizar a si mismo en la forma en que este lo requiera.


Bueno, lo dicho, siento si alguien se ha podido sentir ofendido...

Un saludo,

Desconectado CheKeBo

  • PIC10
  • *
  • Mensajes: 18
Re: Bootloader en C
« Respuesta #22 en: 15 de Marzo de 2007, 15:47:16 »
Hola a todos, a ver si esta sugerencia os puede ayudar.

Yo programa un bootloader para un micro de la casa ATMEL y para evitar el problema del corte a mitad hice lo siguiente.

Cree un programa capaz de leer por la uart los datos y grabarlos en la memoria de programa del micro.

Antes de empezar a grabar nada, como el micro cuando hacia un reset iba directamente a la posición 0000h lo primero que hacia era grabar el codigo de un salto incondicional a la posición de memoria donde estaba en bootloader, luego grababa todo el codigo y al final le añadia lo que tenia que grabar en la posición 0000h.

De esta forma si se cortaba en cualquier momento la comunicación, apagando y volviendo a encender el programa que se ponia en marcha era el bootloader, siempre podia volver a intentar la grabación, y si se habia grabado bien, funcionaba el programa nuevo.

No se si me he explicado, pero realmente funciona bien. Ahora solo falta aplicarlo a la tecnologia de microchip.

Espero que os ayude la idea.

CheKeBo.

Desconectado ASTROCAR

  • PIC24F
  • *****
  • Mensajes: 664
Re: Bootloader en C
« Respuesta #23 en: 13 de Agosto de 2010, 09:01:10 »
Hola a todos, a ver si esta sugerencia os puede ayudar.

Yo programa un bootloader para un micro de la casa ATMEL y para evitar el problema del corte a mitad hice lo siguiente.

Cree un programa capaz de leer por la uart los datos y grabarlos en la memoria de programa del micro.

Antes de empezar a grabar nada, como el micro cuando hacia un reset iba directamente a la posición 0000h lo primero que hacia era grabar el codigo de un salto incondicional a la posición de memoria donde estaba en bootloader, luego grababa todo el codigo y al final le añadia lo que tenia que grabar en la posición 0000h.

De esta forma si se cortaba en cualquier momento la comunicación, apagando y volviendo a encender el programa que se ponia en marcha era el bootloader, siempre podia volver a intentar la grabación, y si se habia grabado bien, funcionaba el programa nuevo.

No se si me he explicado, pero realmente funciona bien. Ahora solo falta aplicarlo a la tecnologia de microchip.

Espero que os ayude la idea.

CheKeBo.

Hola buenos dias , y disculpa lo tarde en este tema se que ya tiene mucho tiempo sin tocarlo pero lo que entiendo de usted es que con atmel cuando va actualizar ya no le importa la version anterios lo que le importa es realmente que actualice asi que si en el proceso de actualizacion se corta por cualquier razon cuando se restaure la cosa que entre nuevamente en bootlader y cargar la actualizacion y listo. en fin es bastante logico de hecho lo que se quiere es eso que se actualice, malo seria que luego que se corte el proceso ya el micro no entre mas en modo bootalder y asi se perderia todo.

Saludos y estamos en contacto.

Atten.
Alexander Santana.
Venezuela-Barcelona.
EL APRENDER ES NADA; MEJOR ES COMPARTIR EL APRENDIZAJE