TODOPIC
Microcontroladores PIC => Todo en microcontroladores PIC => Mensaje iniciado por: Marttyn en 15 de Febrero de 2009, 01:52:56
-
Hasta ahora venia usando memorias eeprom "normales", de la familia 24LCxxx que tienen comunicacion I2C. El problama viene en que estas memorias son bastante lentas para algunas cosas, ya que tardan 5mS en escribir un byte. puede no parecer mucho, pero cuando se quieren guardar 8 bytes en menos de 20mS nos damos cuenta que las cuentas no cuadran...
Seguro que hay otros tipos de memorias mas rapidas, pero la verdad que no conozco... las SPI, si bien pueden comunicarse mucho mas rapido, el tiempo de escritura sigue siendo el mismo: 5mS
que me sugieren?
Gracias y salu2!
-
Si se necesita mover bloques de memoria de màs de 1000 bytes en las eeprom 24LC el asunto se complica màs por el excesivo tiempo y hace la programaciòn màs dispendiosa al quedar el micro esperando todo este tiempo !!!
-
No, no te confundas.
Ambas memorias, tanto SPI como I2c te dan un margen de escritura de 5ms MAXIMO, generalmente lo hace en menos tiempo ,pero para asegurarte dejas pasar tiempo de más.Es lo que le llaman Worse case . Pero, si escribes por páginas el tiempo sería el mismo, así que puedes escribir el comando de escritura, luego le empiezas a mandar los bytes de datos de forma ininterrumpida hasta llenar la página y terminas la escritura.
Ahora lo más importante: No esperes 5ms, chequea el bit de status. Mira la rutina wip polling y con eso el tiempo te bajará muchísimo.
Te paso un link de unas pruebas REALES que he hecho
http://www.todopic.com.ar/foros/index.php?topic=24608.0
Ahí lo tienes ya todo digerido :mrgreen:
-
Buenos dias, lo que comenta el colega PIBE tiene toda la razon la progrmacion de eeprom se hace lenta si sigues una pausa constante y peor aun si escribes o lee byte a byte si revisas bien notaras que si usas las paginacion de las eeprom reducen muchos los tiempo y mas aun si usar la confirmacion si ya la eeprom fue leeida o escrita y asi no pierdes tiempo y ya confirmado si le puedes ordenar nuevamente a la eeprom si esperar mayor tiempo y veras el rendimiento un poc mas notable.
Saludos y de que si hay eeprom mas rapidas si las hay.
Atten.
Alexander Santana.
Barcelona-Venezuela.
-
Gracias chicos por las respuestas!
lo de los 5mS max lo sabia, y si que uso el ACK polling, pero lo que ocurre es que no me gustaria arriesgarme a perder bytes.
lo que no se si entendi bien es lo de escribir por paginas, si mando el byte de control, luego la direccion, y luego 8 bytes, tardara maximo 5mS en total?
otra cosa que no explique bien es que en realidad no tengo que escribir 8 bytes en 20mS, sino un byte cada 2.5mS durante un minuto, por eso me preocupaba que la memoria fuese mas rapida. y el problema es que por mas que ponga un buffer, en algun momento tendre que grabar, y si pierdo 5mS esperando se me escaparan 2 datos en el peor de los casos.
por cierto, para leer un byte tambien tarda ese tiempo?
Salu2
-
Mira, para que te hagas una idea: una 25aa1024 para grabarle TODOS los bytes (131.000) en el modo página y haciéndole wip polling tarda 1 minuto 25 segundos.
Lo de escribir por páginas es así: supongamos que tu memoria es una 24lc256 que tiene páginas de 64bytes , pues por ejemplo empezamos por la dirección 00 00 . Mandamos el byte de comando de escritura, mandamos los 2 bytes de dirección (00 00 en este caso) , mandamos como datos dato el byte 1, byte 2, etc etc etc etc, byte 64, y el comando de stop (creo que en el i2c es bit stop, no lo recuerdo). Das 5 ms de retardo o haces wip polling. Listo.
Para la proxima página haces lo mismo pero empezando en la dirección 00 10 , entiendes?
El puntero dentro de la página va autoincrementándose en uno cada vez que metes un dato. No así las páginas que debes incrementarlas a mano.
-
Que tal efectivamente lo que se ha publicado es correcto. La paginacion es la solucion al problema si se aplica correctamente. Pero si el problema es mucho mas complicado la solucion es utilizar memorias FRAM estas tienen un tiempo de escritura de 1uS (microsegundo) ya si eso no es muy rapido, entonces ya no hay solucion. Las hay con la misma configuracion que las memorias I2C y SPI. Para mas informacion de las mismas:
http://www.ramtron.com/products/nonvolatile-memory/serial.aspx
Saludos y espero haber sido de ayuda.
Elreypic.
-
Wapas las memorias!
Lástima que la que me interesa es alim +3,6v :(
-
Excelente! Esto es lo que buscaba! El unico problema que les veo es que solo las hay en formato SOIC8, y yo necesito que sean intercambiables :? Tendre que hacerles un adaptador
Ya pedi unos samples para ver que tal funcionan :mrgreen:
Este tipo de memoria solo las vende Ramtron? porque no encuentro mas empresas :(
Wapas las memorias!
Lástima que la que me interesa es alim +3,6v :(
Todas tienen su variante de 2.7-3.6V y 5V... excepto la de 512, que solo la hay de 5V. Tu cual buscas?
-
1mbit SPI, ya he estado mirando pero no tienen.