1 votos

Estimación del tiempo de lectura de la EEPROM

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

He publicado esta pregunta por separado para poder aclarar mi pregunta por separado de la otra.

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

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

Confío en que leer un trozo de datos de la EEPROM no hará más daño que hacer adc_conversiones y cálculos.

No quiero una duración de tiempo precisa. Pero confío en que la lectura se producirá bastante rápido en lugar de la escritura que tomará 5ms mínimo.

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

Me encantaría contar con su opinión e información respecto a este problema.

2voto

xilun Puntos 261

Podrías calcularlo leyendo la hoja de datos de la EEPROM y sumando el tiempo que se tarda en transferir todos los bits como sugirió Ignacio Vázquez-Abrams en un comentario. Sin embargo, como ya has seleccionado un dispositivo y lo tienes funcionando, puede que te resulte más fácil simplemente medirlo. Normalmente yo haría algo como lo siguiente y usaría un osciloscopio para medirlo:

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

Si no tienes un osciloscopio podrías encerrar la lectura en un bucle y quizás encender y apagar un LED con algo así:

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, el segundo fragmento de código tardará probablemente unos 30 segundos, que deberías poder medir con razonable precisión con un cronómetro y luego dividirlo por 100.000.

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

2voto

Spehro Pefhany Puntos 90994

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

La escritura tarda más tiempo porque un mucho Se utiliza un proceso más lento (túnel Fowler-Nordheim) para borrar y luego escribir puertas de transistores flotantes en la(s) ubicación(es) de destino. El tiempo de escritura es de milisegundos en lugar de nanosegundos.

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

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X