Fatiga de EEPROM: ¿Afecta solo a las celdas que se escriben en exceso o causará fallas globales?

Tenemos una EEPROM con una vida útil de 10.000 ciclos: nuestra aplicación puede escribir más de 10.000 veces.

Si escribimos en la misma ubicación una y otra vez, ¿es solo esa única ubicación la que potencialmente se fatiga y falla? ¿O la falla se extendería a múltiples celdas?

Estoy pensando que una manera fácil de sortear el límite es dedicar 10 ubicaciones de memoria y usar un puntero giratorio. Eso (creo) aumentaría mis ciclos de escritura potenciales 10 veces antes de que se convierta en un problema.

¿Estoy yendo por un buen camino, o es totalmente incorrecto hacer esto?

Mucha gente se pregunta por qué no uso otra parte, o una que esté mejor documentada. La EEPROM está integrada en este. En nuestro negocio, estamos encerrados en unos pocos proveedores que fabrican ASIC muy especializados y que no documentan sus chips de tal manera que solo puedo leer esto en la hoja de datos. Todos sus ingenieros hablan inglés como tercer o, a veces, cuarto idioma, por lo que hacer este tipo de preguntas suele ser bastante difícil y las respuestas siempre se toman con pinzas. Compensan estas molestias vendiendo chips estúpidos de bajo costo. Tenemos micros disponibles para nosotros que cuestan alrededor de 3 centavos cada uno (sin exagerar). La mayoría de nuestros circuitos integrados cuestan alrededor de $ 0,15.

¿Qué EEPROM? Por lo general, no se basan en bytes sino en bloques, por lo que incluso si desea cambiar un byte, generalmente hay un ciclo de lectura, borrado y escritura para un bloque completo de varios bytes. La tecnología flash permitiría escribir bits del 1 al 0 sin borrar un bloque completo. Tienes que encontrar un algoritmo de nivelación de desgaste.
¿Dónde guardarás tu puntero?
Término de búsqueda útil: "nivelación de desgaste": su sugerencia es una forma primitiva de nivelación de desgaste.
No parece que haya un problema con el enfoque, sino una posibilidad real de que esté usando la parte incorrecta para el trabajo incorrecto.
Puede que le interese esta respuesta ( electronics.stackexchange.com/a/515008/78538 ) que muestra el infierno que pueden causar las fallas de eeprom y lo difícil que puede ser depurarlas
¿Estoy yendo por un buen camino, o es totalmente incorrecto hacer esto? – ¡Felicitaciones, acabas de inventar la nivelación dinámica de desgaste!
Con respecto a la cantidad exacta de ciclos, es bastante fácil hacer una prueba de esfuerzo. Borrar + escribir + leer y verificar cada 100 ms (dependiendo de qué tan rápido sea el ciclo de borrado). Aunque tenga en cuenta que esto destruirá la memoria física, por lo que es posible que la MCU necesite un reemplazo después.
Solo me preguntaba, ¿con qué proveedor estás trabajando? ¡Soy un gran admirador de la electrónica estúpidamente barata!
@syntax Son fabricantes de circuitos integrados que están conectados a nuestro negocio en particular (y a nuestros competidores: les venden a todos). Generalmente, los MOQ están en decenas de miles... Lo que quepa en tres obleas. No se trata de un pasatiempo único. Si habla en serio, puedo ponerlo en contacto, pero no puedo publicar lo que podría ser información confidencial en Internet aquí. No creo que SE tenga una función de mensajería, así que incruste inteligentemente su dirección de correo electrónico en un comentario y me pondré en contacto con usted directamente (si lo desea).
@KyleB ¡Oye, lo siento por la respuesta tardía! Aunque lo más seguro es que no tenga ninguna necesidad inmediata del mercado/producto específico del que habla, sigo teniendo mucha curiosidad. Podría gastar algo de dinero si es interesante (tal vez más que el "aficionado único" promedio). No soy un experto en incrustar direcciones de correo electrónico inteligentemente, pero lo mejoraré un poco aquí: avBiaXn.sBeaXs@gmaXil. cBom // saca todas las Bs y Xs :)
@syntax Esté atento a un correo electrónico mío en algún momento de este fin de semana, déjeme saber si no lo recibe

Respuestas (5)

Las EEPROM no se desgastan al escribir, se desgastan al borrar . Si observa la hoja de datos, notará que indica ciclos de borrado.
Las operaciones de borrado se basan en bloques. Entonces, un bloque completo de datos se borra a la vez. Y en su caso, puede hacer esto al menos 10k veces en cada bloque.
Su idea puede funcionar, pero cualquier algoritmo de nivelación de desgaste debe estar basado en bloques , de lo contrario, no proporcionará vida adicional al chip.

Además, en mi experiencia, ese número en la hoja de datos es bastante conservador para garantizar la cobertura en todas las temperaturas extremas. Entonces, a temperaturas relativamente modestas (cerca de la temperatura ambiente), puede obtener muchos más ciclos. En un chip con el que tuvimos este problema, se especificó en 50 000 ciclos, pero habitualmente nos acercábamos a los 300 000 antes de que surgieran los problemas.

