STM32 - Problema de lectura de EEPROM a través de retardo I2C

Estoy tratando de leer/escribir EEPROM byte por byte, pero si no pongo un retraso suficiente (~ 1 ms) entre las tareas de lectura/escritura, obtengo o escribo un valor incorrecto en la EEPROM. Pero este retraso está tomando un tiempo significativo cuando hay muchos bytes para leer/escribir y 400 kHz pierden su significado. Me estoy perdiendo de algo ? o su naturaleza de proceso byte por byte es lenta. Gracias por tu tiempo y ayuda.

MCU = STM32F072C8Tx

EEPROM = 24LC64

Configuración I2C:

 Speed = 400 kHz
 Rise Time = 300 ns
 Fall Time = 300 ns
 Analog Filter = Disable
 Digital Filter Coefficent = 0

Ejemplo básico de código L/E:

 HAL_I2C_Mem_Write(&hi2c1, device_addr, mem_addr, I2C_MEMADD_SIZE_16BIT, data, 1, 500);
 Hal_Delay(1);
 HAL_I2C_Mem_Read(&hi2c1, device_addr, mem_addr, I2C_MEMADD_SIZE_16BIT, databuffr, 1, 500);

Respuestas (2)

Sí, te estás perdiendo el tiempo que lleva escribir cualquier cosa, incluso si el bus es de 400 kHz.

La primera página de 24LC64 dice que la escritura de una página es de 5 ms como máximo. Puede escribir un byte o hasta 32 bytes (una página completa) a la vez, pero aún puede tardar hasta 5 ms.

Entonces, después de una operación de escritura, la EEPROM estará ocupada escribiendo los datos y no responderá a ninguna operación hasta que finalice con la escritura.

¿Parece que su respuesta aprueba que "la naturaleza del proceso byte por byte es lenta"?
Sí. Y por cada byte que escriba, el chip debe borrar internamente una página completa de 32 bytes y volver a escribir la página completa con el contenido modificado. Entonces, si escribe bytes individuales en un bucle for, toda la página se borra y se vuelve a escribir muchas veces.

Los EEProm requieren una cantidad mínima de tiempo para escribir una página o un solo byte en la memoria. La mayoría del código de producción sondeará el dispositivo (bit WB) para ver cuándo ha terminado esta escritura. En su caso, el 1ms probablemente permita que termine este tiempo.

Va a ser más eficiente escribir por páginas que por bytes, solo tienes que esperar una vez, en lugar de por cada byte. Vigile que no envuelva las páginas. El tamaño de la página será una potencia de 2, consulte la hoja de datos para conocer el tamaño exacto.

Las escrituras de página no solo son más rápidas, sino que desgastarán el chip más lentamente. Las EEPROM tienen un número limitado de escrituras antes de que se desgasten.