Forum: Mikrocontroller und Digitale Elektronik Datenübertragung mit Zykluszeit unter 50 Mikrosekunden


von Scooter W. (scooter_de)


Lesenswert?

Hallo,

um in Echtzeit zwischen zwei STM32 Controllern zu kommunizieren benötige 
ich eine Zykluszeit von weniger als 50 Mikrosekunden. Ich kann mir 
vorstellen, dass es möglich ist wenn ich mein eigenes Protokoll über die 
GPIO Pins implementiere, aber ich hätte gerne eine einfachere Lösung. 
Die Datenmenge beträgt ungefähr 100 MBit/s.

Kann man dies beispielsweise über die SPI Pins, UART, I2C, Ethernet etc. 
erreichen oder gibt es eine bessere Lösung?

Vielen Dank

von A. S. (Gast)


Lesenswert?

Scooter W. schrieb:
> Hallo,
>
> um in Echtzeit zwischen zwei STM32 Controllern zu kommunizieren benötige
> ich eine Zykluszeit von weniger als 50 Mikrosekunden
Zykluszeit = X Bytes hin, verarbeiten und Y Bytes zurück.

Bei 100MBit: 10Bytes pro µs

Bei 100 Bytes: 10µs hin, 10µs zurück, 30µs Verarbeitung.

Also ja, nimm Ethernet oder irgendwas anderes.

Die notwendigen Fragen kommen dann mit Deiner Vorstellung des von Dir 
angedachten Systems.

Also nein, es geht nicht auf einem ATTINY mit 20MHz und es geht auch 
nicht nebenbei wenn Du Delays von 49us für das PWM-blinken einer LED 
verwendest.

von Falk B. (falk)


Lesenswert?

Scooter W. schrieb:
> Hallo,
>
> um in Echtzeit zwischen zwei STM32 Controllern zu kommunizieren benötige
> ich eine Zykluszeit von weniger als 50 Mikrosekunden. Ich kann mir
> vorstellen, dass es möglich ist wenn ich mein eigenes Protokoll über die
> GPIO Pins implementiere, aber ich hätte gerne eine einfachere Lösung.
> Die Datenmenge beträgt ungefähr 100 MBit/s.

Ganz schön viel.

> Kann man dies beispielsweise über die SPI Pins, UART, I2C, Ethernet etc.
> erreichen

Ganz schön viele Buzzwords im Suppentopf, meinst du nicht? SPI, UART und 
I2C kann man bei 100Mbit/s vergessen. Ethernet kann das, aber hat auch 
seine Latenzen.

>Vielleicht. Aber
> oder gibt es eine bessere Lösung?

Dazu müßte man das Problem deutlich genauer kennen.

von N. M. (mani)


Lesenswert?

Scooter W. schrieb:
> benötige ich eine Zykluszeit von weniger als 50 Mikrosekunden

Soweit kein Problem.

Scooter W. schrieb:
> Ich kann mir vorstellen, dass es möglich ist wenn ich mein eigenes
> Protokoll über die GPIO Pins implementiere

Mit den unten genannten Anforderungen (100MBit)? Vergiss es!
Ohne dedizierte Hardware keine Chance. Am ehesten noch über Ethernet. 
Das aber auch nicht Nutzdatenrate.

Scooter W. schrieb:
> Die Datenmenge beträgt ungefähr 100 MBit/s.

Du erzeugst also mit 20kHz 625 Byte?
Woher kommen diese Daten?

Scooter W. schrieb:
> Kann man dies beispielsweise über die...
>SPI Pins
Nope. Realistisch vielleicht 20 MBit.

>UART
Asynchron erst Recht nicht.
Du willst das ja auch irgendwie wieder empfangen können.

>I2C
Um Welten nicht.


Am ehesten noch mit einem H7 über Ethernet.
Oder ein MP1 oder ähnliches Flaggschiff.
FPGA wäre auch noch eine Möglichkeit.