Y finalmente, como parte de su algoritmo, después de borrar el bloque, haga una verificación para asegurarse de que todos los bits se hayan restablecido. Si no es así, vuelve a borrar (hasta dos veces). Descubrimos que esto extendió en gran medida la vida útil del flash, ya que el modo de falla no es fuerte, sino más bien una curva suave.

Si desea evitar todo el algoritmo adicional, generalmente puede encontrar un chip FRAM que es un reemplazo directo para la mayoría de las EEPROM. No tienen el mismo mecanismo de desgaste y se pueden borrar/escribir 1 billón de veces en promedio.

Tenga en cuenta que FRAM tiene lecturas destructivas, por lo que las lecturas cuentan para desgastarlo al igual que las escrituras.
@forest: Wikipedia menciona la resistencia de lectura/escritura de FRAM en términos de "ciclos" ( en.wikipedia.org/wiki/Ferroelectric_RAM ). Entonces, a diferencia de DRAM, uno de los posibles modos de falla parece estar relacionado con la cantidad de veces que escribe (con lectura que implica una escritura debido a lecturas destructivas). Tiene razón en que "lecturas destructivas" no significa que las lecturas desgasten el dispositivo, pero si las escrituras lo hacen, entonces las lecturas destructivas significan que cada lectura debe ser seguida por una escritura. (A menos que un controlador de alguna manera optimice el intercambio con cero ...) Eso es lo que Joseph estaba diciendo (correctamente).
@PeterCordes Ah, ya veo (acabo de comprobar la hoja de datos MB85R4001A que cita Wikipedia). Tenía la impresión equivocada de que las escrituras causadas por la lectura requerían menos energía que las escrituras "sobreescritas".

Como señaló Graham Nye en un comentario, ¿dónde va a almacenar sus punteros de escritura y lectura?

Creo que la mayoría de los controladores flash (SSD, etc.) que implementan la nivelación de desgaste usan memoria no volátil más duradera para los punteros o los mantienen en memoria volátil y solo los escriben en flash antes de que se queden sin energía.

En un registrador de datos que ayudé a desarrollar, hicimos uso del hecho de que nuestra EEPROM se borró por completo 1y se garantizó que nuestros datos nunca serían todos 1. Así que solo tuvimos que buscar en toda la EEPROM al inicio para encontrar nuestros datos e inicializar nuestros punteros. ;)

Las EEPROM por lo general no pueden escribir una sola ubicación (aunque puede parecerle así al usuario), leen, borran y escriben un bloque (16 ubicaciones más o menos), por lo que, a menos que sus ubicaciones rotativas estén lo suficientemente separadas, su idea ganó no ayuda Las múltiples ubicaciones en un bloque se desgastarán juntas.

Las escrituras de página se describen en la hoja de datos, pero los bloques (más pequeños que las páginas) generalmente no. Me enteré de ellos durante un análisis en profundidad de los mecanismos de falla de EEPROM. Solo el fabricante sabe cómo funcionan internamente sus chips.

Entendido: vamos a confirmar con los ingenieros de diseño cómo realizan las escrituras. Ese equipo está en Asia, así que será de la noche a la mañana antes de que pueda obtener una respuesta en el mejor de los casos. Necesitaba una revisión de la cordura de la idea esta tarde. ¡Muy apreciado!
Una solución común para EEPROM es tener más de un banco y alternar entre todos los bancos. Esta técnica también le permite recuperarse de la corrupción al escribir si almacena una suma de verificación y registra un "contador de guardado". En el caso de corrupción, solo vas al banco anterior. Esto es muy común para escribir en firmware y guardar archivos de videojuegos en cartuchos portátiles. Un buen efecto secundario es que reduce considerablemente el desgaste.

Lo que propones es una técnica llamada nivelación de desgaste . Es decir, escriba en diferentes ubicaciones a lo largo del tiempo para distribuir la actividad en más celdas.

Una dificultad con las EEPROM es que están orientadas a bloques (y bloques bastante grandes). Por lo tanto, el 'desgaste' de una escritura afecta a todo el bloque de celdas. Si tiene que escribir cosas más de unas pocas veces, no es una tecnología apropiada para usted.

¿Puedes considerar NOR flash en su lugar? Esto tiene mejor durabilidad de escritura que EEPROM.

La fatiga solo afecta a las celdas que han acumulado demasiados ciclos de escritura, pero asegúrese de leer la hoja de datos del fabricante del dispositivo para comprender lo que significan ciclos. No todos se comportan igual dicen.

Pero el método general de lo que está sugiriendo se usa comúnmente y es efectivo.

También señalaré que hay muchas EEPROM en el mercado hoy en día que ofrecen más de 10K ciclos. Es posible que desee darse una vuelta si esa es una opción.

¡Gracias por la rápida respuesta! No puedo comprar, es un ASIC. Es lo que es... La hoja de datos tampoco es muy útil. Estamos en un nicho de mercado, tomamos lo que está disponible para nosotros.
Tenga en cuenta que, en casi todos los casos, el desgaste solo ocurre cuando una celda cambia de estado. Por lo tanto, puede minimizar el desgaste mediante el uso de codificación de datos que reduce los cambios de estado en las celdas EEPROM prestando atención a aquellas que aún no están "en uso". Quiere evitar usar sus celdas de reserva.