Hallo,
habe gerade begonnen mit einem neuen Projekt. Es geht darum Messwerte
die im µC zwischengespeichert werden über Ethernet an den PC zu
übertragen. Hardwaretechnisch steht schon alles.
µC Board mit 10Base-T Ethernet Anschluss
Nun meine Frage. Kann ich über Ethernet einfach mit dem TCP Protokoll
eine Nachricht schicken die dann vom PC empfangen wird, oder muss man
über den HAndshake eine Verbindungssession aufbauen?
Gruß
Die gegenüber TCP einfachere Alternative, wenn in (im lokalen Netz eher
selten) mal was verloren gehen darf, ist UDP. Damit wird einfach ein
Frame zurechtgebaut und gesendet, egal ob er ankommt oder nicht.
Ein UDP-Paket zusammenzubauen ist vergleichsweise primitiv.
TCP dagegen ist schonmal deutlich komplexer und mit der ganzen
Flußkontrolle ein ziemliches Monster. Möchte ich nicht wirklich selber
implementieren müssen.
Wenn du so etwas wie Flußkontrolle in UDP haben möchtest, kannst du zu
den Nutzdaten immer noch einen fortlaufenden Zähler hinzufügen, damit
der Empfänger merkt, wenn mal ein Paket verlorengehen sollte.
Gerade wenn es nur darum geht gelegentlich mal Werte herauszusenden,
würde ich definitiv auf UDP setzen.
Hallo,
hab mir heut Morgen mal den TCP durchgelesen. Ja ist schon etwas
aufwendig. Vor allem da ja bei nem Heimnetzwerk wirklich nix verloren
gehen sollte. :)
Das mit dem Zähler ist ne prima Idee!!! Das werd ich machen. Japp hört
sich sehr gut an. Bin begeistert.
NAja kämpf grad noch etwas mit der Hardware rum. Will noch nicht so
hundert pro laufen das Ethernet. Aber nunja -> that's life
Hallo,
da ich mir auch schon den Kopf zerbreche, wie ich Daten möglichst
schnell vom µC bzw. CPLD zum PC übertrage, finde ich UDP momentan auch
am besten.
USB-480/Firewire400 ist mir einfach zu kompliziert.
Mit Beck-Ipc hab ich schon Erfahrungen gesammelt, da ist UDP auf der
Beck bzw. PC seite total easy. Um die Geschwindigkeit zu erhöhen, greife
ich die Idee vom Matthias Weißer (matthias) ->
Beitrag "USB2.0 High-Speed"
auf. Prinzip: im FPGA wird der Ethernet/TCP Header mit UDP Daten (UDP
Daten mit Zähler) gemacht, und mit einem Ethernet-Chip auf die Reise
geschickt.
Ich hab blos null Ahnung, welche Eigenschaften der 10/100 Baustein haben
soll. Nehme mal an, dass z.B. der Micrel KSZ8841 dafür geeignet ist.
Mit FPGA hab ich bisher noch nichts gemacht, denn den braucht man für
CheckSum Berechnung. Also da brauche ich noch Unterstützung.
Die Kommunikation zum µC mache ich in meinem Projekt mit RS232, damit
würde ich den Paketverlust auch handle'n.
Falls sich jemand für meine PC-Socket Einbindung (in Pascal)
interessiert? ich helfe gerne.
Gruß Robert
Ich will noch einige Details ergänzen.
Momentan sieht mein Prototyp-System so aus:
2GByte NAND-Flash
|
------------ ------------
| CPLD | 8 | PC |
CMOS --| Xilinx | -----/------> | LPT-EPP |
Sensor | XC2C256 | | |
------------ | |
| | |
--------------- | |
| µC | | |
| TI | <--------> | RS232 |
| msp430f2013 | | |
--------------- ------------
Das soll auch erst mal so bleiben, bis halt alles getestet ist. Nur will
ich, um die Datenrate zu erhöhen, die EPP Verbindung gegen Ethernet
ersetzen. Statt dem CPLD müsste da ein FPGA mit Ethernet-Chip hin, das
wäre dann ein zukunftsicheres Design. Und der Umstieg von 100MBit nach
Giga-Bit sollte dann eher simpel sein.
Wunsch Datenraten:
100Base-T 5..8MByte
1000Base-T 30..60MByte
Mit EPP schaffe ich 1.2 MByte (gemessen).
Da ich absolut keinen Zeitdruck habe, weil priv. Projekt, wäre es super
wenn mir jemand Tipps über div. Ethernet-Chips, auch Giga-Bit, geben
könnte.
Danke, Gruß Robert
es gibt auch tcp-stacks speziell für microcontroller.
z.b. der hier: http://sourceforge.net/projects/opentcp/
auf 'nem freescale-S12 braucht der etwa 4k ROM.
der ram-bedarf ist etwa 1500 bytes (sende/empfangsbuffer und ein paar
variablen) maximal. natürlich geht's auch mit viel weniger ram, weil man
bei der tcp-verbindungsaufnahme die paketgrösse aushandeln kann
(theoretisch bis runter zu 1 byte nutzdaten pro paket).
ach ja...
noch ein kleineres tcp findet ihr hier: http://www.sics.se/~adam/uip/
der tut's sogar auf 8-bittern. was kleineres gibt's nicht ;)
@Robert
Interessantes Projekt.
Ich hätte gerne Infos
zu dem EPP Mode. Hat man da einen seperaten
IRQ Händler, oder wird da gepollt ?
Wen das Master-LPT<->LPT bidir. mit IRQ-ACK, so wie LAPLINK EPP ect.
Also kein Zeichen overflow kommt.
Berichte mal ????
Gruss Holger
@Holger
schau mal auf http://www.geekhideout.com/iodll.shtml
diese IO DLL nehme ich momentan.
Weitere Infos zu Register und Anschluss:
http://www.beyondlogic.org/epp/epp.htm#1
Wie das mit IRQ geht, weiß ich nicht, eher mit ECP.
Ich nutze den EPP mode (im Bios muss der LPT auf EPP stehen).
Bei der DLL von www.geekhideout.com kann man auch 32Bit Zugriffe machen,
EPP unterstützt das voll und dann schaffst Du ca. 1.3MByte/s in oder
out.
Wichtig: bei EPP gibts das /WAIT Signal für die HW-Flusskontrolle.
Wenn Du DataStrobe negierst (TTL Inverter) und auf /WAIT lötest, dann
und nur dann ergibt das maximale Datenrate.
@guro
TCP/IP ist Softwaremäßig einfach zu langsam, da habe ich auch genügent
Lösungen. Der Gag vom seiner (matthias) Idee ist, dass man gar keinen
TCP-Stack hat, sondern den ganzen UDP TCP-Header vorgefertigt im FPGA
hat, CheckSum aktualisiert und dann "blind" sendet. Vielleicht hat ja
jemand schon sowas in dieser Art gemacht ?
Danke erst mal, ich schaue mich jetzt mal nach "NON-PCI ETHERNET CHIPS"
um und werde am PC div. Tests machen.
Gruß Robert
@Robert
Vielen Dank für die LPT EPP Tips.
http://ulrichradig.de/
Holger Klabunde ist auch noch ne gute Info Adresse.
Holger Buss
Ich habe den Webserver von Ulrich Radig nachgebaut.
Der hat auch Einsteiger FPGA-XILINX Aps. zum nachbau.
Wichtig ist erst mal das man ne laufende selbsgebaute HW hast.
Mit dem PC SENDEN-EMPFANGEN habe ich mit bei Tuxgrapics den
PC C-Source geholt.
Ich habe noch nicht den auto-answer modus versucht.
Das soll wie ein Kettenbrief abgehen.
Datenschleuder Modus ??? .
http://www.fischl.de/thomas/elektronik/cpld/index.html
Guss Holger.