Estou procurando um pequeno dispositivo SRAM de 32 KB ou mais que dois MCUs possam ler ou gravar (em dois momentos diferentes; não preciso de leitura / gravação simultânea). Seria bom se ele também usasse uma interface serial.
O problema que estou tentando resolver é enviar dados entre dois dispositivos sem que o outro dispositivo precise fazer uma pausa para receber isso. Eu transferia uma amostra de áudio para o buffer e o outro chip, conforme necessário, lia a saída de áudio e fazia alguma coisa com ela.
Encontrei SRAMs seriais como o 23A256 / 23K256 da Microchip, no entanto, eles parecem ter uma única interface serial. Existe alguma maneira de ter dois chips acessando isso?
Além disso, o dispositivo receptor possui apenas 2 KB de memória de dados livre (máximo), portanto, parece que usar DMA ou algum mecanismo de transferência semelhante por meio do I2C ou de outra interface não funcionará.
A maneira mais fácil seria implementar um barramento SPI multimestre. Você pode usar duas linhas de E / S adicionais entre os mestres para arbitragem usando um mecanismo de handshake.
fonte
Vejo duas soluções possíveis para o seu problema:
1) Encontre o chip FIFO adequado às suas necessidades (um exemplo ). Pode não ser simples / possível de usar, pois não sei se existe um chip FIFO com interface simples (como SPI). Os FIFOs que conheço têm interface paralela.
2) Compartilhe a SRAM mencionada da Microchip com dois mestres SPI (em dois uControllers). Quando o primeiro é usado, as portas SPI em outro uController devem estar em alta impedância e oposto quando o segundo uController usar a SRAM. Você precisará de uma interface simples de handshake entre os uControllers (algo como solicitação de leitura / leitura concluída / linhas ocupadas). Isso pode ser implementado usando 2 ou 3 conexões unidirecionais entre os uControllers. Sua imaginação é o limite.
fonte
Aliás, uma abordagem ainda não mencionada para uso com memórias paralelas é ter dois ou mais dispositivos com intervalos de tempo fixos para acessar dados. Essa abordagem foi usada em muitos computadores baseados em 6502 fabricados pela Apple, Commodore e alguns outros fornecedores (não de maneira interessante, a Atari). O popular microprocessador 6502 usava um relógio de duas fases e sempre realizava seus acessos à memória na segunda metade de cada ciclo (o endereço estava disponível durante a primeira metade, mas os dados seriam gravados durante a segunda metade ou bloqueados no final de A segunda parte). As máquinas Apple e Commodore usariam, durante a primeira metade de cada ciclo de memória, um endereço gerado pelo circuito de vídeo, bloqueando os dados no final da metade; durante a segunda metade de cada ciclo, eles usariam o endereço gerado pela CPU,
Essa abordagem exigia memória duas vezes mais rápida do que seria necessária sem intercalação de memória e exigia a adição de drivers de três estados nas saídas de endereço do processador (as saídas de endereço do 6502 sempre eram conduzidas altas ou baixas), mas, de outra forma, funcionava muito bem disponibilizar a mesma memória ao processador e aos circuitos externos.
fonte
Existem várias maneiras de fazer o que você deseja.
fonte