EEPROM escribe / lee bytes incorrectos

0

Estoy usando M95512-W M95512-RM95512-DF eeprom para almacenar mis datos. Pero a veces no es el almacenamiento de bytes que quiero. En lugar de eso, está almacenando bytes sucesivos (incorrectos). ¿Puede ocurrir esto porque no hago ninguna espera entre las escrituras de dos bytes?

    
pregunta Arbnor Zeqiri

2 respuestas

1

Creo que necesitas trabajar en algunas pruebas unitarias más detalladas de tus rutinas de software que usas para escribir en la EEPROM. Cuando realices las pruebas, asegúrate de mantener el código de bajo nivel del mismo modo que el caso en el que fallas. Puedes mantener el escenario cerca de lo que sucede ahora.

La prueba más simple es usar un patrón de datos conocido en su prueba para que sea posible detectar patrones en el resultado que puedan revelar lo que puede estar yendo mal. Prueba patrones como:

  • Secuencia de datos de 0x00, 0xFF, 0x00, 0xFF que se repite a través de un bloque grande.

  • Secuencia de datos de 0x55, 0xAA, 0x55, 0xAA que se repite a través de un bloque grande.

  • Secuencia de conteo de datos de 0x00, 0x01, 0x02 ... 0xFF, 0x00, 0x01 que se repite en un bloque.

  • Secuencia de datos de dos bytes que almacenan la dirección de la dirección de número par como los datos.

Cuando lees los resultados de estos, puedes saber si faltan bytes en la secuencia, si se están colando bytes adicionales, algunos bytes simplemente obtienen valores incorrectos y si los valores incorrectos tienen alguna semejanza con el esperado valor en la ubicación incorrecta.

Es posible que tenga problemas en varias áreas:

  • Es posible que tenga un error en su controlador de software

  • Puede haber problemas de integridad de la señal con el manejo eléctrico de la pieza

  • Es posible que hayas codificado un error de protocolo en la forma en que intentas hablar con la EEPROM

Con el dispositivo específico que está utilizando, puede escribir desde un byte hasta el número de bytes en una "página". Cuando deja que el pin de selección de chip suba, se produce un ciclo de escritura de 5 ms. Programado internamente para colocar los nuevos datos en la matriz. O bien, debe retrasar los 5 mseg en su software antes de intentar la próxima escritura o sondear el registro de estado hasta que vea que el bit "Escritura en curso" se borra.

Otra cosa a considerar es que si almacena varias secuencias de bytes en un ciclo de escritura y no comprende los límites de "página" correctamente, podría estar experimentando un "vuelco" dentro de una página. Por ejemplo, si estaba registrando un almacenamiento de datos secuencial de 7 bytes por operación de escritura para abordar 0x0000, luego 0x0007, etc., llegaría al final de la "página" cuando la escritura de los siguientes 7 bytes se extienda al final de la página actual en El comienzo de la página siguiente. Si no tiene en cuenta eso en su algoritmo, los bytes que se extienden en la "página siguiente" se escriben en la parte inicial de la "página actual". Un algoritmo correcto necesitaría dividir una escritura de extensión en dos comandos de escritura separados: uno para almacenar los últimos bytes en la página actual y el segundo para escribir los bytes restantes en la página siguiente.

Tenga en cuenta que el problema de "reinversión" es un error común en este tipo de aplicación de dispositivo.

    
respondido por el Michael Karas
0

La lectura de la hoja de datos del EEprom que especificó dice: sí, esto puede ocurrir porque no está haciendo ninguna espera.

Un comando de escritura podría estar ignorando cuando una escritura aún se está procesando.

Hay un par de problemas diferentes que podrían surgir. Necesitaría explicar su problema con más detalle ...

    
respondido por el DThought

Lea otras preguntas en las etiquetas