EEPROM Tiempo de ciclo de escritura y resistencia de ciclo de escritura

4

Tengo una aplicación de software integrada que está copiando un búfer desde la RAM a la EEPROM. En este caso, el dispositivo EPROM es un 28C010 (128 K x 8). La copia se realiza a intervalos no regulares, generalmente en bloques de múltiples bytes. Supongo que otras EEPROM (no todas) se comportan de esta manera, pero esto es con lo que tengo que trabajar.

Las respuestas a mis preguntas a continuación ayudarán a determinar la estrategia para guardar información persistente mientras se procesa en tiempo real.

Se puede acceder a la EEPROM como RAM con algunas excepciones para escribir:

  • ESCRIBIR BYTE: se pueden escribir bytes individuales, y la finalización del ciclo de escritura se puede determinar mediante sondeo
  • ESCRIBIR PÁGINA: los bloques de bytes contiguos se pueden escribir para bytes dentro del mismo bloque de 128 bytes, y, siempre que cada escritura de un byte sea seguida por otra escritura de un byte en el mismo bloque dentro de 150 microsegundos, entonces la ventaja de PAGE ESCRIBIR se obtienen. El beneficio es que la finalización de la escritura de la página se puede realizar mediante un sondeo al final de la escritura del bloque. (No hay retrasos entre las escrituras de bytes, y la finalización del ciclo de escritura de la página se internaliza en la EEPROM).
  • Resistencia del ciclo de escritura: hay un límite de 10.000 ciclos de escritura. No se dan otros detalles.

En ambos casos, el sondeo se realiza mediante la lectura del último byte escrito hasta que el valor devuelto sea igual al valor que se escribió.

Hay otras formas de determinar que una escritura está completa, incluso esperando el máximo tiempo de ciclo de escritura de página especificado, que es de 10 milisegundos.

Tengo la intención de utilizar el sondeo, con la expectativa de que determinará la finalización antes del tiempo de ciclo de escritura de página de 10 milisegundos.

Tengo dos preguntas:

  1. ¿Puedo esperar que mi tiempo de sondeo en el modo de escritura de página sea proporcional al número de bytes escritos (o puedo ver algún beneficio al escribir unos pocos bytes en lugar de una página completa)?
  2. ¿Cómo funciona la resistencia del ciclo de escritura? ¿Se aplica a cada byte solo o dos páginas completas (oa toda la memoria en su conjunto)? En otras palabras, si escribo una página parcial en una escritura de página y luego escribo el resto de la página en otro ciclo de escritura de páginas, ¿cómo afecta eso la resistencia de mi ciclo de escritura? ¿Cuenta como dos ciclos de escritura? ¿Alguien puede elaborar sobre esto?

Dado que las Escrituras de página en EEPROM se completan internamente por la EEPROM después de la última escritura en una página, puedo realizar las escrituras en segundo plano en la mayoría de las circunstancias.

El tamaño de los bloques que se están copiando variará un poco cada vez, y no se puede esperar que estén en múltiplos del tamaño de la página. Se puede hacer que sean tan pequeños como un tamaño de página o varias páginas +, en función de un umbral que se determinará más adelante.

    
pregunta Jim

2 respuestas

4

Lo que describe es típico de los chips EEPROM. El número mínimo de bytes que debe borrar de una vez, el máximo que puede escribir a la vez y el mínimo que puede escribir a la vez pueden ser diferentes.

La forma en que generalmente trato esto es tener un módulo que virtualice las lecturas y escrituras en la EEPROM. Este módulo presenta una interfaz de procedimiento para leer y escribir bytes individuales.

