µC und Gbit Ethernet

OP #7851989
Lesenswert?

es gibt hier ein Thread von vor 11 Jahren...

Mittlerweile hat sich da ja recht viel getan, hat schon jemand was in die Richtung gemacht?

Gibt es Empfehlungen welcher Hersteller auch brauchbare Frameworks mitliefert?

Gebraucht wird nur UDP und der Rest der Logik dürfte recht überschaubar sein. Bischen was mit Timern und jede Menge Daten von einem 16-fach SPI zu Ethernet schaufeln.

Oder doch besser in die CPLD/FPGA Schublade greifen?

Moderator (Firma: Titel) Persönliche Seite #7852097
Lesenswert?

Noob A. schrieb:

Roland E. schrieb:

Kommt drauf an, was du machen willst.

wie gesagt nur UDP

Es wurde nicht nach dem "wie" gefragt, sondern nach dem "was".

Noob A. schrieb:

Oder doch besser

... einfach mal beschreiben, was du denn mit den UDP Paketen überhaupt machen möchtest. Welche Informationen willst du denn da wie schnell ins Netz reinkippen?

#7852131
Lesenswert?

GigE und uC beisst sich schon mal. 100MBit echtzeit und abrissfrei am theoretischen Limit zu streamen ist schon knifflig genug, typischerweise schreibst du deinen eigenen angepassten Stack auf der Basis einer gut funktionierenden Scatter-Gather-DMA-Architektur, bei der die CPU nur noch die Header der RTP-Pakete anpassen muss und die Buffer-Queue managt. Was willst du fuer Daten streamen? Anstatt per Durchsatz am Limit kommt man meistens mit Hardware-Kompression auch auf ganz gute Loesungen. Fuer ADC nach 100 MBit habe ich sowas aufm FPGA gemacht, allerdings performt da i2s besser als SPI.

OP #7852430
Lesenswert?

Lothar M. schrieb:

Es wurde nicht nach dem "wie" gefragt, sondern nach dem "was".

Wie gesagt bekomme ich über eine hexa-SPI Messdaten: 32 16bit-Werte grob alle 500ns (ist "bauartbedingt" etwas unregelmässig mit Pausen zwischendrin). Etwas über 1000 davon ergeben eine Messreihe und ca. alle 830µs wir eine neue Messreihe getriggert. Auch hier können Schwankungen auftreten. Mit noch ein paar Prozessdaten dazu, und dem UDP-Geraffel landen wir dann bei knapp 90Mbyte/s.

An Komprimierung habe ich noch gar nicht gedacht, aber wenn, dann nur losless.

(Firma: Schweigstill IT) Persönliche Seite #7852463
Lesenswert?

Das ganze schreit doch nach einem Zynq o.ä.. Dort gibt es mittels Linux, Zephyr usw. einen ordentlichen Netzwerkstack. Dann den ganzen SPI-Teil als eigenen Block in die PL, so dass die Daten dort schon richtig angeordnet werden, ohne dass das PS noch irgendetwas umsortieren muss. Die Applikation kann dann sehr minimalistisch zwischen UIO-Device und Netzwerksocket umschaufeln.

#7852477
Lesenswert?

Ja, Zynq geht bestimmt auch super für so etwas.

Ich persönlich würde es vermutlich komplett in HDL umsetzen. Ethernet low-level zu machen ist wie gesagt nicht super schwierig solange es nur basic mac/udp frames sind.

Ansonsten würde mir jetzt noch XMOS als sinnvolle Alternative einfallen. Die haben recht flexible IO-blocks, die sich je nach Konfiguration auch als 16-Bit shift-port nutzen lassen würden. Die kommen da auch vom Timing bei so schnellen Sachen gut mit. Und sie supporten auch offiziell RGMII / GBit Ethernet.

#7852481
Lesenswert?

Andreas S. schrieb:

Das ganze schreit doch nach einem Zynq o.ä.. Dort gibt es mittels Linux, Zephyr usw. einen ordentlichen Netzwerkstack

