¿Restablecer hace lo mismo que apagar el dispositivo y volver a encenderlo?

Estoy tratando de controlar una memoria flash de datos en serie a través de un mbed. Es un AT45DB021B y la hoja de datos está aquí . Tiene un pin de reinicio que he conectado al mbed para que se pueda hacer un reinicio de software. Escuché que un reinicio de software facilita las cosas, por lo que no es necesario reiniciar el hardware, es decir, apagar y volver a encender. Me di cuenta de que cuando hago un reinicio de hardware, lo que sea que esté en el búfer se sobrescribe con valores aleatorios. Sin embargo, cuando reinicio el software, el búfer no se ve afectado. Nada parece cambiar en un reinicio de software. ¿Esto es normal?

Respuestas (5)

Sí, esto es normal. Si realiza un restablecimiento completo (encendido aleatorio), puede estar bastante seguro de que el búfer será basura. Si realiza un restablecimiento parcial, el contenido debería ser el mismo que antes. Sram está diseñado para comportarse de esa manera. Pero depende del diseño de la arquitectura. Si el hardware interno está diseñado de tal manera que, al recibir una señal de reinicio, se desconecte la alimentación de la RAM. Entonces, en ese caso, el contenido de la RAM se borrará en el reinicio.

Después de un reinicio de encendido, no hay garantía de lo que hay en su búfer. Puede ser lo mismo que había antes, o todo ceros, o todos unos, o un tablero de ajedrez, o la mayor parte de la oración inicial de "Historia de dos ciudades", o cualquier otra cosa; puede ser consistente, aleatorio o mayormente consistente, excepto el tercer martes de los meses que contienen la letra "a". A menos que se especifique lo contrario, probablemente sea prudente darse cuenta de que no hay garantía del contenido del búfer después de un restablecimiento parcial. El enfoque adecuado es suponer que el búfer va a contener cualquier dato que sea más molesto para usted, por lo que debe estar preparado para aceptar cualquier cosa que pueda estar allí.

La razón por la que la memoria y otros chips tienen líneas de restablecimiento no es necesariamente para "borrarlas", sino para desconectarlas del bus durante estados de baja potencia.

El problema es que, durante el encendido y el apagado, las líneas de luz estroboscópica, dirección y datos aún están conectadas al bus mientras la energía aumenta de 0v a Vcc (o se agota), y esto puede manifestarse como un ruido digital que causa "al azar". basura" para que se escriba en la memoria durante el arranque. Esto es especialmente problemático para dispositivos IO mapeados en memoria y memorias flash.

Puede usar un chip de "restablecimiento de baja tensión" para asegurarse de que su dispositivo se mantenga en estado RESET hasta que la energía se haya estabilizado y se pueda confiar en los valores del bus. Muchos microcontroladores modernos tienen detectores de caída de tensión incorporados.

La hoja de datos cubre esto:

REINICIO: un estado bajo en el pin de reinicio (RESET) finalizará la operación en curso y restablecerá la máquina de estado interna a un estado inactivo. El dispositivo permanecerá en la condición de reinicio siempre que haya un nivel bajo en el pin RESET. El funcionamiento normal puede reanudarse una vez que el pin RESET vuelve a un nivel alto

Por lo tanto, no pierde los valores del búfer, pero se detiene cualquier operación en curso y se reinicia la máquina de estado. Por lo tanto, los datos en el búfer no son válidos (no se alinean con el estado actual y es posible que no se alineen con lo que realmente está en flash, debe tratarse como basura).

Si activa el reinicio del software mientras se está produciendo una escritura o una lectura desde la memoria flash, la operación se detiene y, al liberar el reinicio del software, el chip se encuentra en su estado predeterminado. Esto significa que el reinicio del software puede corromper los datos flash sin cambiar los valores del búfer. Cuando escribe en la memoria flash, debe asegurarse de dejar suficiente tiempo para que el chip realmente escriba los datos en la memoria flash antes de usar el reinicio del software o sus datos no llegarán a la memoria flash. Estos tiempos se enumeran en la sección 8.2 de la hoja de datos.

Estrictamente hablando, tampoco es seguro leer del búfer de datos como si fuera válido después de un reinicio del software, debe volver a emitir un comando para copiar datos de la memoria flash al búfer antes de poder leerlos y estar seguro de que son válidos. (equivalente a lo que realmente está en flash).

Además:

El dispositivo incorpora un circuito interno de reinicio de encendido, por lo que no hay restricciones en el pin RESET durante las secuencias de encendido. Si no se utilizan este pin y esta característica, se recomienda que el pin RESET sea colocado alto externamente.

y

Cuando se aplica energía al dispositivo por primera vez, o cuando se recupera de una condición de reinicio, el dispositivo pasará de forma predeterminada al modo SPI 3. Además, el pin SO estará en un estado de alta impedancia y una transición de alta a baja en el CS pin será necesario para iniciar una instrucción válida. El modo SPI se seleccionará automáticamente en cada flanco descendente de CS mediante el muestreo del estado de reloj inactivo. Después de que se aplica energía y VCC está en el valor mínimo de la hoja de datos, el sistema debe esperar 20 ms antes de que se inicie un modo operativo

Por lo tanto, no es necesario que un controlador externo ponga el chip en línea al encenderlo. A menos que su operación de encendido tome más de 20 ms para estabilizar el voltaje de suministro, no debería tener problemas de basura.

En general, no, un reinicio no es lo mismo que un ciclo de encendido. Debe analizar el sistema caso por caso para determinar qué sucede en un restablecimiento localizado o en todo el sistema. Según la respuesta de Mark, parece que está bien para este objetivo, presione restablecer y no tenga que apagar y encender. Sin embargo, antes de implementar o lanzar una versión de software, pruébelo usando ciclos de energía también.

Con sram o dram. Si no pierde energía y el restablecimiento es lo suficientemente corto, la memoria puede parecer que nada ha cambiado, pero no confíe en eso. Algunos sistemas, dram en particular, paridad verificada, memorias verificadas ecc pasarán por un proceso de inicialización que puede incluir borrar la memoria. A menos que el sistema haya sido diseñado para preservar la memoria mediante un reinicio, no confíe en que esté como lo dejó. Los programas siempre deben escribir antes de leer una ubicación de memoria (o alguien/algo debe escribir la ubicación antes de que se lea por primera vez) de todos modos.