Ich suche ein kleines SRAM-Gerät mit 32 KB oder so, das zwei MCUs lesen oder schreiben können (zu zwei verschiedenen Zeiten; ich muss nicht gleichzeitig lesen / schreiben). Es wäre gut, wenn es auch eine serielle Schnittstelle verwenden würde.
Das Problem, das ich zu lösen versuche, besteht darin, Daten zwischen zwei Geräten zu senden, ohne dass das andere Gerät eine Pause einlegen muss, um diese zu empfangen. Ich würde ein Audio-Sample in den Puffer übertragen, dann würde der andere Chip nach Bedarf das Audio auslesen und etwas damit machen.
Ich habe serielle SRAMs wie die 23A256 / 23K256 von Microchip gefunden, sie scheinen jedoch eine einzige serielle Schnittstelle zu haben. Gibt es eine Möglichkeit, zwei Chips darauf zugreifen zu lassen?
Darüber hinaus verfügt das empfangende Gerät nur über 2 KB freien Datenspeicher (maximal), sodass die Verwendung von DMA oder eines ähnlichen Übertragungsmechanismus über I2C oder eine andere Schnittstelle nicht funktioniert.
Am einfachsten wäre es, einen Multi-Master-SPI-Bus zu implementieren. Sie können zwei zusätzliche E / A-Leitungen zwischen den Mastern für die Arbitrierung mithilfe eines Handshake-Mechanismus verwenden.
quelle
Ich sehe zwei mögliche Lösungen für Ihr Problem:
1) Finden Sie einen FIFO-Chip, der für Ihre Anforderungen geeignet ist (ein Beispiel ). Die Verwendung ist möglicherweise nicht einfach / möglich, da ich nicht weiß, ob ein FIFO-Chip mit einfacher Schnittstelle (z. B. SPI) vorhanden ist. Die mir bekannten FIFOs haben eine parallele Schnittstelle.
2) Teilen Sie den erwähnten SRAM von Microchip mit zwei SPI-Mastern (in zwei uControllern). Wenn der erste verwendet wird, müssen die SPI-Ports in einem anderen uController hochohmig sein und umgekehrt, wenn der zweite uController den SRAM verwendet. Sie benötigen eine einfache Handshake-Schnittstelle zwischen uControllern (z. B. Leseanforderung / Lesen erledigt / Besetzt). Dies kann mithilfe von 2 oder 3 unidirektionalen Verbindungen zwischen uControllern implementiert werden. Ihrer Fantasie sind keine Grenzen gesetzt.
quelle
Übrigens besteht ein Ansatz, der für die Verwendung mit parallelen Speichern noch nicht erwähnt wurde, darin, zwei oder mehr Geräte mit festen Zeitschlitzen für den Zugriff auf Daten zu versehen. Dieser Ansatz wurde in vielen 6502-basierten Computern verwendet, die sowohl von Apple, Commodore als auch von einigen anderen Anbietern (interessanterweise nicht von Atari) hergestellt wurden. Der beliebte 6502-Mikroprozessor verwendete einen Zweiphasentakt und führte seine Speicherzugriffe immer in der zweiten Hälfte jedes Zyklus durch (die Adresse war in der ersten Hälfte verfügbar, aber die Daten wurden in der zweiten Hälfte geschrieben oder am Ende zwischengespeichert die zweite Hälfte). Die Apple- und Commodore-Maschinen würden daher während der ersten Hälfte jedes Speicherzyklus eine von der Videoschaltung erzeugte Adresse verwenden und die Daten am Ende der Hälfte zwischenspeichern; während der zweiten Hälfte jedes Zyklus würden sie die von der CPU erzeugte Adresse verwenden,
Dieser Ansatz erforderte Speicher, der doppelt so schnell war, wie er ohne Speicherverschachtelung erforderlich gewesen wäre, und erforderte das Hinzufügen von 3-Status-Treibern an den Adressausgängen des Prozessors (die Adressausgänge des 6502 wurden immer hoch oder niedrig angesteuert), funktionierte aber ansonsten sehr reibungslos den gleichen Speicher sowohl dem Prozessor als auch externen Schaltkreisen zur Verfügung zu stellen.
quelle
Es gibt verschiedene Möglichkeiten, um das zu tun, was Sie wollen.
quelle