¿Por qué Flash y SRAM tienen una señal de "espera"?

2

He leído hojas de datos en dispositivos SRAM y Flash. Parece que tienen una señal de "Retención" que puede usarse para evitar que registre los datos / instrucciones de entrada hasta que se desactive la señal de retención. ¿Cuándo necesitaría uno usar tal cosa?

La hoja de datos de SRAM 23LC1024 dice: "El pin HOLD se usa para suspender la transmisión al 23A1024 / 23LC1024 mientras se encuentra en medio de una secuencia en serie sin tener que volver a transmitir la secuencia completa otra vez"

Estos dispositivos de memoria también tienen modos SPI duales y cuádruples en los que la señal de retención se reemplaza con una señal IO de datos. Esto me hace pensar que la señal de espera no es realmente importante o lo es?

    
pregunta quantum231

3 respuestas

1

Creo que el propósito es que el software de excepción pueda hacer otras cosas con el bus SPI mientras su código está en medio de una transacción. Supongo que es posible hacerlo si diseñas todo con mucho cuidado, pero plantea más problemas que resuelve. Si el código de interrupción realmente necesita tener un acceso de baja latencia a un dispositivo en particular, probablemente debería poner ese dispositivo en su propio bus.

Sin embargo, en general, el código de interrupción no debería intentar hacer algo tan lento como las transacciones SPI de todos modos. Una estrategia mucho mejor es emplear una arquitectura de software adecuada para que múltiples tareas puedan usar el bus SPI en serie mediante el uso de un mutex. He hecho esto varias veces, y hace que las múltiples transacciones asincrónicas de SPI sean bastante fáciles y confiables sin pisarse unas con otras.

Básicamente, el uso compartido del bus no se debe realizar a un nivel tan bajo que los chips individuales deban suspenderse en medio de una transacción mientras que otra cosa usa el bus. Ese es un hardware de banda para tratar con software mal pensado.

    
respondido por el Olin Lathrop
3

Además de lo que han indicado las otras respuestas, el pin también tiene un uso en las transferencias DMA. En un diseño tenía un IC de códec de MP3 basado en SPI que requería que los datos se copiaran desde la memoria Flash (también podría ser SRAM) al IC usando el mismo bus de datos (debido a que solo tenía un bus SPI de hardware en la MCU que estaba usando) .

El proceso aquí es esencialmente: (1) establecer la dirección de inicio en la memoria, (2) leer una pequeña parte de los datos, (3) poner la memoria en modo de suspensión, (4) volver a escribir la parte de los datos al códec de MP3, y (5) sacar la memoria del modo de suspensión y saltar a 2.

La ventaja de este proceso es que es mucho más rápido alternar el pin de suspensión entre cada parte de los datos que iniciar una nueva lectura desde la memoria. Para comenzar una lectura, normalmente tiene que enviar al menos 3 bytes (comando + dirección) a la memoria, lo que requiere muchos, muchos más ciclos de reloj que simplemente alternar el pin de retención entre los fragmentos de datos mientras usa el bus para otra cosa.

    
respondido por el Tom Carpenter
1

La única forma en que he usado la señal de retención es adjuntar una red RC para evitar que el FLASH lea datos incorrectos durante el encendido. Creo que uno de los FPGA que estaba usando en ese momento tenía un comportamiento no especificado en sus pines de configuración antes de que las líneas eléctricas se hubieran instalado. Efectivamente este es un segundo chip seleccionado.

Otra aplicación útil es cuando necesitas leer información de un chip de memoria secundario en la misma transmisión intermedia en aplicaciones de tiempo crítico. No necesita esperar a que el SPI termine su mensaje y puede reanudarlo más tarde.

    
respondido por el user110971

Lea otras preguntas en las etiquetas