Las memorias EEPROM tienen un retardo que puede ser entre 5 a 10mseg por byte (para la escritura, claro está).
Para optimizar esto y no estar 'todo el tiempo' accesando la memoria, lo que suelen traer es un buffer de 16, 32, 64, 128 bytes, dependiendo del tamaño de la memoria.
Entonces se puede hacer loq eu se llama el "page write". Uno indica la dirección y luego envía tantos bytes seguidos como bytes tenga el buffer.
Para hacer la grabación lo más rápida posible, se usa el método de "acceso" a la memoria.
El Protocolo i2c, prevee que un dispositivo no responda si es que está ocupado.
Mediante esta técnica uno puede un byte, luego verificar el ACK, si no se recibe, reintentar hasta que se de por positivo el acceso.
Con esto hay que tener cuidado ya que el no verificar el ACK puede ser causa de que la memoria simplemente no esté en el bus i2c! En mi caso suelo usar un "timeout" , que es proporcional al máximo tiempo que puede durar una memoria ocupada, el cual depende de cada memoria. En gral ese tiempo sería Twrite x Tamaño Buffer -->
Un caso típico sería
Twrite = 5mseg
Tamaño Buffer = 16 bytes
TiempoTimeout > 80mseg.
Esa es la forma más optima de acceder a una memoria i2c, no la de usar timers para esperar que luego de enviar un dato se 'grabe solo', porque el tiempo puede variar de una memoria a otra.
Para la lectura no hay retrasos de ningun tipo, es inmediata.
Saludos[/quote]
danielgarcia39 dijo:
tocaria ver el codigo para saber como estas manejando el retardo estas memoria tienen una
funcion que se implementa para saber cuando termino el ciclo de escritura llamado ACKNOWLEDGE POLLING.
en el datasheet se encuentra que en el peor de los casos para escribir 1 byte se demora 5,37 ms y 128 bytes 687 ms esto a 100khz, lo mas probable es que hay algun eror en como se esta manejando el retardo.
coloque el codigo para poder verificarlo
amigos, ya encontre el problema, pensaba yo k era cosa de esperar el "ACKNOWLEDGE POLLING" pero, no, hay k considerar los 5ms de retardo k demora en escribir despues del "ACKNOWLEDGE POLLING", (eso en la 24LCxx)...asi k cuando llega el "ACKNOWLEDGE POLLING" le pones el delay de 5ms(en mi caso) y listoco

ese era el problema, ya k el "ACKNOWLEDGE POLLING" solo indica k se solto el bus, pero no k se acepta otro comando
PD: probe la escritura por pagina y esta cosa ahora vuela 16KByte en 2.2 segundos + -
salu2 y gracias por responder, espero les sirvan los datos k puse para k no les pase lo mismo
chaos
ya habia posteado esto
el problema esta resuelto desde esa fecha, ahora toy en la emulacion...recuerdas?
PD2: estoy en desacuerdo contigo respecto a esto :
Twrite = 5mseg
Tamaño Buffer = 16 bytes
TiempoTimeout > 80mseg.
ya que los 5mseg(en algunas eeprom) es el tiempo que demora en escribir un byte, solo cuando escribes byte a byte, si estas en modo pagina se demora 5mseg. en escribir toda la pagina, no seria gracia esperar 80 segundos para escribir 16KB
chaos
