• Domingo 29 de Septiembre de 2024, 03:28

Autor Tema:  Leer Y Ejecutar Programa De Una Eeprom Externa.  (Leído 3465 veces)

jgpeiro

  • Miembro activo
  • **
  • Mensajes: 67
    • Ver Perfil
Leer Y Ejecutar Programa De Una Eeprom Externa.
« en: Miércoles 17 de Agosto de 2005, 21:46 »
0
Pues eso, estoy diseñando un circuito con un PIC conectado a una EEPROM.

Mi intencion es almacenar el programa principal (configuraciones, ISR...)en la flash del  PIC y las rutinas en la EEPROM y que el PIC las copie a su flash ,cuando el programa principal las solicite, para ejecutarlas.

-¿que soluciones hay para esto? parece facil pensar que simplemente compilo la rutina como si empezase en la linea del programa 800(x ejemplo)y cada vez que se necesita se carga en la flash y ya ta.
-¿Pero que ocurre si esta rutina ocupa mas de lo que cabe en el PIC? podria hacer que el propio PIC la partiese en cachos y se fuese copiando y ejecutando los cachos?
-¿Que ocurre si durante la ejecucion de un cacho de rutina, este llama a un cacho de rutina que no ha sido cargado xq no cabia?
-¿Que ocurre si durante la ejecucion de una rutina,se genera una interrupcion y esta misma necesita cargar de la EEPROM otra rutina distinta?

Llevo un par de dias y creo que he encontrado una solucion algo complicada y probablemente irrealizable. Estos serian los pasos a seguir:
1 Que el propio PIC parta las rutinas en cachos que quepan dentro del PIC.
2 leyendo instruccion a instruccion el cacho de rutina a cargar y modificando todos los brach, call y goto que ayan.
3 Ademas creando una PILA STACK para las rutinas que se van llamando y cargando., y que cada vez que se genera una IRQ durante la ejecucionde una rutina se guarde el "nombre" de la rutina q estaba ejecutandose.

No existen soluciones mas sencillas para esto? A mi me mosquea un poco que un PIC tenga una memoria de programa de 48Kbytes y un ProgramCounter de 24bits...

Por cierto, tengo en cuenta que el tiempo de escritura de un byte de flash (x ejemplo 2mS), pero creo que puede ser despreciable xq he pensado que en 1000 lineas de programa (2segundos en cargarse) se puede meter un programa que tarde mucho mas en ejecutarse.

En unos dias are un dibujo de como pienso que se podria solucionar.
¿que falta despues de morir que hubiese anter de nacer?, ¿es posible la reencarnacion?

Huguen_aus_Tirol

  • Miembro MUY activo
  • ***
  • Mensajes: 318
    • Ver Perfil
    • http://www.erhard-automation.co.cc