Aber wie gesagt: woher kommen solche Datenmengen?

von Dergute W. (derguteweka)


Lesenswert?

Moin,

Der STM hat doch auch iirc irgendwelche Dual-Core-Aermchen im Programm. 
Da kann dann sicherlich die eine CPU recht zuegig mit der anderern CPU 
quaken.

Gruss
WK

von No Y. (noy)


Lesenswert?

Naja SPI würde ggf. schon gehen, wenn die Quad oder Octal SPI haben 
vermutlich sogar besser als Ethernet wegen weniger Overhead..

Vielleicht wäre ne SDIO auch möglich.

: Bearbeitet durch User
von Peter D. (peda)


Lesenswert?

Scooter W. schrieb:
> Ich kann mir
> vorstellen, dass es möglich ist wenn ich mein eigenes Protokoll über die
> GPIO Pins implementiere

Anfänger unterschätzen oft völlig, welch enorm hohen Aufwand ein eigenes 
Protokoll bedeutet, wenn es auch einigermaßen zuverlässig sein soll.
Die einfachste Lösung ist fast immer, die Aufgaben in möglichst einer 
CPU zu lösen, z.B. mit höherem Takt, mehr Speicher.
Schon die Kommunikation innerhalb einer CPU mit mehreren Kernen erhöht 
deutlich die Komplexität und Fehleranfälligkeit.
Oftmals lassen sich die Aufgaben auch so umstellen, daß gar keine riesen 
CPU-Leistung mehr benötigt wird. Die beste Optimierung ist oft einfach 
nur eine bessere Strukturierung und Planung.

Eine räumliche Trennung macht man nur, wenn sich die Aufgaben gut 
separieren  lassen und nur ein minimaler Datenaustausch nötig wird. 
Ansonsten geht die meiste CPU-Zeit allein für den Datentransport und 
Fehlersicherung drauf.

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Scooter W. schrieb:
> um in Echtzeit zwischen zwei STM32 Controllern zu kommunizieren
In welcher Liga spielen die denn?

von KernCern (Gast)


Lesenswert?

Frag beim CERN, die schaufeln noch viel mehr Daten weg und sind 
glücklich damit.

von Frank K. (fchk)


Lesenswert?

Scooter W. schrieb:

> um in Echtzeit zwischen zwei STM32 Controllern zu kommunizieren benötige
> ich eine Zykluszeit von weniger als 50 Mikrosekunden. Ich kann mir
> vorstellen, dass es möglich ist wenn ich mein eigenes Protokoll über die
> GPIO Pins implementiere, aber ich hätte gerne eine einfachere Lösung.
> Die Datenmenge beträgt ungefähr 100 MBit/s.

Wenn die beiden Teilnehmer dicht beieinander liegen und einen FSMC 
haben: Dual Port Memory.

https://www.renesas.com/eu/en/products/memory-logic/multi-port-memory/asynchronous-dual-port-rams/70v08-64k-x-8-33v-dual-port-ram

fchk

von Gerald M. (gerald_m17)


Lesenswert?

100MBit sind bei Quad-SPI nur 25MHz. Da muss man bei ein paar Dezimetern 
nichteinmal differentiell übertragen und es reicht die passende 
Terminierung.

von Stefan F. (Gast)


Lesenswert?

Gerald M. schrieb:
> 100MBit sind bei Quad-SPI nur 25MHz. Da muss man bei ein paar Dezimetern
> nichteinmal differentiell übertragen und es reicht die passende
> Terminierung.

Klingt gut, bloß welcher Mikrocontroller hat ein Quad-SPI Slave 
Interface mit DMA oder Buffer? In meiner kleine beschränkten Welt gibt 
es das nicht.

von Gerald M. (gerald_m17)


Lesenswert?

Das stimmt, hatte mich noch nie damit beschäftigt einen Mikrocontroller 
als QSPI Slave zu konfigurieren.

