Welchen Stack für mega16 + ENC

OP #3605376
Lesenswert?

Hallo,

nun bräuchte ich wieder eure Hilfe. Ich möchte natürlich nicht das Rad 
neuerfinden und auf die Erfahrungen anderer aufbauen.
Ich hab nen ATmega16 und den ENC28J60. Nun will ich lediglich TCP-Pakete 
senden und empfangen mit einem eigenen Protokoll. Also ich bräuchte 
einen sehr minimalistischen TCP-Stack. Ich hab mir jetzt schon uIP 
angesehen, aber ICMP und ARP und so brauche ich eigentlich nicht oder?
Gast #3605465
Lesenswert?

Mathias O. schrieb:

> nun bräuchte ich wieder eure Hilfe. Ich möchte natürlich nicht das Rad
> neuerfinden und auf die Erfahrungen anderer aufbauen.
> Ich hab nen ATmega16 und den ENC28J60. Nun will ich lediglich TCP-Pakete
> senden und empfangen mit einem eigenen Protokoll.

Ja, was denn nun? Eigenes Protokoll oder TCP? Oder eigenes Protokoll, 
was auf TCP aufsetzt?

> Also ich bräuchte
> einen sehr minimalistischen TCP-Stack. Ich hab mir jetzt schon uIP
> angesehen, aber ICMP und ARP und so brauche ich eigentlich nicht oder?

Wenn du TCP willst, brauchst du im Minumum auch IP. ARP ebenfalls, oder 
ersatzweise manuell erstellte konstante ARP-Tabellen.

ICMP hingegen ist mehr oder weniger verzichtbar. Das ist mehr sowas wie 
ein Protokoll zur Fehlerdiagnose. Ein µC kann in aller Regel mit den 
darüber gelieferten Infos eh' nicht viel nützliches anfangen. Allenfalls 
die Auswertung von REDIRECT-Nachrichten ist manchmal nützlich.

Aber im Vergleich zu TCP selber sind die anderen Protokolle vom Aufwand 
her sowieso eher gering einzuschätzen. Die Gretchenfrage ist also 
eigentlich, ob du TCP wirklich benötigst oder ob es nicht sinnvoller 
wäre, dein eigenes Protokoll direkt auf Ethernet aufzusetzen und damit 
gleich den ganzen teuren TCP/IP-Stack überflüssig zu machen...

Wenn es nur um solche Sachen geht wie etwa eine einfache Kommunikation 
mit Sensoren oder Aktoren innerhalb eines Netzwerksegmentes, dann 
braucht man das ganze IP-Geraffel nämlich eigentlich überhaupt nicht, 
gelgentlich wirkt es sogar eher störend.
Gast #3605466
Lesenswert?

Wenn du das Rad nicht neu erfinden willst solltest du noch 20€ in ein 
leistungsfähiges board investieren. Dann kannst du fertige Programme 
verwenden. uip ist so schon Quälerei. Das noch abzuspecken ist 
schwierig, weil man es dafür verstehen muss. Ohne Arp wird das sowieso 
nichts. ICMP fällt nicht ins Gewicht.
Gast #3605521
Lesenswert?

Mathias O. schrieb:

> Ich hab mich wahrscheinlich ein wenig undeutlich ausgedrückt. Es
> soll
> ein Protokoll werden wie Modbus auch eins ist. So soll es dann natürlich
> auf IP und TCP aufbauen.

Und warum dann nicht gleich auch Modbus nehmen, wenn du schon so auf 
universelle Standardprotokolle abfährst, daß dir ein Aufbauen auf TCP/IP 
als völlig natürlich erscheint?

Das wäre dann wenigstens konsequent.
#3605719
Lesenswert?

Mathias O. schrieb:
> Modbus ist dann wieder zuviel für mein Vorhaben. Es sollen nur ein paar
> Bytes übertragen werden. Maximal 10 Bytes Nutzdaten. Das ganze dann also
> alles im 5-7 Layer vom OSI, wenn mich nicht alles täuscht.

Das ist doch Murks. Bei solch kleinen Paketgrößen ist Ethernet extrem 
ineffizient, weil es eine minimale Paketlänge von 64 Bytes hat. CAN 
würde sich dafür eher anbieten: kleine Paketgröße von 8 Bytes Nutzdaten, 
völlig deterministisches Timing, viel geringerer Stromverbrauch.

fchk
Gast #3605769
Lesenswert?

Frank K. schrieb:
> Mathias O. schrieb:
>> Modbus ist dann wieder zuviel für mein Vorhaben. Es sollen nur ein paar
>> Bytes übertragen werden. Maximal 10 Bytes Nutzdaten. Das ganze dann also
>> alles im 5-7 Layer vom OSI, wenn mich nicht alles täuscht.
>
> Das ist doch Murks. Bei solch kleinen Paketgrößen ist Ethernet extrem
> ineffizient, weil es eine minimale Paketlänge von 64 Bytes hat.

Und? Wenn's schnell genug ist, um alle Daten zu übertragen, ist das doch 
wurscht.

> CAN würde sich dafür eher anbieten: kleine Paketgröße von 8 Bytes
> Nutzdaten, völlig deterministisches Timing, viel geringerer
> Stromverbrauch.

Das Timing von CAN ist nicht deterministisch.
Gast #3605788
Lesenswert?

Mathias O. schrieb:

> Modbus ist dann wieder zuviel für mein Vorhaben. Es sollen nur ein
> paar
> Bytes übertragen werden. Maximal 10 Bytes Nutzdaten.

