Estoy buscando un pequeño dispositivo SRAM de 32 KB más o menos que dos MCU puedan leer o escribir (en dos momentos diferentes; no necesito lectura / escritura simultánea). Sería bueno si también usara una interfaz en serie.
El problema que estoy tratando de resolver es enviar datos entre dos dispositivos sin que el otro dispositivo tenga que hacer una pausa para recibir esto. Transferiría una muestra de audio al búfer, luego el otro chip, según sea necesario, leería el audio y haría algo con él.
He encontrado SRAM seriales como las 23A256 / 23K256 de Microchip, sin embargo, parecen tener una única interfaz en serie. ¿Hay alguna forma de tener dos chips accediendo a esto?
Además, el dispositivo receptor solo tiene 2 KB de memoria de datos libre (máximo), por lo que parece que usar DMA o algún mecanismo de transferencia similar a través de I2C u otra interfaz no funcionará.
La forma más fácil sería implementar un bus SPI multimaestro. Puede usar dos líneas de E / S adicionales entre los maestros para el arbitraje utilizando un mecanismo de comunicación.
fuente
Veo dos posibles soluciones para su problema:
1) Encuentre el chip FIFO que sea adecuado para sus necesidades (un ejemplo ). Puede que no sea simple / posible de usar, ya que no sé si existe un chip FIFO con una interfaz simple (como SPI). Los FIFO que conozco tienen una interfaz paralela.
2) Comparta la SRAM mencionada de Microchip con dos maestros SPI (en dos uControllers). Cuando se usa por primera vez, los puertos SPI en otro uController deben estar en alta impedancia y opuestos cuando el segundo uController usará la SRAM. Necesitará una interfaz de enlace simple entre uControllers (algo así como solicitud de lectura / lectura realizada / líneas ocupadas). Esto se puede implementar usando 2 o 3 conexiones unidireccionales entre uControllers. Tu imaginación es el limite.
fuente
Por cierto, un enfoque que aún no se menciona para su uso con memorias paralelas es tener dos o más dispositivos con intervalos de tiempo fijos para acceder a los datos. Este enfoque se usó en muchas computadoras basadas en 6502 hechas por Apple, Commodore y algunos otros proveedores (no, curiosamente, Atari). El popular microprocesador 6502 usaba un reloj de dos fases y siempre realizaba sus accesos a la memoria en la segunda mitad de cada ciclo (la dirección estaba disponible durante la primera mitad, pero los datos se escribirían durante la segunda mitad o se bloquearían al final de la segunda mitad). Las máquinas Apple y Commodore utilizarían así durante la primera mitad de cada ciclo de memoria una dirección generada por el circuito de video, enclavando los datos al final de la mitad; durante la segunda mitad de cada ciclo usarían la dirección generada por la CPU,
Este enfoque requería una memoria que era dos veces más rápida de lo que hubiera sido necesario sin intercalar memoria, y requería la adición de controladores de 3 estados en las salidas de dirección del procesador (las salidas de dirección del 6502 siempre se manejaban hacia arriba o hacia abajo) pero de lo contrario funcionaba muy bien para que la misma memoria esté disponible tanto para el procesador como para los circuitos externos.
fuente
Hay varias formas de hacer lo que quieras.
fuente