Mit dem OS-Overhead von Linux brockt man sich u.U. eine gehoerige Latte anderer Probleme ein und verliert die Echtzeitkontrolle. Und ja, ich kenne RTLinux/Xenomai, usw, da gibt es die Stolperfallen immer noch, schlimmstenfalls entwickelt man Kerneltreiber neu, dieses Risiko sollte man im Hinterkopf behalten. Das SPI-Subsystem ist nicht auf Echtzeit ausgelegt, muss man andernfalls komplett in HW machen und sich abermals mit Kernelkram herumschlagen. BTDT, mit einem ollen Spartan6 geht's auch bare-metal. Das groesste Problem ist, dass man die Zynq-Geschichte nicht effektiv oder nur sehr nondeterministisch in die Cosimulation stecken kann, um Probleme zu identifizieren.

OP #7853833
Lesenswert?

Markus W. schrieb:

Da ist die Hürde im Regefall größer, den uc-proprietären Ethernet-Mac Treiber zu verstehen.

OK, ich hab mal spasseshalber ein Projekt in der Cube-IDe mit dem STM32N65xx angelegt...

Da gehts dann los dass es vorgefertigt schonmal in 3 verschiedene Unterprojekte gibt: einen First Stage Boot Loader, die Application und dann noch einen external memory loader

https://www.st.com/resource/en/user_manual/um3249-getting-started-with-stm32cuben6-for-stm32n6-series-stmicroelectronics.pdf

Scheint mir alles sehr stark darauf ausgelegt zu sein einen vorgetrampelten Pfad bei der Entwicklung einzuschlagen

Und ich habe SEHR schlechte Erfahrungen mit der HAL von STM gemacht

#7857739
Lesenswert?

Der erwähnte STM32MP ist eine teure jedoch einfache Lösung. SPI, Timer und der gleichen auf dem ARM M4 laufen lassen und über den internen bus die Daten zum ARM A7 "transferieren" auf dem ein Linux läuft und sich um die Netzwerkkommunikation kümmert.

Bei Gigabit ethernet als reiner MCU fällt mir noch sowas wie den HPmicro HPM6E ein mit RISC-V.

OP #7857788
Lesenswert?

N. B. schrieb:

Der erwähnte STM32MP ist eine teure jedoch einfache Lösung. SPI, Timer und der gleichen auf dem ARM M4 laufen lassen und über den internen bus die Daten zum ARM A7 "transferieren" auf dem ein Linux läuft und sich um die Netzwerkkommunikation kümmert.

