Je recherche un petit périphérique SRAM de 32 Ko environ que deux MCU peuvent lire ou écrire (à deux moments différents; je n'ai pas besoin de lecture / écriture simultanée.) Ce serait bien s'il utilisait également une interface série.
Le problème que j'essaie de résoudre est d'envoyer des données entre deux appareils sans que l'autre appareil ait à s'arrêter pour recevoir cela. Je transfèrerais un échantillon audio dans le tampon, puis l'autre puce, au besoin, lirait l'audio et ferait quelque chose avec.
J'ai trouvé des SRAM série comme les 23A256 / 23K256 de Microchip, cependant, ils semblent avoir une seule interface série. Existe-t-il un moyen pour que deux puces y accèdent?
De plus, le périphérique de réception ne dispose que de 2 Ko de mémoire de données (maximum), il semble donc que l'utilisation de DMA ou d'un mécanisme de transfert similaire via I2C ou une autre interface ne fonctionnera pas.
Le moyen le plus simple serait d'implémenter un bus SPI multi-maître. Vous pouvez utiliser deux lignes d'E / S supplémentaires entre les maîtres pour l'arbitrage à l'aide d'un mécanisme de négociation.
la source
Je vois deux solutions possibles à votre problème:
1) Trouvez une puce FIFO adaptée à vos besoins (un exemple ). Il peut ne pas être simple / possible à utiliser car je ne sais pas s'il existe une puce FIFO avec une interface simple (telle que SPI). Les FIFO que je connais ont une interface parallèle.
2) Partagez le SRAM mentionné de Microchip avec deux maîtres SPI (dans deux uControllers). Lors de la première utilisation, les ports SPI des autres uController doivent être à haute impédance et opposés lorsque le deuxième uController utilise la SRAM. Vous aurez besoin d'une interface de prise de contact simple entre les uControllers (quelque chose comme la demande de lecture / lecture terminée / lignes occupées). Cela peut être implémenté en utilisant 2 ou 3 connexions unidirectionnelles entre les uControllers. La limite, c'est votre imagination.
la source
Soit dit en passant, une approche non encore mentionnée pour une utilisation avec des mémoires parallèles consiste à avoir deux dispositifs ou plus dotés de tranches de temps fixes pour accéder aux données. Cette approche a été utilisée dans de nombreux ordinateurs basés sur 6502 fabriqués à la fois par Apple, Commodore et certains autres fournisseurs (pas, fait intéressant, Atari). Le microprocesseur 6502 populaire utilisait une horloge biphasée et effectuait toujours ses accès à la mémoire sur la seconde moitié de chaque cycle (l'adresse était disponible pendant la première moitié, mais les données seraient écrites pendant la seconde moitié ou verrouillées à la fin de la seconde moitié). Les machines Apple et Commodore utiliseraient ainsi pendant la première moitié de chaque cycle de mémoire une adresse générée par les circuits vidéo, verrouillant les données à la fin de la moitié; au cours de la seconde moitié de chaque cycle, ils utiliseraient l'adresse générée par la CPU,
Cette approche nécessitait une mémoire deux fois plus rapide que ce qui aurait été nécessaire sans entrelacement de la mémoire, et a nécessité l'ajout de pilotes à 3 états sur les sorties d'adresse du processeur (les sorties d'adresse du 6502 étaient toujours pilotées haut ou bas) mais cela fonctionnait par ailleurs très bien. pour mettre la même mémoire à la disposition du processeur et des circuits externes.
la source
Il existe plusieurs façons de faire ce que vous voulez.
la source