Hallo,
ich suche ein preiswertes µC-Board mit 2 unabhängigen Ethernet-Ports
(100MBit/s sollen es schon sein).
Des weiteren wären 2 UARTs und ein paar frei zugängliche I/O-Pins
wünschenswert (TTL-Pegel für 3,3V oder 2,5V ist bevorzugt).
Als CPU werden wohl mindestens 200 MHz erforderlich sein damit die
Pakete mit Wire-Speed verarbeitet werden können, das Board soll primär
zwischen den beiden Ethernet-Ports eine Art Protokoll-Umwandlung
durchführen. Bezüglich der CPU-Architektur bin ich relativ
leidenschaftslos, hauptsache es gibt eine vollwertige gcc-Tool-Chain.
Falls der Program-Code nicht im RAM liegt sollten 2 MByte reichen,
ansonsten gerne mehr. Hier ist ausreichende Performance wohl wichtiger.
Ich konnte nirgends was geeignetes finden, das einzigste was angeboten
wird sind relativ große professionelle Embedded-Computer mit 2
vollwertigen Ethernet-Ports, aber so groß will ich es nicht, ich suche
etwas kleines.
Ich hoffe Ihr könnt mir etwas (halbwegs) passendes empfehlen.
Grüße
Erik
Erik schrieb:> ich suche ein preiswertes µC-Board mit 2 unabhängigen Ethernet-Ports> (100MBit/s sollen es schon sein).Erik schrieb:> das einzigste was angeboten> wird sind relativ große professionelle Embedded-Computer mit 2> vollwertigen Ethernet-Ports, aber so groß will ich es nicht, ich suche> etwas kleines.
Du widersprichst Dir selbst.
Übrigens sind 200 MHz nur beim superskalaren Pentium und Intel NICs
ausreichend gewesen, RTL8139 brauchten einen P2-400.
Am preiswertesten düftest Du mit Raspberry Pi + 1x USB NIC hinkommen.
Im embedded Breich verwendet man sonst SOCs mit 1x Ethernet + 1x
Switch-Chip 3-Port. Falls man die Anschlüsse unterscheiden muss macht
der Switch-Chip intern (tagged) VLAN.
von TI gibt die Sitara AM335x Prozessoren, sind aber schon fettere
Cortex-A8 auf denen ein Linux laufen kann. Es gibt Boards damit, aber
die liegen bei 200 US$: http://www.ti.com/tool/tmdsice3359#buy, da
bekommt man kleine embedded PC evtl. schon billiger.
Oder ein Cortex-M wie LPC4088 oder STM32F7 und ein Wiznet Modul für den
2. Port dran.
HLK-RM04 mit Baseboard. Die MIPS-CPU (von Ralink) laeuft wohl
mit 360 MHz Takt. 2x Ethernet + ein paar GPIOs.
Bei Modulen/Routern die ebenfalls diesen Chipsatz benutzen,
konnte ich max. ca. 4 MByte/s Durchsatz erreichen.
Das ist von Wirespeed schon ein Stueck weg.
Bei der Beschaffung auf die Groesse von Flash und RAM achten.
Besser waere z.B. ein Board mit dem Intel IXP425.
533 MHz und 2 direkt am/im Chip haengende Netzwerkprozessoren
erreichen problemlos Wirespeed bei Fastethernet, auch auf
beiden Interfaces gleichzeitig.
Leider nicht mehr verfuegbar.
Fuer beide gibt es funktionierende Ports von OpenWRT.
Sicher gibt es aktuelleres, leider auch teureres...
Viel Erfolg
Hallo,
Danke für Eure Antworten!
Eine Variante mit einem echten Ethernet-Port und einer zusätzlichen
USB/SPI/sonstwas-Schnittstelle kommt nicht in Frage da ich keinen
Treiber für USB o.ä. programmieren möchte.
Auch die Variante mit einem Ethernet-Port mit VLAN-Tagging und einem
Switch erscheint mir eher ungeeignet, zum einen weil ich kaum glaube das
die Datenblätter zum Switch-Chip genau genug sind das ich das allein
hinkriege und zum anderen können ja die Frames auf den
Ethernet-Leitungen bereits Tagging benutzen und doppeltes Tagging geht
zwar aber dürfte im Switch-Chip wohl noch mehr Schmerzen verursachen.
Ich stelle mir vor das ich mein Programm ohne OS laufen lasse und dieses
primär aus den 2 RX-IRQ-Handlern besteht in denen dann jeweils aufs
andere Interface gewandelt wird.
Die 2 UARTs möchte ich primär für Debug-Zwecke und eventuell für eine
spätere Erweiterung um irgendwelchen Klein-Kram.
Auf dem Board müssen auch keine echten MAC-Adressen einprogrammiert
sein. Auch sonst ist keinerlei nichtflüchtiger Speicher (vom Code-Flash
mal abgesehen), keine RTC u.ä. erforderlich.
Das 200 MHz nicht reichen wenn ich die Daten von den beiden
Ethernet-Controllern manuell holen muss ist mir klar, ich erwarte
eigentlich das die Ethernet-Controller die Frames fertig im RAM ablegen
und mir dann einen RX-IRQ geben, und das zum Senden dem Controller nur
gesagt werden muss wo im RAM das zu sendende Frame liegt (Scatter-Gatter
o.ä. ist nicht erforderlich da ich keine MMU o.ä. benutzen möchte).
Ich hab durchaus ein paar µC gefunden die 2 vollwertige MACs haben aber
dort ist dann scheinbar immer noch Graphik, USB und alles mögliche
andere mit enthalten.
Gibt es denn keine kleineren Versionen mit 2 vollwertigen MACs (interne
PHYs für 10/100MBit/s wären bevorzugt aber extern geht zur Not auch)?
Grüße
Erik
Bei Ethernet reden wir oft von TCP/IP. Dieses Protokoll versieht jedes
Paket mit einer Prüfsumme. Wenn du die Daten änderst, musst du die
Prüfsummen neu berechnen. Und das wiederum stellt ganz erhebliche
Anforderungen an die CPU Leistung.
http://locklessinc.com/articles/tcp_checksum/
Warum unbedingt ohne OS? Ein Linux bringt alles mit was Du brauchst ...
ob nun RasPi, ein Board von pcengines.ch, oder wie angedeutet ein
OpenWRT-Router ...
Ansonsten evtl in Richtung FPGA gucken, vielleicht wirst Du da eher
fündig als in der µC-Ecke.
Hallo,
das "Banana-Pi in der Routerversion" sieht zwar echt cool aus aber eine
Dual-Core 64Bit-CPU ist irgendwie oversized für mein Projekt.
Das EtherCAT beim TI-µC sind keine zwei wirklich unabhängigen MACs, kann
man zwar eventuell so betreiben aber ob das insgesamt sauber
dokumentiert ist bliebe noch zu prüfen (so tief wollte ich jetzt nicht
in die Datenblätter einarbeiten).
Die Checksummen von TCP/UDP/IP sollten eigentlich vom
Ethernet-Controller automagisch gecheckt (beim empfangen) bzw. berechnet
(beim senden) werden, mir ist bewusst das dass sonst alles erheblich
CPU-Leistung frisst. Da ein µC mit 2 mal Ethernet wohl nicht unter 500
MHz verfügbar ist sollte das aber insgesamt kein Problem darstellen. Und
wenn Wire-Speed nur zur Hälfte oder nur für eine Richtung erreicht wird
werde ich sicher nicht weinen, aber mehr als eine Ethernet-USB-Krücke
möchte ich schon erreichen.
Auf das OS kann ich komplett verzichten da ich dessen IP-Stack nicht
benutzen möchte sondern die Ethernet-Frames selber empfangen und senden
möchte. Auch all die anderen tollen Features die ein OS sonst so zu
bieten hat nützen mir bei diesem Projekt eher wenig, ich benötige keine
Dateien und kein komplexes Speichermanagement (die MMU soll schon aus
Gründen der Performance aus bleiben, für ein simples malloc/free für
Bare-Metal-Applications gibt es kleine Libraries) und auch sonst nichts.
Meine Ideal-Vorstellung wäre ein simpler µC mit 1 MB internem Flash und
2 MByte internem SRAM (eventuell reichen auch 1 MB) und 2 internen
Ethernet-MACs (meinetwegen mit MII-Interfaces zu den externen PHYs) und
2 UARTs und ein paar IO-Ports als Single-Chip-Lösung. Soetwas scheint es
bei keinem Hersteller zu geben, selbst bei Atmel ist dann mindestens
USB/Graphik/DDR-RAM-Interface/NAND-Flash obligatorisch (was mir zum
selber Entwickeln einer Platine zu viel Aufwand/Risiko bedeutet).
Ich weiß das es auch FPGAs mit echten CPUs und verschiedener Peripherie
gibt aber das ist noch mal teurer und hat noch größere Gehäuse, mal
davon abgesehen das ich den FPGA-Logik-Teil für dieses Projekt nicht
benötige.
Grüße
Erik
> Die Checksummen von TCP/UDP/IP sollten eigentlich vom> Ethernet-Controller automagisch gecheckt (beim empfangen)> bzw. berechnet (beim senden) werden
Nun, da kannst du lange suchen. Denn die mir bekannten Ethernet
Controller kümmern sich bestenfalls um die Prüfsumme vom Ethernet Frame.
Jedoch nicht vom IP-Protokoll.
Da brauchst du dann schon Controller, die IP können. Also z.B. diese
Chips von Wiznet. Aber das ginge nicht in die Richtung, die Dir
vorschwebt.
> ein simpler µC mit 1 MB internem Flash und> 2 MByte internem SRAM (eventuell reichen auch 1 MB)
Ab 1MB RAM wird bei Digikey die Ergebnisliste sehr übersichtlich
Angebot und Nachfrage, das ist eben eine Kombi die nicht viele brauchen.
Mir fallen jetzt auch nicht soviele Geräte ein die zwei Ethernet Ports
brauchen und nix an Grafik oder sonstigem. Am ehesten kommen dem doch
die genannten Routerboards nahe. Und wenn die soviel Power haben das da
auch ein (embedded) Linux drauf läuft dann ist in der Treiberschicht
doch schon alles erledigt.
Bei EA gibts noch i.MX6/7 Module mit Dual Ethernet, aber da braucht man
noch ein Trägerboard mit PHY und den Buchsen. Oder bei Phytec schauen,
die haben auch sowas in diese Richtung.
Du solltest unbedingt genauer beschreiben, was für eine
"Protokoll-Umwandlung" eigentlich notnwendig ist. Wie Stefan Us schon
geschrieben hat, geht man bei Ethernet, wenn man so wie du nichts
spiezielles dazu sagt, meist davon aus, dass es um TCP/IP oder UDP und
Konsorten geht. Natürlich kann man in einen Ethernet Frame auch andere
Sachen reinpacken.
Das ist hier aber wesentlicher Aspekt, weil davon ja abhängt wie viel
Rechenleistung notwendig ist und auch wie hoch der
Implementierungsaufwand ist.
Auch wenn man die Rechenleistung und 98% der anderen Features eines RaPi
und eines kompletten OS nicht braucht, ist es nicht unwahrscheinlich
dass diese Lösung fertig ist bevor du mit deiner Bare-Metal Variante
überhaupt einen einzigen Frame vom Ethernet Controller geholt hast und
mit etwas Pech ist bis dahin nichtmal die Toolchain aufgesetzt.
Wenn es da nicht nicht andere zwingende Randbedingungen wie
Stromverbrauch, Platz, Ausfallsicherheit, Bootzeit, etc. oder Hobby (aka
ich will das einfach so machen) gibt, sollte man den Ansatz überdenken.
Stefan U. schrieb:> Denn die mir bekannten Ethernet Controller kümmern sich bestenfalls um> die Prüfsumme vom Ethernet Frame.
Zumindest der im stm32 macht das innerhalb tcp udp und co.
Whitespace schrieb:> und eines kompletten OS nicht braucht, ist es nicht unwahrscheinlich> dass diese Lösung fertig ist bevor du mit deiner Bare-Metal Variante> überhaupt einen einzigen Frame vom Ethernet Controller geholt hast und> mit etwas Pech ist bis dahin nichtmal die Toolchain aufgesetzt
Genau das ist es.
Wenn er bei den harten Vorgaben bleibt wird das ganze auf ein eigenes
Board mit externen/m Ethernetcontroller/n herauslaufen und parallel mit
dem µC verbunden. Wiederum ohne OS (auch kein RTOS oder so?) anbinden
wird richtig bitter. Dann braucht er vielleicht noch externen Speicher?!
Die CPU braucht 200MHz um Frames zu filtern? Was heißt das?
So ein Board gibt es nicht.
Die Konzepterstellung allein steht schon in keinem Verhältnis zu 80€ für
den Banana-Pi-Router.
Wenn Du das so "pur" brauchst, dann bau doch ein eigenes Linux-Modul, so
dass der ganze Rest wegbleiben kann.