Klingt gut... wenn es jetzt noch ein demo-board gäbe wo die 2 8xSPI rausgeführt / nicht anderweitig benutzt sind :(

#7858132
Lesenswert?

Andreas S. schrieb:

Noob A. schrieb:

Klingt gut... wenn es jetzt noch ein demo-board gäbe wo die 2 8xSPI rausgeführt / nicht anderweitig benutzt sind :(

Also wieder Salamitaktik vom Feinsten... Diese doch nicht ganz unwichtige Randbedingung wurde natürlich wieder wochenlang verschwiegen.

Dass der OP viele SPI nutzt steht in der Frage.

Nachwievor ist aber unklar, warum er der Meinung ist einen FPGA oä und Gigabit nutzen zu wollen. Über die tatsächlich anfallende Menge der Daten schweigt er sich nach wie vor aus. Da er UDP nutzen möchte, scheint es nicht wirklich wichtig zu sein, denn von seinen Daten dürfen offenbar belibig viele verloren gehen.

OP #7858324
Lesenswert?

Andreas S. schrieb:

Noob A. schrieb:

Klingt gut... wenn es jetzt noch ein demo-board gäbe wo die 2 8xSPI rausgeführt / nicht anderweitig benutzt sind :(

Also wieder Salamitaktik vom Feinsten... Diese doch nicht ganz unwichtige Randbedingung wurde natürlich wieder wochenlang verschwiegen.

Das demo-board ist kein Muss, wäre aber schön weil man bei Fehlern nicht erstmal die HW im Verdacht hat...

OP #7858325
Lesenswert?

Roland E. schrieb:

Über die tatsächlich anfallende Menge der Daten schweigt er sich nach wie vor aus.

am 28.3. Beitrag "Re: µC und Gbit Ethernet"

Da er UDP nutzen möchte, scheint es nicht wirklich wichtig zu sein, denn von seinen Daten dürfen offenbar belibig viele verloren gehen.

Wie viel Daten habt ihr denn so bei einer point-to-point Verbindung mit UDP verloren? Das funktioniert erstaunlich gut. In den oben erwähnten Prozessdaten ist auch ein bischen checksum etc drin. Aber bei 90Mbyte/s ist wenig Spielraum für retransmission.

... Man muss immer Kompromisse machen ...

#7858371
Lesenswert?

Sherlock 🕵🏽‍♂️ schrieb:

Vielleicht gibt es keine konkreten Anforderungen, außer möglichst viel Bumms für die Werbebroschüre.

Dann kann er auch einen GBit Phy an einen 8-Bitter hängen... X-)

Aus dem SPI des OP kommen nicht annähernd genug Daten, um eine 100MBit auszulasten, bin ich mir ziemlich sicher. Das GBit ist höchstens der Kompatibilität wegen sinnvoll. Ich denke nicht, dass der OP seinen SPI mit zweistelligen MHz taktet...

@strippenzieher: Ich selber habe es noch nie geschafft, einen Switch so vollzumachen, dass er UDP-Pakete dropt. Man muss aber eben davon ausgehen, dass es passiert und dann halt auch WorstCase.

OP #7858379
Lesenswert?

Nicht, daß ich es nicht schon geschrieben hätte...

Dann halt noch mal im Detail:

Es fallen pro Messung 1152 x 32 x 2 byte an dazu noch pro Messung 96 byte Prozessdaten

also knapp über 72kb

d.h. wir brauchen 51 Pakete (max. 1500 byte mit je 28 byte obverhead)

bei 1200 Messungen pro Sekunde sind das (aufgerundet) 51 x 1500 x 1200 = 91.800.000 byte

also 87,5Mb die jede Sekunde anfallen ...

und... der "SPI" wird mit 40-50MHz getaktet sein

OP #7858381
Lesenswert?

Roland E. schrieb:

@strippenzieher: Ich selber habe es noch nie geschafft, einen Switch so vollzumachen, dass er UDP-Pakete dropt. Man muss aber eben davon ausgehen, dass es passiert und dann halt auch WorstCase.

Klar ist das berücksichtigt...

Und, ich sag mal ganz salopp:

die Anwendung verkraftet es, wenn alle paar Tage mal ein Paket fehlt und eine komplette Messung verworfen werden muss. Bisher läuft das aber so stabil dass wir quasi Null Ausfall über Jahre hatten

Persönliche Seite #7858405
Lesenswert?

Roland E. schrieb:

Aus dem SPI des OP kommen nicht annähernd genug Daten, um eine 100MBit auszulasten, bin ich mir ziemlich sicher.

Schreibt er aber hier Beitrag "Re: µC und Gbit Ethernet"

Er kommt darin auf 90MByte/s meint aber vermutlich 90MBit/s. Und das ist halt für 100Base-TX grenzwertig. Also brauchts einen Controller der ein GBit PHY treiben kann.

Der schon vorgeschlagene STM32N6 sollte das schaffen. Daten rein mit PSSI -> DMA raus dann per DMA -> Ethernet.

Matthias

(Firma: Schweigstill IT) Persönliche Seite #7858421
Lesenswert?

Roland E. schrieb:

Dass der OP viele SPI nutzt steht in der Frage.

Das schon, aber plötzlich wurde die harte Anforderung nachgereicht, dass es ein Demoboard geben muss, auf dem alle benötigten SPI-Kanäle herausgeführt sind. Und das dampft die Auswahl an Microcontrollerboards schon fast (oder ganz?) auf Null ein. Somit kommen hauptsächlich nur noch FPGA-(Aufsteck-)Boards infrage.

Mittlerweile hat der TE diese Anforderung aber wieder aufgeweicht.

OP #7858425
Lesenswert?

Ja, das war unglücklich formuliert...

Tut mir leid wenn ich für Verwirrung gesorgt habe!

Dennoch, schön wärs wenn es sowas geben tät :) Bei selbstgemachten boards bleibt im Fehlerfall immer ein Zweifel ob man was in der HW falsch gemacht hat... Wobei, ST ja großzügigerweise viel Doku zur Verfügung stellt und man es nachbauen könnte..

(Firma: Schweigstill IT) Persönliche Seite #7858428
Lesenswert?

Noob A. schrieb:

Das demo-board ist kein Muss, wäre aber schön weil man bei Fehlern nicht erstmal die HW im Verdacht hat...

Heutige Demoboards sind meist so mit Peripherie vollgestopft, dass die Schwarte kracht. Die bleibt kaum ein Pin frei, und das nachträgliche Herunterlöten/Pinhochbiegen/Leiterbahnaufkratzen ist ebenfalls extrem fehlerträchtig und unpraktisch.

Warum also kein Aufsteckmodul, bei dem nahezu alle Peripheriepins herausgeführt sind und auf dem Board nur die wichtigsten Funktionen (Stromversorgung, Reset, Takt, ggf. zusätzlicher Speicher) realisiert sind? Ich nutze für Kleinserienprodukte bevorzugt die entsprechenden (FPGA-)Module von Trenz.

https://shop.trenz-electronic.de/de/Produkte/Trenz-Electronic/

Persönliche Seite #7858429
Lesenswert?

Noob A. schrieb:

Μαtthias W. schrieb:

Er kommt darin auf 90MByte/s meint aber vermutlich 90MBit/s.

Nein! meint er nicht! Man könnte lesen was da steht und nachrechnen...

Ich habs aber nochmal detaillierter aufgedröselt: Beitrag "Re: µC und Gbit Ethernet"

Stimmt. Da ist mir was durch. Jetzt sag ich nur noch das der STM32N6 das schaffen könnte. Könnte man mit https://www.st.com/en/evaluation-tools/nucleo-n657x0-q.html#overview relativ schnell testen ob das hinhaut. Die XSPI Einheit passt aber nicht. Die agiert als SPI Host. Der OP braucht aber ein Device. Also doch PSSI.

#7858654
Lesenswert?

Noob A. schrieb:

Klingt gut... wenn es jetzt noch ein demo-board gäbe wo die 2 8xSPI rausgeführt / nicht anderweitig benutzt sind :(

Falls es keine devboards gibt SOM kaufen und ein breakout board selber erstellen. DH-electronics hat das Avenger96 für deren SOM. Olimex hat SOM.

Das was ST unter der STM32MP verkuft gibt es auch von NXP. Dort läuft das unter NXP i.MX crossover. Bisher noch nie verwendet vondaher kann ich dir nichts dazu sagen außer das es die gibt.

#7858795
Lesenswert?

Noob A. schrieb:

Nicht, daß ich es nicht schon geschrieben hätte...

Dann halt noch mal im Detail:

Es fallen pro Messung 1152 x 32 x 2 byte an dazu noch pro Messung 96 byte Prozessdaten

also knapp über 72kb

d.h. wir brauchen 51 Pakete (max. 1500 byte mit je 28 byte obverhead)

Nein. Zwei Pakete reichen. UDP kann 64kB pro Frame. Spart bandbreite.

bei 1200 Messungen pro Sekunde sind das (aufgerundet) 51 x 1500 x 1200 = 91.800.000 byte

2400 Frames pro Sekunde.

Nurmalso.

(Firma: Schweigstill IT) Persönliche Seite #7858807
Lesenswert?

Roland E. schrieb:

Nein. Zwei Pakete reichen. UDP kann 64kB pro Frame. Spart bandbreite.

Das nützt aber nichts, wenn die darunter liegende physikalische Schicht (Ethernet) nur eine maximale Paketgröße von ~1500 Bytes unterstützt. Selbst Jumbo Frames bieten - je nach Ausprägung - nur ~9000 Bytes, setzen aber voraus, dass sämtliche Netzwerkkomponenten, d.h. Interfaces, Switches, Router, ebenfalls solche Paketgrößen unterstützen und entsprechend konfiguriert sind.

Und das ganze führt nur zu einer Reduzierung des Protokolloverheads von wenigen Prozent. Das also nur in den seltestens Fällen.

#7859445
Lesenswert?

Andreas S. schrieb:

Roland E. schrieb:

Nein. Zwei Pakete reichen. UDP kann 64kB pro Frame. Spart bandbreite.

Das nützt aber nichts, wenn die darunter liegende physikalische Schicht (Ethernet) nur eine maximale Paketgröße von ~1500 Bytes unterstützt. Selbst Jumbo Frames bieten - je nach Ausprägung - nur ~9000 Bytes, setzen aber voraus, dass sämtliche Netzwerkkomponenten, d.h. Interfaces, Switches, Router, ebenfalls solche Paketgrößen unterstützen und entsprechend konfiguriert sind.

Und das ganze führt nur zu einer Reduzierung des Protokolloverheads von wenigen Prozent. Das also nur in den seltestens Fällen.

Naja, ich gehe mal bei den Anforderungen des OP davon aus, dass seine komplette Netzinfrastruktur dick genug dimensioniert ist, um den Hirnriss mitzumachen, den er da vor hat.

Bei dem BroadCom-Switch, den ich letztes/diese Jahr gebastelt habe waren Jumboframes nur ein Konfigschalter. Und der hat sich bei 10GBit noch an den Füßen gespielt. Nettes kleines Teil, wenn das Geschäftsgebaren von BC nur nicht wäre...

Klar, wenn er irgend eine 1G-Konsumergurke dazwischen hat ist Essig. Dann nützt ihm sein GBit-Interface am Messzwerg aber auch nix mehr.

#7859449
Lesenswert?

Roland E. schrieb:

bei 1200 Messungen pro Sekunde sind das (aufgerundet) 51 x 1500 x 1200 = 91.800.000 byte

2400 Frames pro Sekunde.

Statt alles mit HighEnd-Hardware zuzuschütten,wäre es da nicht sinnvoller, mal über Kompression nachzudenken? Wenn man genug "Dampf" für GBit einplant, sollte das doch eigentlich kein Thema sein, und dann reicht plötzlich wieder 100 Mbit...

Beitrag #7859490 wurde von einem Moderator gelöscht.
#7859579
Lesenswert?

Noob A. schrieb:

Wieviel gewinnt man denn da, wenn verlustfrei komprimiert werden muss? Man müsste ja auf ganz grob 10% vom Datenvolumen runter... Oder hab ich grad 'nen Knoten im Rechner?

Komprimierung hängt alleinig von den Daten ab. Weißes Rauschen -> gar nicht. Im besten Fall (wenn sich nur selten Änderungen ergeben) kann man die Info: »So wie gestern morgen« senden.

#7859581
Lesenswert?

Moin,

Wieviel sich komprimieren laesst, haengt halt stark davon ab, wie "zufaellig" die Daten sind. Wuerde ich mir aber nur antun, wenn ich diese Daten dann ueber deutsche Internetzleitungen gebuehrenpflichtig weiterleiten muesste. Und sie sich heftigs komprimieren liessen, weil ich z.b. die Aussentemperatur mit 10nsec zeitlicher Aufloesung schicken will. Sonst ist derweilen GBitEthernet nicht wirklich viel mehr Raketentechnik als 10/100.

Mittlerweilen denk' ich, wirds eher darauf ankommen, ob du lieber mit irgendeinem Fertig-CPU/SPI/GBitEthernet-Chip z.b. von ST arbeitest oder lieber mit irgend einem FPGA. Oder was halt teurer wird, wenns in Grossserie gehen soll.

Gruss WK

#7859583
Lesenswert?

Noob A. schrieb:

Echt jetzt?

Dachte Gbit wäre mittlerweile Standard... wenn auch bei µCs wohl noch nicht soo verbreitet

Es gibt halt doch noch Unterschiede zwischen einem Rechner mit X GHz Multi-Core CPUs und XXX GB RAM und einem 32 Bitter Microcontroller.

Bei Gigabit kommen einfach unglaublich schnell unglaublich viele Daten. Ein µC hat da Probleme auf vielen Ebenen und es stellt sich sofort die Frage was er überhaupt so schnell mit so vielen Daten anfangen will.

#7859636
Lesenswert?

Dergute W. schrieb:

Sonst ist derweilen GBitEthernet nicht wirklich viel mehr Raketentechnik als 10/100.

Mittlerweilen denk' ich, wirds eher darauf ankommen, ob du lieber mit irgendeinem Fertig-CPU/SPI/GBitEthernet-Chip z.b. von ST arbeitest oder lieber mit irgend einem FPGA . Oder was halt teurer wird, wenns in Grossserie gehen soll.

Gruss WK

Wir hatten ein ähnliches Projekt mit Vibrationsregistrierung - und es gab ähnliche Probleme mit der Lautstärke. Am Ende haben wir uns für einen lokalen Puffer und eine Nachbearbeitung vor dem Senden entschieden.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren