EEPROM Valores Corrupción - Sólo algunas veces

0

Estoy usando 25LC640A EEPROM con un microcontrolador de 32 bits. Esta EEPROM puede almacenar 8kb de datos, con comunicación serial SPI.

En mi caso, durante cada secuencia de apagado, la MCU escribirá un bloque de datos en la EEPROM y luego se apagará. Y también está funcionando bien. He probado tantas veces como sea posible. No hay problemas con los datos de EEPROM

Problema: Pero, algunas veces los valores de EEPROM se corrompieron. Mi código arroja un error de suma de comprobación después de encender la MCU. He comprobado el código a fondo, no puedo encontrar el error ya que funciona bien durante mucho tiempo.

Entonces, cualquiera que esté aquí, sugiérame cuál es la causa de esta corrupción de datos. También he adjuntado esquemas.

    
pregunta Photon001

3 respuestas

2

Lo que estás tratando de hacer parece razonable, pero esto sugiere algo que debes analizar más detenidamente:

secuencia de apagado MCU escribirá un bloque de datos en EEPROM y luego se apagará.

Debe tener cuidado de que EEPROM termine de escribir la última escritura antes de apagar la alimentación. EEPROMs puede tomar ms para hacer escrituras. Eso es mucho tiempo, incluso para un modesto microcontrolador.

Durante la operación normal, es realmente bueno iniciar la escritura, luego dejar que el chip se apague y tome su tiempo mientras el software hace otra cosa. Entonces, el software solo bloquea la espera de que la EEPROM finalice la escritura si se solicita otra operación de la EEPROM. En muchos casos, la escritura y otras operaciones de software se superponen muy bien. Incluso si se solicita otra operación de inmediato, eso nunca es peor que esperar explícitamente después de cada escritura.

Si estás usando rutinas en capas que no escribiste, esta puede ser la forma en que funcionan bajo el capó. En ese caso, el cierre final debe ser manejado de manera diferente. Realiza la llamada para realizar la última escritura, pero luego debe llamar a otra cosa que espere explícitamente hasta que finalice la escritura. Apagar antes de eso causará corrupción. Las bibliotecas de EEPROM diseñadas como se describe anteriormente tendrán una llamada que espera explícitamente a que la EEPROM esté inactiva.

    
respondido por el Olin Lathrop
3

Esto puede ser causado por un circuito de reinicio de salida defectuoso (o que falta). Cuando la MCU está operando a niveles de voltaje de Vdd no válidos, puede hacer casi cualquier cosa, incluso volverse loco y ejecutar bits aleatorios de código para escribir en una EEPROM externa.

Recomiendo encarecidamente el uso de un circuito (interno o no) que garantice inhibir el funcionamiento de la MCU a niveles no válidos y que funcione a una tensión en la que la EEPROM no pueda realizar una escritura (generalmente menos de 1 voltio hazlo). Debería estirar cualquier problema técnico lo suficiente como para garantizar que la MCU se reinicie correctamente. La palabra 'garantizado' no se usa a la ligera: hay algunos circuitos internos de MCU BOR que no garantizan que funcionen cuando calcule las tolerancias y así sucesivamente.

    
respondido por el Spehro Pefhany
1

Usted menciona que ha estado funcionando durante mucho tiempo. He tenido ingenieros que no aprecian el número de escrituras de por vida de la especificación del dispositivo. Con un millón de ciclos de escritura, si la uP realiza una escritura cada segundo, la especificación se superará en menos de 12 días. Si hace una escritura cada minuto, la especificación será excedida en menos de dos años. Una vez que exceda la especificación, debe anticipar anomalías.

Si está convencido de que no es un problema de por vida, debe agregar algunas rutinas de diagnóstico para volcar los datos, incluida la CS, al apagar y encender. Ejecute esto en un entorno de prueba para ver si puede detectar el problema.

    
respondido por el Glenn W9IQ

Lea otras preguntas en las etiquetas