Meinen eigenen Bus entwerfen

8

Diese Frage ist weiter als meine vorherige Frage: Alternativen zu SPI aufgrund von EMI . Ich spiele mit der Idee, meinen eigenen Kommunikationsbus zu entwerfen. Ich wäre dankbar, wenn jemand ein Auge auf mein vorläufiges Design werfen und mir sagen könnte, wo ich verrückt bin ...

Ich verwende derzeit einen 2-MHz-SPI, der über 10 cm lange Drähte zu sieben ADCs auf separaten Leiterplatten übertragen wird (gemeinsam genutzter CS, aber jeder ADC verfügt über eine eigene MISO-Leitung. Das Problem ist, dass es nicht viele ADCs mit einem Differenzialbus gibt. Ich frage mich daher, ob es möglich ist, meinen eigenen Bus zu entwerfen. Zumindest die physische Schicht und möglicherweise auch das Protokoll.

Designziele des neuen Busses:

  • Verwenden Sie physikalisch kleine Komponenten
  • niedrige EMI
  • nicht mehr als 4 Datenleitungen (zwei Paare)
  • Bandbreite von> 300 kbps von jedem ADC. (> 2,1 MBit / s insgesamt)

Bevor Sie mich als verrückt abschreiben, denken Sie daran, dass es auf einem PSoC5 möglicherweise nicht so schwer ist . Auf diesem Chip kann ich sicherlich mein eigenes Protokoll in Verilog entwerfen und es in Hardware implementieren lassen. Und bis zu einem gewissen Grad kann ich möglicherweise auch die Komponenten der physischen Schicht einbeziehen. Darüber hinaus kann ich möglicherweise sieben dieser Dinge gleichzeitig ausführen, die alle parallel im Master ausgeführt werden, eines für jeden Slave, damit ich insgesamt eine gute Bandbreite erhalten kann.

Und hier ist meine vorläufige Idee:

Geben Sie hier die Bildbeschreibung ein

Es würde auf I2C basieren, das leicht modifiziert wurde, um eine Verbindung zu den Komponenten der physischen Schicht herzustellen. Die SDA- und SCL-Leitungen sind jetzt Differentialpaare. Das SDA-Paar hat die Eigenschaft OR-ing. Dies wird mit einem Pin erreicht, der nur hoch und einer niedrig fahren kann. Das SCL-Paar wird ausschließlich vom Master gesteuert. Die Datenrate würde auf mindestens 1 MBit / s erhöht.

Der Master wäre ein PSoC5 mit 7 Mastermodulen. Die Slaves wären auch PSoC5s mit einem Slave-Modul und würden den integrierten ADC verwenden.

Gedanken:

  • Ich bin mir nicht sicher, wie die Pull-up-Widerstände und die Komponenten zur Begrenzung der Anstiegsgeschwindigkeit am besten implementiert werden können.
  • Ich gehe davon aus, dass ich keine Kündigung brauche. Wenn ich die Anstiegsgeschwindigkeit auf ca. 80 ns beschränke, sollte dies für ein 10 cm langes Kabel gut sein.
  • Das ist offensichtlich kein richtiger Differentialtransceiver. Verschwende ich meine Zeit damit, aus Toren eines zu machen?
  • Diese Nicht-Tore verursachen einen gewissen Versatz. Ist das wahrscheinlich ein Problem?
Raketenmagnet
quelle
Vielleicht ist LVDS einen Blick wert, wenn Sie eine differenzielle Signalisierung wünschen?
Saad
Ich glaube nicht, dass ich Slave-Geräte im I2C-Stil mit separaten SDA-Ein- und Ausgängen gesehen habe. Wenn Sie einen mikroprozessorbasierten I2C-Slave verwenden, müssen Sie den Slaves erlauben, SCK so niedrig zu halten, dass der Master es sehen kann (der Master hält sich dann beim Senden des nächsten Bits bis zum Slave zurück gibt SCK frei). Andernfalls schlägt der Fehler fehl, wenn der Master Daten sendet, ohne darauf zu warten, dass die Slaves bereit sind. Alternativ können Sie SPI verwenden und nur bestimmte Bytewerte zum Senden von Daten verwenden (sodass jedes Byte "realer" Daten als zwei Bytes übertragen wird). Wenn Sie das tun ...
Supercat
... da die meisten SPI-Implementierungen im Falle eines Datenüberlaufs / -unterlaufs ein Vielfaches ganzer Bytes löschen, kann der Master erkennen, wenn der Slave einzelne Bytes nicht aufrechterhalten und erneut übertragen konnte, bis der Slave sie bestätigen konnte.
Supercat

Antworten:

4

Nun, wenn Sie PSoC5 überall haben wollen, habe ich kürzlich über IEEE 1355 gelesen . Die Signalverbindungsvariante DS-SE-02 kann tun, was Sie wollen. Es werden 4 Signalleitungen benötigt: eine Datenleitung und eine Strobe-Leitung in jeder Richtung. Die einzige dedizierte Hardware, die ich finden kann, die 1355 implementiert, ist ein radgehärtetes Spacewire- Getriebe. Diese IEEE-Präsentation behauptet jedoch, dass es auf einem FPGA mit 1/3 der Gates eines UART implementiert werden kann und mit einer Geschwindigkeit arbeitet, die 100-mal schneller ist als die eines UART .

Eine öffentliche Kopie des vollständigen Standards ist mit freundlicher Genehmigung des CERN erhältlich, wenn Sie ein wenig lesen möchten. Ich hatte keine Gelegenheit, mich mit der ganzen Sache hinzusetzen, daher kann ich nicht für die EMI-Leistung sprechen. Wenn Sie sich den DS-SE-Abschnitt ansehen, müssen Sie die Impedanz in der Übertragungsleitung kontrollieren und am Empfangsende enden.

Joe Baker
quelle
Danke für diese Idee. Das klingt interessant. Alles, was Spacewire heißt, ist in Ordnung für mich. Ich werde es mir jetzt ansehen ...
Rocketmagnet
4

Haben Sie überlegt, RS485 zu verwenden?

Es gibt bereits viele Komponenten, die für RS485-Busse ausgelegt sind.

Bruno Ferreira
quelle
Ja, ich habe darüber nachgedacht. Es ist sicherlich eine Option. Ich glaube nicht, dass sie ODER-Verknüpfungen durchführen, aber der Master könnte bei einem Paar asynchron senden, während sich die Slaves bei dem anderen Paar abwechseln. Das einzige Problem war, dass ich keine wirklich kleinen Transceiver finden konnte. Habe ich schon erwähnt, dass ich sehr eng im Weltraum bin ?
Raketenmagnet
2
Ist SOIC 8 zu groß für Ihre Anforderungen? Ich habe kürzlich überlegt, für eines meiner Projekte einen Intersil ISL83485IBZ oder einen SN65HVD11D-Transceiver von Texas Instruments zu verwenden. Beide haben SOIC 8-Pakete.
Bruno Ferreira
@ Bruno - SOIC-8, machst du Witze? :-) Die Leiterplatte ist 11 mm x 13 mm groß .
Stevenvh
@stevenvh Die Abmessungen bei der anderen Frage wurden nicht bemerkt. Ich nehme an, ein MSOP-Paket löst Ihr Problem nicht. Wenn ja, könnten
Bruno Ferreira