Hallo zusammen,
ich möchte mich mit Ethernet an ein völlig neues Thema wagen, und hoffe
daher auf etwas "Starthilfe".
Ziel ist es, von einem µC via UDP/IP Messdaten an einen Host zu senden.
Dabei sollte eine Netto-Datenrate von min. 5 MBit erreicht werden
können. Der µC selbst ist noch nicht gesetzt, es geht aber um die
Größenodnung jenseits 100 MIPS. Viel Peripherie ist nicht notwendig,
einzig CAN und SPI muss er können.
Von komplexen Betriebssystemen würde ich gerne die Finger lassen, da der
Einarbeitungsaufwand und die Auswirkungen auf meine µC-Firmware
(Rechenoverhead, Latenz, Jitter) für mich überhaupt nicht abschätzbar
sind. Gleichzeitig möchte ich aber auch keine umfangreichen Treiber
und/oder Protokollstacks selbst schreiben.
Daher war die Überlegung, einen Interfacecontroller (ala XPORT, nur
schneller) zu verwenden, der zugleich auch UDP und IP mit erledigt, und
diesen via SPI an den µC anzubinden.
Mache ich hier schon den ersten Denkfehler, beispielsweise durch den
Verzicht auf den Komfort eines RT-OS?
Falls nicht, könnt ihr mir irgendwelche Controller empfehlen?
Gibt es vielleicht noch ganz andere Lösungsansätze, die ich bislang
übersehen habe?
Ich freue mich auf eure Anregungen und Kommentare.
Viele Grüße,
EthernetNeuling
Schaue Dir doch mal den STM32 oder den LPC1768 an.
hier gehts zum Artikel vom STM32.
Kaufe Dir dann von diesen Prozessoren am besten ein Demo-Board mit
Ethernet Schnittstelle. Achte darauf was für Demo-Codes dabei sind.
z.B. uIP TCP/IP Stack und Schaltplan.
Der STM32F107xx kann 72MHz, ab Ende diesen Jahres 120MHz.
Der LPC1768 kann 100MHz.
Hmmm... Ich würde da den Wiznet 5300 nehmen, da ist das ganze Protokoll
schon implementiert. Ansteuern würd ich den aber nur über den Bus, SPI
scheint mir doch schon recht knapp. Ich hab sowas mit einem ARM STR710
gemacht, und hab einen Datendurchsatz von ca. 4MByte/s.
Grüße
wenns um zuverlässige datenübertragung geht is ethernet eh die falsche
wahl....!!! und udp erst recht hier kann ohne weiteres mal was abhanden
kommen ;-)
>wenns um zuverlässige datenübertragung geht is ethernet eh die falsche>wahl....!!! und udp erst recht hier kann ohne weiteres mal was abhanden>kommen ;-)
Udp ist kein sicheres Protokoll,da kann sicher was verlorengehen.
TCP/IP ist ein sicheres Protokoll, da kann nix verlorengehen oder falsch
sein.
Ethernet hat sich bei mir als die problemloseste Art der
Datenübertragung herausgestellt, wohl auch weil die Treiber im PC am
besten mit dem Betriebssystem zusammenpassen.
Grüße
Erstmal besten Dank für die raschen Antworten.
Ob UDP oder TCP ist noch nicht raus, im Moment hätte ich aber UDP
aufgrund des geringeren Aufwands präferiert. Dass es hierbei zu doppelt
zugestellten, verloren oder durcheinander gewürfelten Paketen kommen
kann, ist mir bekannt. Datenverlust ist sporadisch nicht so schlimm,
zumal ich verlorene Pakete in höheren Schichten zumindest detektieren
kann. Hinzu kommt, dass ich die gesamte Topologie sowie die zu
übertragenden Datenmengen bestimmen kann und sich Kollisionen und
Routingprobleme daher (hoffentlich) grundlegend vermeiden lassen.
Gibt es sonst noch Vorschläge für einen Ethernet-Controller (nicht µC),
oder gar einen ganz anderen Lösungsansatz (z.B. sehr simples RT-OS mit
Treibern/Stacks)?
EthernetNeuling schrieb:> Gibt es sonst noch Vorschläge für einen Ethernet-Controller (nicht µC),> oder gar einen ganz anderen Lösungsansatz (z.B. sehr simples RT-OS mit> Treibern/Stacks)?
Es gibt Leute, die hängen einen Ethernet PHY an ein FPGA und blasen so
ihre Daten raus. Das geht dann bis Gigabit Ethernet. Ein Beispiel dafür
ist das USRP2 unter http://gnuradio.org/redmine/wiki/gnuradio/USRP2
fchk
was wird auf der gegenseite zu deinem µC sein?
standard ehternet oder industrial ethernet? weil du schreibst oben etwas
von can-bus? willst du can (open) over ethernet realisieren?
weil das klingt nach industrial ethernet und da wird es mit einem FPGA
schon nicht mehr so lustig. dort kommen dann ggf. komerzielle tcp stacks
zum einsatz und die kosten geld. zudem noch lizenzgebühren die an die
unterschiedlichen nutzerorganisationen. ebenso müssen mac adressen
gekauft werden. usw...
es gibt allerdings firmen die fertige modulsysteme anbieten mit
entsprechenden softwaretreibern.
Bin gerade nochmal über den Klassiger gestolpert:
http://shop.embedded-projects.net/index.php?module=artikel&action=artikel&id=89
das sollte Deine anforderungen ziemlich genau treffen:
- Ethernet über SPI
- Geschwindigkeit ?
- TCP/IP-Stack gibts fertig
dazu gibt es ja auch schon reichlich Threads in diesem Forum . . .
@Ernie
CANopen ist nicht geplant. Über CAN fahren wir ein eigenes Protokoll für
die Messdatenübertragung, welches wir künftig auch über UDP/IP auf
Ethernet übertragen möchten.
@Gebhard Raich
Der Wiznet W5300 sieht sehr vielversprechend aus. Fast schon zu
vielversprechend, wenn man sich die Leistungsdaten zu dem Preis ansieht.
Was sagen denn die Erfahrungswerte: ist der Controller unkompliziert
oder muss man mit vielen Bugs, Macken, etc. rechnen?
Insgesamt scheint die zentrale Frage zu sein, ob für UDP/IP ein eigener
Protokollcontroller (XPORT, WIZnet) sinnvoll ist, oder ob ein reiner
Transceiver (Controller-Peripherie oder ext. ala ENC...) genügt...
Ich hab den W5300 schon seit 2 Jahren in einigen Duzend Geräten im
Einsatz,bis jetzt ist mir noch kein Problem aufgefallen. Das Teil ist
schon fast so einfach wie eine serielle Schnittstelle zu programmieren.
Grüße
Hallo zusammen,
nachdem das Projekt erstmal einige Monate in der Versenkung verschwunden
ist (dynamische Priorisierung im Projektmanagement :-( ), konnte ich nun
erste Erfahrungen mit dem W5300 sammeln.
Am PMP eines PCI32 komme ich beim Versand von UDP-Paketen auf ca. 30
MBit/s (netto). Von der Datenrate absolut ausreichend, allerdings gibt
es zwei Wermutstropfen (und damit verbundene Fragen):
1.) Kein DHCP.
=> Hat das schonmal wer aufgesetzt oder muß ich es selbst
implementieren?
2.) Der Zugriff auf die TX-FIFO bei Anbindung mit einem 8 Bit Datenbus.
=> Der ständige abwechselnde Zugriff auf high-byte und low-byte ist sehr
ineffizient, vor allem weil ich deshalb auf den DMA verzichten muss.
=> Geht das einfacher, oder ist es eine Macke des Controllers, mit der
ich leben muss?
Viele Grüße,
EthernetNeuling