Naja, und woraus leitest du die Anforderung ab, daß du IP und 
insbesondere auch noch TCP brauchst?

IP kann man ja noch verstehen, damit kann man die Grenzen des lokalen 
Netzwerksegments überschreiten und außerdem macht es (wie schon weiter 
oben von jemand anderem erwähnt) die Kommunikation mit Windows einfacher 
bzw. überhaupt erst möglich.

Aber TCP ist vergleichweise sehr fett, da sollte man genau überlegen, ob 
man dessen Features wirklich braucht. Ich würde mal vermuten, daß es UDP 
in deiner Anwendung auch tun würde und das ist viel schlanker. Obendrein 
ermöglicht es auch Broadcasts, was für manche Anwendungen ziemlich 
nützlich ist.
Gast #3605979
Lesenswert?

c-hater schrieb:
> Aber TCP ist vergleichweise sehr fett, da sollte man genau überlegen, ob
> man dessen Features wirklich braucht. Ich würde mal vermuten, daß es UDP
> in deiner Anwendung auch tun würde und das ist viel schlanker. Obendrein
> ermöglicht es auch Broadcasts, was für manche Anwendungen ziemlich
> nützlich ist.

Je nach Anwendungsfall ist es auch besser geeignet, da es bei 
Übertragungsfehlern nicht das Senden neuer Werte blockiert, bis die 
bereits veralteten nochmal gesendet wurden.
OP #3606124
Lesenswert?

Also um ein wenig Licht ins Dunkle zu bringen.

Es geht um eine Heizung. Diese hat eine CAN-Schnittstelle. Nun möchte 
ich gerne mit Hilfe einer App vom Tablet aus die Heizung bedienen. 
[Ironie] Nun hab ich schon überall geguckt, hab aber keine Tablet 
gefunden mit WCAN(Wireless CAN)[/Ironie]. Also muss ein Converter her. 
Da dachte ich mir dann natürlich auf Ethernet. Und eine App die dann per 
TCP die Daten sendet und empfängt ist am einfachsten zu schreiben.
Gast #3606163
Lesenswert?

Ich bastle gerade an so einer Lösung. Ich habe eine Kombination aus 
Atmega328, MCP2515 und ENC28J60. Pakete vom CAN-Bus schicke ich per 
UDP-Broadcast ins Ethernet und umgekehrt. Prinzipiell funktioniert das 
schon. ARP und Ping habe ich spaßeshalber auch realisiert. Ist 
allerdings alles selbst gestrikter Assembler-Code.
Gast #3606291
Lesenswert?

Mathias O. schrieb:

> eine App die dann per
> TCP die Daten sendet und empfängt ist am einfachsten zu schreiben.

Was soll daran einfacher zu schreiben sein als eine App, die die per 
Bytes Daten per UDP versendet? Wenn man blocking calls verwendet, sind 
die beiden Programme bis auf die Parameter zur Socket-Erstellung doch 
absolut gleich...
Gast #3606482
Lesenswert?

Nanu. Wenn ich das richtig überblicke, brauchst du noch ein 
WLAN-Ethernet Kästchen. Oder sehe ich da was falsch?

Wieso dann nicht gleich eine Linux-Platine mit WLAN-Stick und Webserver 
nehmen? Wozu dann die ganze Arbeit mit der zu kleinen Hardware und der 
App auf dem Tablett?
Gast #3606487
Lesenswert?

WLAN würde ich nur machen wenn keine Kabel möglich sind und ein WLAN 
Accesspoint ist wahrscheinlich sowieso vorhanden.

Egal ob CAN oder MODBUS, da werden immer nur Paketchen geschnürt, die 
sich locker in einem einzigen UDP-Frame unterbringen lassen. TCP wäre da 
Overkill und Controllerseitig wesentlich schwieriger zu implementieren.

Und UDP ist für's Tablet auch eher einfacher als TCP, zumindest nicht 
schwieriger.
Gast #3606536
Lesenswert?

Wozu hat man denn einen Router mit WLAN. Man glaubt es nicht, es gibt 
sogar Router mit LAN-Ports. Was soll man sonst mit einem Tablet.
Ich denke dan auch, dass ich UDP werden nehme. Das kann meine SPS auch. 
Also werde ich dann ARP, ICMP (da ich auch pingen will), IP, UDP und am 
Ende mein Protokoll implementieren.
Beim Tablet ist es egal, ob TCP oder UDP. Das ist beides ziemlich 
einfach.
Gast #3610042
Lesenswert?

Weil Ethernetpakete mindestens 64 Bytes lang sein müssen (und vier Bytes 
für die CRC draufgehen).

Diese Vorschrift ist ein Relikt aus halbduplex-Zeiten, um größere 
Kabellängen zu ermöglichen. Wenn die Datenpakete auf dem Kabel kürzer 
sind als das Kabel selbst, kann es an einer Stelle eine Kollision geben, 
die woanders nicht erkannt wird. Das Ethernet-Protkoll verläßt sich aber 
darauf, daß alle Teilnehmer mitbekommen, wenn es eine Kollision gegeben 
hat. Also ist die erlaubte Kabellänge durch die Länge des kleinsten 
erlaubten Paketes begrenzt.

Ist heutzutage bei vollduplex auf twisted-pair-Kabeln natürlich egal.
Wobei: der ENC kann ja nur 10Mbit, dann kann er wahrscheinlich auch 
keine fast link pulses, also keine Autonegotiation, also muß er 
halbduplex machen, oder?

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