Re: Leer Y Ejecutar Programa De Una Eeprom Externa.
« Respuesta #1 en: Miércoles 17 de Agosto de 2005, 23:04 »
0
Hola jgpeiro! Bueno, en primer lugar, existen tantos modelos de PIC's que facilmente encontrarías uno donde quepa tu programa completo; pero veamos que se puede hacer... :)
Si tu EEPROM es del tipo I2C o SPI, podrías hacer una rutina, en la flash, donde se encargue de leer la memoria externa y volcarla a la flash, a partir de una dirección conocida. Luego saltas a esta dirección y se ejecuta el código que hayas cargado (un reset). Se debería buscar la vuelta con el tema de las interrupciones; podrías verificar cada una de las interrupciones cuando se produce alguna, y desviarla de acuerdo a si la necesitas o no. Por supuesto, cuando cargues la flash, deben estar todas las interrupciones inhabilitadas!
El código que cargues en el PIC debe estar completo, no puedes dejar parte fuera.
Lo que intentas hacer, si no me equivoco, es algo similar a un PLC. En los autómatas es algo distinto; el micro va leyendo la EEPROM y actuando según lo que lea. Pero en este caso no se carga, desde la memoria externa, el código mismo del micro a la memoria interna.
Otra cosa: hay un límite en la cantidad de ciclos de escritura en flash; según los manuales, de 1000 ciclos :( Nunca me puse a contar si son 1000 o no, pero te puedo asegurar que sí hay un límite...
Saludos, y espero puedas solucionar tu problema :hola:

jgpeiro

  • Miembro activo
  • **
  • Mensajes: 67
    • Ver Perfil
Re: Leer Y Ejecutar Programa De Una Eeprom Externa.
« Respuesta #2 en: Jueves 18 de Agosto de 2005, 00:02 »
0
10,000 erase/write cycle (min.) for
industrial temperature range, 100K (typical)

Eso me obliga a plantearmelo todo de una manera un poco distinta, ya no me puedo permitir que el micro este renovando sus rutinas constantemente...Quizas reserve una parte de 4Kinstructions o algo asi para rutinas almacenadaas en la EEPROM.
De esta manera el tamaño tendria que ser siempre de un maximo de 4, pero no tengo que partirlas ni por supuesto puedo permitir que una ISR(rutina de servicio a la interrupcion) cambia la rutina, pero me ahorro tb la pila stack...
Bueno, gracias por el dato, era algo bastante importante.

Lo que yo kiero hacer es un aparato al que luego todo el mundo pueda introducirle sus propias aplicaciones, por eso lo de la EEPROM externa con mas memoria. Yo hago el programa principal con un pequeño menu y un par de aplicaciones de ejemplo, y luego ya cada uno que kiera que le de el uso qeu desee.

El aparato es un circuito de 36x48mm con dsPIC30F4013, una RAM-FLASH (AT45DB321C)de 32Mb, un conector de TRANSFLASH o miniSD, un sensor de acceleracion de 3 ejes, un LCD de nokia a color, 3 leds, un boton, un microfono, un conversor DAC para audio y un coenctor mini-jack.  

Me gustaria hacerle un programa principal que permita ver que aplicaciones tiene(una agenda, un reloj, un grabador de voz, juegos...) y q luego permita que cada uno pueda hacer la aplicacion que kiera (grabandola en la RAM-FLASH).

Si solo cada vez que el usuario accede a una nueva aplicacion, esta se graba en la flash, esto puede dar una vida de...¿tres años?(cambiando treinta veces al dia de aplicacion)
¿que falta despues de morir que hubiese anter de nacer?, ¿es posible la reencarnacion?

Huguen_aus_Tirol

  • Miembro MUY activo
  • ***
  • Mensajes: 318
    • Ver Perfil
    • http://www.erhard-automation.co.cc
Re: Leer Y Ejecutar Programa De Una Eeprom Externa.
« Respuesta #3 en: Jueves 18 de Agosto de 2005, 07:09 »
0
Hola! Gracias por la corrección; me había fijado en un manual de los 16F, pero para los 18F y los dsPIC son 100000 ciclos, y no 1000 :)
Lo que podrías hacer es programar el PIC con las rutinas de control de, como tu dices, la agenda, el reloj, el control de juegos, grabador, etc, etc... Estas rutinas las dejas permanentemente en el micro; en una memoria externa, p.e. las populares y económicas memorias de multimedia (para camaras digitales, se consiguen en cualquier tienda del rubro, y de hasta 1 GB sin problemas ;) ) En esta memoria cargas tu aplicación en particular, pero no como código para el PIC, sino te creas tu propio "set de instrucciones" ó "lenguage". Estas instrucciones las lee el PIC y actua según corresponda. Con esto puedes aprovechar más la memoria externa; además, rápidamente, cambiar sin problemas de aplicación (cambiar la memoria, reset, y listo...)
Es algo asi como un PC y un diskette ;)
Bueno, es solo una idea... Espero que en una de esas te sirva y pueda ayudarte en algo!
Tu proyecto es realmente bueno, y espero puedas llevarlo a la práctica!
Saludos :hola:

jgpeiro

  • Miembro activo
  • **
  • Mensajes: 67
    • Ver Perfil
Re: Leer Y Ejecutar Programa De Una Eeprom Externa.
« Respuesta #4 en: Jueves 18 de Agosto de 2005, 16:37 »
0
Por cierto, se puede hacer un programa que mida el numero de veces que permite ser grabada la FLASH de un PIC....

Haces que borre y escriba en la direccion que quieras el dato 0xAA y una vez escrito lo lees y compruebas si el dato es correcto. Si lo es borras ,incrementas un contador de 32bits y escribes 0x55. Compruebas, borras, incrementas el contador...asi hasta que la  el dato no se grabe correctamente.

No es algo util, xq con saber que esta entre 10000 y 100000 sobra xa lo que kiero, pero weno, es una manera de hacerlo....

Por cierto, sigue sin gustarme el tener que hacer que cada rutina ocupe un tamaño maximo de 4Kintrucciones, es que yo estoy empezando a programar los dsPIC en C++, y con nada de programa ya ocupo todo eso. Lo que puedo hacer es que el micro tenga restringidas el numero de veces que puede reescribir el buffer para las rutinas a 30 veces al dia. , Tambien obligar al micro a que, despues de escribir una rutina en su flash, la campare con la de la memoria esterna e indique si hay errores...
Por cierto, ahi va el PCB, cree los esquemas con el PROTEL DxP y pcb tb, aunke no conseguia routearlo adecuadamente. Despues utilice el router de PADS, un programa de mentor graphics, y lo hizo todo el solito, recomiendo que todos los usuarios de protel le echen un vistazo.
El mensaje contiene 1 archivo adjunto. Debes ingresar o registrarte para poder verlo y descargarlo.
¿que falta despues de morir que hubiese anter de nacer?, ¿es posible la reencarnacion?