PC teilt Speicher mit externem Mikrocontroller

Ich suche nach einer PC-Hardwareschnittstelle, die diese Anforderungen erfüllt.

Der PC ist ständig mit Berechnungen beschäftigt. Jedes Mal, wenn ein Berechnungsergebnis vorliegt (alle ~1 ms), möchte ich, dass es mit einem externen Mikrocontroller geteilt wird, der über RS232 an eine andere (geschlossene) Einheit angeschlossen ist. Die Einheit verwendet ein vordefiniertes Protokoll, um das Ergebnis anzufordern, wenn es dies wünscht dazu (unbestimmte Zeiten).

So-

PC <-> Mikrocontroller <-> Einheit

Theoretisch könnte ich den PC über RS232 direkt mit dem Gerät verbinden (Mux, weil ich ungefähr 6 Geräte brauche), aber ich wollte den PC nicht mit zu viel I/O unterbrechen, ich möchte, dass er sich auf die Berechnungen konzentriert.

Auf der PC <-> Micro-Schnittstelle möchte ich etwas Schnelles, daher schien PCI eine gute Idee zu sein - ich kann den Mikrocontroller auf einer PCI-Karte sitzen lassen und den Speicher (gemappt) mit dem PC "teilen", um Berechnungsergebnisse zu übertragen, und auch mit der Einheit kommunizieren.

  1. Es gibt viele FPGA-Karten auf PCI da draußen, aber ich suche nach etwas wie ARM oder sogar nach etwas Einfacherem auf der Karte. Kennt jemand ein gutes Produkt dafür?
  2. Ist die PCI eine gute Idee für mein Setup? Schlagen Sie etwas anderes vor? Ich möchte wirklich, dass diese Schnittstelle wie ein gemeinsames Gedächtnis wirkt.

Danke

Elad

FPGAs haben in der Regel Dual-Port-Speicher, was für diesen Zweck gut ist, aber PCI ist bereits ziemlich indirekt. Es hört sich nicht so an, als ob im "Mikrocontroller" viel Leistung benötigt wird, also sollte ein Soft-Core-Prozessor im FPGA in Ordnung sein. Ich vermute jedoch, dass eine serielle Hochgeschwindigkeitsschnittstelle und ein Demultiplexer wahrscheinlich die bessere Lösung sind.
Was ist Ihre erwartete Datenrate? Ich bezweifle, dass Sie wirklich Shared Memory brauchen. 1 ms ist selbst für serielle Verbindungen ausreichend Zeit, und Sie könnten einen separaten Thread für die E / A verwenden. Eine andere mögliche Lösung ist die Verwendung von Ethernet – es kann sehr schnell sein und der PC kann das Paket einfach über UDP abfeuern und nicht auf die Antwort warten.

Antworten (2)

Ich denke, Ihr Verständnis der Kosten für E / A ist möglicherweise falsch. Ich würde die MCU auf den USB-Bus legen und ein USB-Bus-Paket verwenden, um die aktualisierten Daten an den Mikrocontroller zu senden. Sie können ein fertiges USB-Bus-Mikrocontroller-Board für < 15 $ kaufen. Es ist unwahrscheinlich, dass sich der Overhead der USB-Bus-Übertragung jemals in einem Profil der Systemleistung zeigt.

Wenn ich ein großes Projekt in dieser Richtung angehen würde, würde ich PXI in Betracht ziehen, http://en.wikipedia.org/wiki/PCI_eXtensions_for_Instrumentation

Im Wesentlichen ist dies ein gemeinsam genutzter PCI-Bus mit einigen Erweiterungen, und auf den Bus kann von jedem Gerät zugegriffen werden, das Sie daran anschließen. http://www.stmopen.net/intellective-pxi-bus-extended-card-design-based-on-arm-microcontroller/ spricht über eine ARM-Plattform, die diesen Bus verwendet,

Wer diese erweiterte Funktionalität nicht benötigt, sollte natürlich die USB-Option in Betracht ziehen. Für ein Protokoll, das nicht in Echtzeit läuft, scheinen die Leute sicher einige interessante Sachen damit zu machen, die ich nicht von Echtzeit unterscheiden kann.