Estimación del tiempo de lectura de EEPROM

1

Esta es una pregunta en relación con Las transmisiones de USB bloquean mi GUI de software .

Publiqué esta pregunta por separado para poder aclarar mi pregunta por separado de la otra.

Tengo el mismo código de operación aquí y me gustaría preguntar: ¿Cómo podemos estimar el tiempo de lectura de EEPROM de la comunicación I2C que se ejecuta a 100kHz?

main()
{
    usbinit(); // usb initialization
    while(1)
    {         
        x=do_eepromread();
        UsbTasks(); // does usb works
        yourtasks(); //sends the buffer
    }
}

Confío en que leer una parte de los datos de EEPROM no causará ningún daño que hacer adc_conversions y cálculos.

No quiero una duración de tiempo precisa. Pero confío en que la lectura se produzca con bastante rapidez en lugar de escribir que tomará un mínimo de 5 ms.

No pude encontrar ningún tiempo de lectura de EEPROM, aunque es porque depende de la velocidad de comunicación en baudios (I2C aquí @ 100kbps).

Me encantaría tener sus opiniones e información con respecto a este problema.

    
pregunta Rookie91

2 respuestas

2

Se puede calcular leyendo la hoja de datos de EEPROM y sumando el tiempo necesario para transferir todos los bits, como lo sugirió Ignacio Vázquez-Abrams en un comentario. Debido a que ya seleccionó un dispositivo y lo tiene funcionando, puede que le resulte más fácil simplemente medirlo. Normalmente haría algo como lo siguiente y utilizaría un alcance para medirlo:

// Take an I/O pin high
x=do_eepromread();
// Take the I/O pin low

Si no tiene un alcance, puede encerrar la lectura en un bucle y tal vez encender y apagar un LED con algo como esto:

uint32_t i;
// Turn on LED
for (i=0; i < 100000; i++)
    x=do_eepromread();
// Turn off LED

Dependiendo de la cantidad de bits que se transfieran, la segunda parte del código probablemente tardará unos 30 segundos o más, lo que debería ser capaz de medir con una precisión razonable con un cronómetro y luego dividirse por 100,000.

Ambos métodos introducirán algún error debido al tiempo para alternar una línea de E / S y, en este último caso, los retrasos del bucle, pero creo que para tus propósitos deberían estar lo suficientemente cerca y podrías encontrarlo más fácil que intentarlo. para calcularlo exactamente.

    
respondido por el PeterJ
2

El tiempo de lectura real en una SEEPROM es básicamente instantáneo (un ciclo de reloj, como una RAM en serie). Desea medir el tiempo de transferencia de datos a través del bus I2C, que es una pregunta diferente, y tiene una respuesta para eso.

La escritura lleva más tiempo porque se usa un proceso más lento mucho (tunelización Fowler-Nordheim) para borrar y luego escribir puertas de transistores flotantes en las ubicaciones de destino. El tiempo de escritura es de milisegundos en lugar de nanosegundos.

Es por eso que la hoja de datos no especifica los tiempos de lectura por separado.

    
respondido por el Spehro Pefhany

Lea otras preguntas en las etiquetas