Nun, man kann natürlich auch 4 SPI Schnittstellen als Slave nehmen und 
die dann wieder verknüppeln. Ansonsten gehen mit vielen Stm32 auch über 
100MBit SPI.

Oder eben, wie mehrfach genannt, die Daten da verarbeiten wo sie 
anfallen.
Der TO hat ja auch nicht geschrieben was er machen will.

von (Gast)


Lesenswert?

ethernet ginge. bei beiden µCs auf einer platine kann man auch RMII 
direkt "kurzschliessen", es braucht keine PHYs,

von Wolfgang (Gast)


Lesenswert?

Scooter W. schrieb:
> ... oder gibt es eine bessere Lösung?

Wie soll man auf diese Frage antworten, wenn du keinerlei Information zu 
deinem Problem rausrückst. Was steckt hinter dieser Datenrate, 
insbesondere  wieso eine bidirektionale Kommunikation mit der von dir 
genannten Datenrate?

von Rolf M. (rmagnus)


Lesenswert?

Scooter W. schrieb:
> um in Echtzeit zwischen zwei STM32 Controllern zu kommunizieren benötige
> ich eine Zykluszeit von weniger als 50 Mikrosekunden.

Was genau heißt das? Musst du alle 50 µs ein Paket verschicken? Müssen 
deine Pakete innerhalb von 50 µs beim Empfänger ankommen? Oder musst du 
alle 50 µs ein Paket verschicken, auf der Empfängerseite verarbeiten und 
eine Antwort zurückschicken?

von No Y. (noy)


Lesenswert?

Hier gibts ggf. interessante Infos zu uC welche >=100MBit am Bus auch 
als Slave können sollten...

https://www.eevblog.com/forum/microcontrollers/any-good-recommendation-for-a-quad-spi-slave-capable-microcontroller/

von Dergute W. (derguteweka)


Lesenswert?

Moin,

Jetzt sollte so langsam der Zeitpunkt kommen, wo der TO mitteilt, dass 
die CPU unbedingt auch in "Eiche furniert" erhaeltlich sein muss, weil: 
"sonst gildeds ned".

scnr,
WK

von A. B, (Gast)


Lesenswert?

Mit dem OctoSPI der STM32'er ginge das möglicherweise schon via DQS zur 
Master-Slave-Synchronisation, allerdings nur im Octal-Modus (da das 
Interface leider mehrere Bugs hat - DQS funtioniert nur in dem Modus). 
Aber für eine definitive Aussage müsste man das wohl ausprobieren, da 
lauern zu viele Problemstellen ...
Ggf. braucht man da auch noch ein wenig Logik extern.

von Jester (Gast)


Lesenswert?

Vielleicht ist dem Scooter das Ganze aber auch nicht sooooo wichtig...

von Stefan F. (Gast)


Lesenswert?

A. B, schrieb:
> OctoSPI

Klingt wie ein Witz, aber das gibt es tatsächlich. Erstaunlich. Früher 
hätte man das Parallel-Port genannt.

von A. B, (Gast)


Lesenswert?

Stefan ⛄ F. schrieb:
> Klingt wie ein Witz, aber das gibt es tatsächlich. Erstaunlich. Früher
> hätte man das Parallel-Port genannt.

Nein, mit Parallel-Port hat das wenig zu tun. Immerhin wickelt das die 
Zugriffe auf externe Speicher völlig selbsttätig ohne CPU ab. Da steckt 
eine recht komplizierte (und wohl deswegen ziemlich buggy) State-Machine 
drin ...

von Stefan F. (Gast)


Lesenswert?

A. B, schrieb:
> Immerhin wickelt das die
> Zugriffe auf externe Speicher völlig selbsttätig ohne CPU ab.

Das konnten die Parallel Ports vieler (nicht aller) PC ebenfalls. Das 
Feature hiess "ECP", wurde gerne zur Ansteuerung externer Speichermedien 
verwendet.

Parallelen mit aktuellen Produkten sind rein zufällig :-)

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.