Por cierto, es una buena idea que este módulo utilice una dirección más amplia que la que requiere la EEPROM. No es raro en absoluto que los proyectos evolucionen y reemplacen el chip EEPROM con uno más grande más adelante. Si solo usó una dirección de 16 bits y pasó de 64 kB a una EEPROM más grande, tiene que verificar y posiblemente volver a escribir un montón de código de aplicación que ahora tiene que usar al menos 3 bytes de dirección cuando se escribió para 2. Generalmente, uso Direcciones de 24 bits en una máquina de 8 bits y direcciones de 32 bits en una máquina de 16 bits para comenzar, a menos que haya una buena razón específica del proyecto para no hacerlo. Eso también le permite crear módulos para varias EEPROM diferentes que presentan la misma interfaz de lectura / escritura de un solo byte de procedimiento. A veces tengo constantes de tiempo de construcción que crean versiones de direcciones cortas de estas rutinas cuando el tamaño de la EEPROM lo permite y al tomar el riesgo en el código de la aplicación vale la pena.

De todos modos, el módulo EEPROM mantiene un búfer de RAM de una página de borrado (generalmente son más grandes o del mismo tamaño que las páginas de escritura). El módulo realiza un seguimiento de qué bloque de EEPROM, si hay alguno, está actualmente en el búfer de RAM, y si se han realizado cambios (indicador sucio) que aún no se han escrito en la EEPROM física. La aplicación lee y escribe el trabajo en este búfer de RAM y no necesariamente causa la lectura / escritura directamente en la EEPROM. Se proporciona una rutina FLUSH para que la aplicación pueda forzar la escritura de cualquier dato almacenado en caché en la EEPROM. En algunos casos, utilicé un temporizador para llamar a la rutina de descarga automáticamente un tiempo fijo después de la última escritura.

Cuando la aplicación accede a un byte que no está en el búfer RAM, el bloque que contiene el byte se lee primero desde la EEPROM. Si el búfer está sucio, siempre se vacía antes de que se escriba en él un bloque EEPROM diferente.

Este esquema es generalmente más rápido y también minimiza el número real de escrituras en la EEPROM. El indicador sucio solo se establece si los datos nuevos son diferentes de los datos antiguos. Si la aplicación escribe los mismos datos varias veces, la EEPROM se escribe como máximo una vez.

Este esquema también utiliza la EEPROM de manera más eficiente, ya que todos los bloques se borran y se escriben a la vez. Esto se hace una vez por bloque, independientemente de cuánta actividad de escritura haya dentro del bloque antes de que la aplicación direccionara un byte en un bloque diferente. Para la mayoría de las EEPROM, escribir un bloque completo o escribir un byte dentro de un bloque cuenta lo mismo en términos de vida útil. Para maximizar la vida útil de la EEPROM, desea escribir con la menor frecuencia posible, y borrar y escribir bloques enteros cuando lo haga.

    
respondido por el Olin Lathrop
1

En algunos diseños de chip, el tiempo de escritura de la página será esencialmente el mismo que el tiempo de escritura de byte, ya que un chip que puede organizarse como 128Kx8 externamente puede ser 1024x1024 internamente, y por lo tanto tiene una matriz EEPROM que puede escribirse a 1024 bits (128 bytes) a la vez. En otros diseños de chips, cada escritura de página se realizará como una secuencia de operaciones más pequeñas (posiblemente escrituras de bytes individuales), pero el rendimiento puede ser más rápido que escribir bytes individuales si los chips de chips usan bombas de carga para suministrar corriente de escritura; muchas veces, tales bombas de carga necesitan encenderse antes de cada operación de escritura y luego apagarse; si un chip toma por ejemplo 1 ms para encender y 1 ms para escribir un byte, escribir un byte tomaría 2 ms, y escribir 16 bytes como grupo tomaría 17 ms, un poco más de ocho veces más largo (escribir 16 bytes individualmente tomaría 16x mientras se escribe uno) .

En general, esperaría que escribir muchos bytes en una página lleve más tiempo que escribir uno, pero será mucho más rápido que escribir todos esos bytes individualmente. Incluso en un chip que tiene un bus de ancho completo entre los buffers de página y la matriz de memoria, es posible que la bomba de carga no pueda suministrar suficiente corriente para escribir 1024 bits tan rápido como podría escribir uno. Además, algunos chips pueden incluir circuitos de interbloqueo para limitar el número de escrituras de bits simultáneas; cada vez que se completa un poco de escritura, el chip podría pasar a procesar otro que aún no se había iniciado.

    
respondido por el supercat

Lea otras preguntas en las etiquetas