Forum: Mikrocontroller und Digitale Elektronik Wiznet W5500 hängt sich auf?


von Hanns-Jürgen M. (yogy)


Lesenswert?

Hallo zusammen

Wie auch hier in einem anderen Thread beschrieben hängt sich der W5500 
auf und eine neue Kommunikation ist nur nach einem SW-reset möglich.

Ich nutze den W5500 für eine binäre Netzwerkkommunikation (TCP), mein 
System ist dabei der Server. Das funktioniert seit mehreren Monaten 
problemlos, allerdings bin ich dazu übergegangen, zyklisch den 
TCP-Socket Status zu überprüfen. Sollte er nicht auf „listen“ stehen, 
dann wird der W5500 neu initialisiert. Soweit so gut (oder schlecht).

Nun soll das System bei Bedarf eine eMail versenden (SMTP 
unverschlüsselt). Das habe ich nun auch hinbekommen. Nur nach der SMTP 
Kommunikation, die seitens des Servers mit der Nachricht: „221 2.0.0. 
Bye“ abgeschlossen wird disconnectiere ich den Socket wieder.

Soll dann einen weitere Mail (mit der selben Routine) versendet werden, 
geht das nicht. Der RX-Speicher gibt nur noch wirre Zeichen aus.  Die 
Überprüfung meiner Routinen (fehlende Inits etc) hat keinen Fehler 
gezeigt.

Nur nach eine Neuinitialisierung des W5500 (SW-reset) kann ich wieder 
einen Mail versenden.

Hat hier jemand eine Lösung dieser W5500 Fehlfunktion gefunden oder 
leben alle mit dem Workaround? Der funktioniert zwar, aber eventuell 
gleichzeitig laufende Kommunikationen auf anderen Sockets werden dadurch 
im Mitleidenschaft gezogen.

Auch ja: W5500 Modul aus China, Controller-Modul ist eine Arduino-DUE 
PCB. Programmiersprache „C“ mit Atmel Studio. Keine Arduino-SW.

von FloMann (Gast)


Lesenswert?

Hanns-Jürgen M. schrieb:
> Hallo zusammen
>
> Ich nutze den W5500 für eine binäre Netzwerkkommunikation (TCP), mein
> System ist dabei der Server. Das funktioniert seit mehreren Monaten
> problemlos, allerdings bin ich dazu übergegangen, zyklisch den
> TCP-Socket Status zu überprüfen. Sollte er nicht auf „listen“ stehen,
> dann wird der W5500 neu initialisiert. Soweit so gut (oder schlecht).
>
Warum nicht wieder öffnen und in den Listen Zustand des Socket wechseln,
wenn dieser zu ist?
Eine z.b. bestehende Verbindung ist ja auch nicht mehr Listen diese 
würdest
damit auch kappen wenn du den Chip reinitialisierst, was ja nicht 
zielführend wäre.

> Nun soll das System bei Bedarf eine eMail versenden (SMTP
> unverschlüsselt). Das habe ich nun auch hinbekommen. Nur nach der SMTP
> Kommunikation, die seitens des Servers mit der Nachricht: „221 2.0.0.
> Bye“ abgeschlossen wird disconnectiere ich den Socket wieder.
>
> Soll dann einen weitere Mail (mit der selben Routine) versendet werden,
> geht das nicht. Der RX-Speicher gibt nur noch wirre Zeichen aus.  Die
> Überprüfung meiner Routinen (fehlende Inits etc) hat keinen Fehler
> gezeigt.
>
Nach dem Socket Disconnect ist dieser zu, kannst du auch als Status 
auslesen.
Als Client musst du dich wieder connecten oder als Server in den Listen 
Zustand
wechseln, zuvor natürlich noch öffnen, wird das gemacht?
Ist dann eine Verbindung aufgebaut geht normal das senden und empfangen 
wieder
vorher natürlich nicht.

von Hanns-Jürgen M. (yogy)


Lesenswert?

FloMann schrieb:
> Hanns-Jürgen M. schrieb:
>> Hallo zusammen
>>
>> Ich nutze den W5500 für eine binäre Netzwerkkommunikation (TCP)...
>>
> Warum nicht wieder öffnen und in den Listen Zustand des Socket wechseln,
> wenn dieser zu ist?
> Eine z.b. bestehende Verbindung ist ja auch nicht mehr Listen diese
> würdest
> damit auch kappen wenn du den Chip reinitialisierst, was ja nicht
> zielführend wäre.

Das erneute Öffnen funktioniert leider nicht. Aus unerfindlichen Gründen 
kommt es nach einer unbestimmbaren Zeit dazu, daß der Socket vom 
listen-Status 0x14 in den Staus 0 wechselt. ein erneutes Öfnnen geht 
dann nicht mehr. Ein anderer Socket, der auf UDP lauscht (Status 0x14) 
ist seltsamerweise davon nicht betroffen. Dieses Problem ist auch schon 
von anderen Usern thematisiert worden. Aber keine hat einen Lösung 
(außer Neuinitialisierung.
>
>> Nun soll das System bei Bedarf eine eMail versenden ...
>>
> Nach dem Socket Disconnect ist dieser zu, kannst du auch als Status
> auslesen.
> Als Client musst du dich wieder connecten oder als Server in den Listen
> Zustand
> wechseln, zuvor natürlich noch öffnen, wird das gemacht?
> Ist dann eine Verbindung aufgebaut geht normal das senden und empfangen
> wieder
> vorher natürlich nicht.

Ist schon klar. Die connect-Phase funktioniert (scheinbar) auch, aber 
was bei der folgenden SMTP-Kommunikation empfangen wird ist nicht das, 
was gesendet wird (Wireshark). Mir scheint es, also ob die Buffer im 
W5500 "verwurschtelt" sind.

von FloMann (Gast)


Lesenswert?

Hanns-Jürgen M. schrieb:
> Das erneute Öffnen funktioniert leider nicht. Aus unerfindlichen Gründen
> kommt es nach einer unbestimmbaren Zeit dazu, daß der Socket vom
> listen-Status 0x14 in den Staus 0 wechselt. ein erneutes Öfnnen geht
> dann nicht mehr.
Nur als Info, ich nutze den Wiznet 5500, nun auch 6100 als ref. 
eingepflegt
in eigenen Designs mit eigener Software. Die von Wiznet bereitgestellten 
libs
kenne ich nur vom überfliegen und erste kurz Tests mit den EvaKits.

Status 0x00 ist ja closed, gibt es einen Socket Event? (Socket Interrupt 
Register)
Discon/Timeout Event würde ja dann im Status closed enden.
Wie führst du in dem Fall das erneute öffnen durch?, nur über Cmd Reg 
mit Open?
Hast du Mal den Inhalt des Socket Mode Register geprüft das müsste ja 
noch den
ursprünglichen wert für TCP und den weiteren ggf. gesetzten Optionen 
aufweisen.
Sollte dies "unerwartet" z.b. 0x00 haben geht das öffnen nicht.

Ist sicher gestellt das der Chip sich nicht vll. resettet hat? Und die 
Register sich im reset
Default befinden?
Wie häufig kommt das bei dir vor? Sowas konnte ich bisher "nicht" 
feststellen über relativ
lange Zeit*. Ausnahme z.b. durch Einwirkung von Störungen im Design z.b. 
starkes ESD,
Takt war dann für paar ms. auch nicht mehr vorhanden.
Der Chip resettet sich, Register hatten reset Defaults also da kommt man 
um Register neu
setzen nicht herum. Spannungen mal auf Einbrüche überwacht?
*z.b. mehrfach 5AT am Stück durchgehend im Labor als Einzelelektronik 
und als System
im Testanlagen Umfeld.

> Ein anderer Socket, der auf UDP lauscht (Status 0x14)
> ist seltsamerweise davon nicht betroffen. Dieses Problem ist auch schon
> von anderen Usern thematisiert worden. Aber keine hat einen Lösung
> (außer Neuinitialisierung.
?? Udp auf 0x14 (Listen) ??, Ein mit Udp geöffneter Socket hat doch 0x22 
(Sock Udp)
Wo thematisiert? Interesse halber, wenn's Schwachpunkte gibt kann es
ja mal hilfreich sein diese zu kennen um ggf. Drumrumzuarbeiten.

von FloMann (Gast)


Lesenswert?

Zur Vervollständigung, der Wiznet wird primär zur Maschinen 
Kommunikation
per UDP genutzt. Dazu läuft noch eine absolut rudimentäre http 
Implementierung
mit 3 möglichen aktiven Sockets bzw. auch reduziert auf einen und mit 
jeweils ein
Socket auf TCP "Server" und UDP als Daten loopback. Also 4 Sockets wurde 
aktiv
genutzt beim Testen. Letztendlich wird final nur die UDP basierte 
Kommunikation
verwendet beim Testen wurde aber viel auch mit TCP gearbeitet und das 
nur
vereinzelt ein Socket hier unerklärlich* nicht das macht was erwartet 
bzw sich
"abschießt" kam nicht vor.
*eigene SW Fehler ausgenommen was dann wiederum erklärlich war.

Ein Socket auf Listen konnte ich nach Tagen noch erreichen und lief 
Einwandfrei.
Wobei ich zugeben muss ob er dazwischen reopened wurde, und wenn warum
(Timeout/Discon Event?) weiß ich jetzt nicht genau, er war halt 
erreichbar.
Im Datenblatt wird jedenfalls nicht erwähnt (offensichtlich) daß der 
Listen Status
sich selbst beendet.

Sicher das bei dir die Software auch immer an den richtigen Socket n 
Basis Adressen
plus Reg Offset arbeitet? Die Socket Konfig zur Fifo Größe passt zu den 
genutzten Sockets.
Der Rx read ptr des sockets wird aktualisiert und der Empfang mit recv 
Cmd abgeschlossen?

von oweiowei (Gast)


Lesenswert?

FloMann schrieb:
> Zur Vervollständigung, ................
> ...................................

Jemand der mit TCP und Sockets umgehen kann sollte auch des
Formatierens von Texten mächtig sein.

Verwende einen Editor mit dem du den Zeilenumbruch machen kannst
und kopier dann den (ausreichend schmal) formatierten Text in
das Fenster zum Posten. Zu schwer? Zu kompliziert?

-----------------------------------------------------------------
Zur Vervollständigung, der Wiznet wird primär zur Maschinen
Kommunikation per UDP genutzt. Dazu läuft noch eine absolut
rudimentäre http Implementierung mit 3 möglichen aktiven Sockets
bzw. auch reduziert auf einen und mit jeweils ein Socket auf TCP
"Server" und UDP als Daten loopback. Also 4 Sockets wurde aktiv
genutzt beim Testen. Letztendlich wird final nur die UDP basierte
Kommunikation verwendet beim Testen wurde aber viel auch mit TCP
gearbeitet und das nur vereinzelt ein Socket hier unerklärlich*
nicht das macht was erwartet bzw sich "abschießt" kam nicht vor.
*eigene SW Fehler ausgenommen was dann wiederum erklärlich war.

Ein Socket auf Listen konnte ich nach Tagen noch erreichen und
lief Einwandfrei. Wobei ich zugeben muss ob er dazwischen
reopened wurde, und wenn warum (Timeout/Discon Event?) weiß ich
jetzt nicht genau, er war halt erreichbar. Im Datenblatt wird
jedenfalls nicht erwähnt (offensichtlich) daß der Listen Status
sich selbst beendet.

Sicher das bei dir die Software auch immer an den richtigen
Socket n Basis Adressen plus Reg Offset arbeitet? Die Socket
Konfig zur Fifo Größe passt zu den genutzten Sockets. Der Rx read
ptr des sockets wird aktualisiert und der Empfang mit recv Cmd
abgeschlossen?
-----------------------------------------------------------------

von FloMann (Gast)


Lesenswert?

Ich weiß jetzt nicht worauf du hinaus möchtest.
An meinem Tab mit Chrome sehe ich die selben
Absätze wie in deiner Version nur mit etwas
längeren Zeilen dafür aber auch mit weniger Zeilen.
BTT

von oweiowei (Gast)


Angehängte Dateien:

Lesenswert?

FloMann schrieb:
> An meinem Tab mit Chrome sehe ich die selben
> Absätze wie in deiner Version nur mit etwas
> längeren Zeilen dafür aber auch mit weniger Zeilen.

Auf meinem Firefox sehe ich da eine etwas chaotischere Darstellung.

von oweiowei (Gast)


Angehängte Dateien:

Lesenswert?

oweiowei schrieb:
> Auf meinem Firefox sehe ich da eine etwas chaotischere Darstellung.

Wenn das Firefox Fenster schmäler ist, dann eine noch chaotischere.

von Marco H. (damarco)


Lesenswert?

Beitrag "einfache und performante W5500 LIB"

Immer wieder gut den Thread zu lesen ;)

von FloMann (Gast)


Angehängte Dateien:

Lesenswert?

Um das Format Thema abzuschließen,
so sieht es an meinem Tab aus.

von Hanns-Jürgen M. (yogy)


Lesenswert?

FloMann schrieb:

>
>> Ein anderer Socket, der auf UDP lauscht (Status 0x14)
>> ist seltsamerweise davon nicht betroffen. Dieses Problem ist auch schon
>> von anderen Usern thematisiert worden. Aber keine hat einen Lösung
>> (außer Neuinitialisierung.
> ?? Udp auf 0x14 (Listen) ??, Ein mit Udp geöffneter Socket hat doch 0x22
> (Sock Udp)
> Wo thematisiert? Interesse halber, wenn's Schwachpunkte gibt kann es
> ja mal hilfreich sein diese zu kennen um ggf. Drumrumzuarbeiten.

Sry, habe das vertauscht. $14 ist TCP lauschen, §22 ist UDP lauschen.

Allen anderen Hinweise, auch die in den übriegen Antworten, werde ich 
nachgehen und testen. Ich werde dann berichten.

Noch einen schönen Sa-abend.

von Hanns-Jürgen M. (yogy)


Lesenswert?

> Sicher das bei dir die Software auch immer an den richtigen Socket n
> Basis Adressen
> plus Reg Offset arbeitet? Die Socket Konfig zur Fifo Größe passt zu den
> genutzten Sockets.
> Der Rx read ptr des sockets wird aktualisiert und der Empfang mit recv
> Cmd abgeschlossen?

Ja, bei mir ist Socket 0 fix UDP Server, Socket 1 fux TCP Server, Socket 
2 reserviert als TCP-Client (eMail), gerade neu im Aufbau.

von Hanns-Jürgen M. (yogy)


Lesenswert?

oweiowei schrieb:
> FloMann schrieb:
>> Zur Vervollständigung, ................
>> ...................................
>
> Jemand der mit TCP und Sockets umgehen kann sollte auch des
> Formatierens von Texten mächtig sein.
>
> Verwende einen Editor mit dem du den Zeilenumbruch machen kannst
> und kopier dann den (ausreichend schmal) formatierten Text in
> das Fenster zum Posten. Zu schwer? Zu kompliziert?
>
> -----------------------------------------------------------------
>er Empfang mit recv Cmd
> abgeschlossen?
> -----------------------------------------------------------------

Sehr hilfreich, danke .....  Ironie aus.

von Hanns-Jürgen M. (yogy)


Lesenswert?

Marco H. schrieb:
> Beitrag "einfache und performante W5500 LIB"
>
> Immer wieder gut den Thread zu lesen ;)

ist nun auf meiner TODO Liste.. Ich verwende übrigens modifizierte 
Routinen aus div. Libraries und bauer Timeouts ein...

von Marco H. (damarco)


Lesenswert?

Normalerweise macht man mehrere Sockets mit dem Port xxxx auf, damit man 
auch mehrere Clients abarbeiten kann. Ist kein offener Socket vorhanden 
lehnt der W5500 die Verbindung ab.  Das passiert dir auch wenn du die 
Sockets nach erfolgreicher Abhandlung nicht wieder in den richtigen Mode 
bringst. Dann nimmt der w5500 den nächsten Slot... Bis dann gar nichts 
mehr geht...

Du musst auch alle Sockets abklappern für deinen Service.

Wenn du mehre Dienste laufen hast, musst du Aufpassen das du auch die 
richtigen Register abfragst. Nicht das Dienst A, Dienst B ausließ, der 
kann dann mit den Daten nix anfangen.

Flags mit Timeouts sind wichtig, um die Slots wieder in den richtigen 
Mode zu bekommen.  Sonst bleibt dieser womöglich in einem Status 
hängen...

: Bearbeitet durch User
von Hanns-Jürgen M. (yogy)


Lesenswert?

Marco H. schrieb:
> Normalerweise macht man mehrere Sockets mit dem Port xxxx auf, damit man
> auch mehrere Clients abarbeiten kann. Ist kein offener Socket vorhanden
> lehnt der W5500 die Verbindung ab.  Das passiert dir auch wenn du die
> Sockets nach erfolgreicher Abhandlung nicht wieder in den richtigen Mode
> bringst. Dann nimmt der w5500 den nächsten Slot... Bis dann gar nichts
> mehr geht...
>
> Du musst auch alle Sockets abklappern für deinen Service.
>
> Wenn du mehre Dienste laufen hast, musst du Aufpassen das du auch die
> richtigen Register abfragst. Nicht das Dienst A, Dienst B ausließ, der
> kann dann mit den Daten nix anfangen.
>

alles klar.

> Flags mit Timeouts sind wichtig, um die Slots wieder in den richtigen
> Mode zu bekommen.  Sonst bleibt dieser womöglich in einem Status
> hängen...
ja, das lassen die Originalroutinen der Library zu (Copyright (c)  2013, 
WIZnet Co., LTD.)

So, ich habe ein wenig weiter experimentiert und habe nun die SMTP und 
POP3 Anwendung laufen. Die Ursache meiner Anfangs beschriebenen 
SMTP-Sende Probleme habe ich zwar nicht gefunden, ich gehe aber davon 
aus, dass es sich um einen Fehler in der Beendigung des SMTP-Dialogs 
gehandelt hat. Das ist behoben. Also wie üblich, mein SW Fehler.

Zur anderen Geschichte: Ich hatte hier im Forum vor rund vier Monaten 
bereits von dem Aufhänge-Problem des W5500 berichtet, das aber gelöst 
wurde. Es war ein RESET-Pin Problem des Arduino-DUE (Einstreuung).
( Beitrag "Arduino DUE Hardware mit W5500: Seltsame Absturzprobleme" )
Das funktioniert bis jetzt durchgängig. Und ich hatte mich geirrt/ 
falsch erinnert: Ich brauche keinen SW Reset des W5500 zu machen.

Zu "meinen" Sockets: Ich verwende drei fest zugeordnete Sockets. Nr. 0 
als UDP Server, Nr. 1 als TCP Server und Nr. 2 bei Bedarf als TCP-Client 
für SMTP oder POP3. Die Benutzung weiterer TCP-Server Sockets habe ich 
zwar angedacht, ist aber aktuell bei meiner Anwendung (noch) nicht 
notwendig.

BTW: Es scheint so zu sein, daß die Sockets nur der Reihe nach geöffnet 
werden können. Die Socket-Installation von Nr. 0,1,3 scheitert. Ich muss 
das mal genauer analysieren.

von Marco H. (damarco)


Lesenswert?

Dein

Hanns-Jürgen M. schrieb:
> BTW: Es scheint so zu sein, daß die Sockets nur der Reihe nach geöffnet
> werden können. Die Socket-Installation von Nr. 0,1,3 scheitert. Ich muss
> das mal genauer analysieren.

Eigentlich nicht, sie unterscheiden sich nur in den Adressen. Dein 
Server kann nur einen Client abwickeln. Versucht ein weiterer Client 
sich mit dem Port zu verbinden wird diese abgelehnt. Deine Clients 
sollten also so konfiguriert sein das sie es zufällig noch mal 
versuchen.

Vorsicht mit ARP der W5500 kann nur eine MAC aufnehmen. Connects zu 
mehreren Zielen lösen immer wieder ARP Telegramme aus. Das kann 
womöglich etwas dauern...

: Bearbeitet durch User
von jo mei (Gast)


Lesenswert?

Marco H. schrieb:
> Vorsicht mit ARP der W5500 kann nur eine MAC aufnehmen. Connects zu
> mehreren Zielen lösen immer wieder ARP Telegramme aus. Das kann
> womöglich etwas dauern...

Ach du Schande .....  das ist ja mal ein heisser Tip!
Danke dafür.

Ist sicher beim W5100 nicht anders ....

Vielleicht bist du auch beim LWIP mit diesen Gegebenheiten vertraut
(und könntest es uns verraten)?

von FloMann (Gast)


Lesenswert?

Aber es gibt für jeden der max. 8 möglichen
Sockets Register für die Ziel Mac.

von Marco H. (damarco)


Lesenswert?

Ja fällt dir aber trotzdem auf die Füße, wenn dein UDP Socket Daten an 
verschiedene Ziele senden muss. Oder man die Verbindung an eine andere 
IP neu aufbaut, dann dauert es durch ARP länger.

Ich hatte damals eine Artnet Node gebaut die in der Lage war zwei 
Streams zu mischen HTP/LTP, mich dann gewundert warum dann über 2sec 
alles blockiert ist. Sobald die Ziel IP unterschiedlich ist wird diese 
aufgelöst, geht ja nicht anders.

Abhilfe gab es nur in dem ich mein eignendes Table aufgebaut habe und 
die MAC vor dem senden in das Register geschrieben wurde.  Dadurch das 
dass Table nur eine MAC aufnehmen kann wird viel Broadcast nebenbei 
erzeugt wenn man unterschiedlich Ziele bedient.

von Marco H. (damarco)


Lesenswert?

FloMann schrieb:
> Aber es gibt für jeden der max. 8 möglichen
> Sockets Register für die Ziel Mac.

Eben aber nur eine! Entweder du füllst dieses selbst mit der MAC oder es 
wird vor dem senden aufgelöst -> ARP Trafic.  Man wundert sich dann 
warum das senden soooo lange dauert.

Der Chip ist Käse, das wissen die meisten auch ;)

von Hanns-Jürgen M. (yogy)


Lesenswert?

So, nachdem ich zwei Tage wegen eines idiotischen Fehlers meinerseits 
sinnlos verplempert habe, werde ich mich wieder dem Thema widmen.

Email senden klappt, Pop3 abfragen "manchmal". Ursache dafür liegt wohl 
nicht bei mir bzw. W5500: Der Versuch, den POP3 Port (110) zu 
connectieren wird oft mit "Port unreachable" (Wireshark) zurückgewiesen. 
Daher ist alles etwas zäh.

von Johannes S. (Gast)


Lesenswert?

Marco H. schrieb:
> Der Chip ist Käse, das wissen die meisten auch ;)

ich bin auch kein Wiznet Freund, aber die ARP Probleme kann ich nicht 
nachvollziehen. Die ARP Tabelle enthält die Zuordnung MAC <> IP Adresse, 
und die ist eindeutig. Verschiedene IP, verschiedene MAC, wo ist das 
Problem? Die Protokolle die darüber liegen unterscheiden noch Ports, 
aber damit hat die ARP Tabelle ja nichts mehr zu tun.

von Marco H. (damarco)


Lesenswert?

Das Problem ist das der Chip kein eigenes ARP Table aufbaut. So wie es 
fast jeder TCP/IP Stack machen würde. Es ist ja ein TCP/IP Stack da 
interessiert mich die MAC Adresse nicht.

So lange du nur TCP/IP benutzt fällt das nicht so wirklich ins Gewicht. 
Wenn du aber Daten an verschiedene UDP Ziele senden willst, gibt es dann 
ein Problem... Selbst wenn du die MAC dann selbst in das Register 
schreibst, ist dies ein schreib zugriff mehr....

Diese dumme Eigenschaft ist nicht transparent genug, wie vieles an dem 
Ding...

: Bearbeitet durch User
von FloMann (Gast)


Angehängte Dateien:

Lesenswert?

Hallo,
es ist jetzt schon etwas her aber nochmal etwas zum ARP.
Anbei mal dazu zwei Bilder für W5500 und W6100.
Der W5500 (192.168.71.18) hängt an einer EFM8LB12 MCU,
der W6100 (192.168.71.02) ist im Bus IO Mode an einem C8051F64.
Es wird eine komplett eigene Lib für die Wiznet's verwendet.
Es läuft auch noch normales "Programm" nebenher auf der MCU.
Dazu kommen zwei Windows PC's (*.100 und *.200) welche mit AX1
Daten senden und im Loopback zurückbekommen(ein UDP Socket).
Gestartet wurde mit Client *.200, dann kam *.100 dazu und
es wurde innerhalb Wireshark jeweils auf das erste Arp für
Client *.100 Frame referenziert.

Natürlich kommt es so zu jedermenge ARP "Transfers".
Allgemein könnte man auch überlegen ob sowas generell geschickt
umgesetzt wäre für seine Applikation, das man ständig mit einem
Socket alterniert und es sehr fix/zeitnah raus gehen muss.
Und ja, wenn es das muss um sein Ziel zu erreichen, kann man
sich dann auch eine ARP Tabelle anlegen um sich die Zeit für
den automatischen ARP zu Sparen.

Man sieht aber auch das in einem Lokalen Netz der ARP Transfer
nicht pauschal zu einem Problem führen muss da es jetzt auch
keine Ewigkeiten länger dauert.
Ich finde es etwas aufgebauscht und kann auch nicht beurteilen
woher deine,
"mich dann gewundert warum dann über 2sec alles blockiert ist",
kommen.

Im Zweifel von deiner Gegenstelle bei der Beantwortung des ARP,
oder generell dein Lib und Nutz Code?

Zuvor (und immer noch) setzen wir auch einen reinen MAC mit Phy
ein und haben einen Stack in Software. Auch dieser legt perse
keine ARP Tabelle an und die MAC Adresse muss aufgelöst werden.
Wäre hier nicht anders und im allgemeinen mit vergleichbar
eingesetzten MCU's im vgl. langsamer und Speicher hungriger.

Ich persönlich finde die Wiznet Chips (W5500/6100) schon im
Rahmen ihrer Möglichkeiten empfehlenswert. Es ist ein möglicher
Weg der Ethernet Kommunikation im Embedded bereich von vielen.
Aber die "Kenner" mögen das besser einschätzen können.

Grüße
FloMann

von Hanns-Jürgen M. (yogy)


Lesenswert?

Hallo zusammen,

mein ursprüngliches, im Eingangsthread beschriebes Problem ist gelöst 
bzw. hat sich in Luft aufgelöst. Ich kann nun beliebig Mails 
verschicken, abfragen und das alles auch noch unter DNS-Einsatz. Alles 
nun mit beliebiger Socket-Nr und ohnen Neuinit des W5500

Wie immer lag das Problem in meiner SW bzw. in der Verwendung der 
besagten Libraries.

Die Library habe ich begonnen, komplett umzuschreiben, bzw. nur die 
Teile, die ich auch benötige. Und das alles mit Timeouts versehen, so 
daß sich nichts mehr aufhängen kann.

Überhaupt war das "Timing" das eigentliche Problem. Ich hatte keine 
hinreichend lange Warteschleifen vorgesehen. Nur, diese würden 
grundsätzlich mein SW-Konzept durcheinanderbringen, da ich alle paar 
Hundert Millisekunden die Hauptprogrammscheife durchlaufen muß. Also 
habe ich die SMTP, POP3 und die DNS Routine in "Routinchen" 
portionsweise zerteilt, die dann einzeln in jedem Schleifenumlauf 
nacheinander angesprungen werden. Ist das Routinchen noch nicht 
durchlaufbar, weil z.B. noch keine Daten empfangen wurden, dann versuch 
es erneut im nächsten Umlauf bis zum Timeout. Sonst bearbeite das 
nächste "Routinchen".

Das eigentliche Thema ist damit "erledigt"

von Marco H. (damarco)


Lesenswert?

Schön...

Zum ARP... diese ganze Broadcast müssen alle Teilnehmer im Netz 
verarbeiten. Dein PC antwortet darauf relativ schnell. Dein TCP/IP Stack 
im microcontroller deutlich langsamer und wenn die Netze größer werden 
ist die Trafic auch höher.

Gräte mit Mikrocontroller etc. sind nicht in der lange eine Bandbreite 
mit z.Bsp 100Mbit/s zu verbreiten. Dessen Ports werden überflutet und es 
gehen Pakete verloren. Ich kam real beim w5500(Arduino DUE) mit HTTP 
Server auf 1,5Mbit/s(gut mit lesen von der SD-Karte die auf dem selben 
SPI Port hängt)  , UDP 8-10Mbit/s (Artnet DMX).

Dein ganzer SPI Protokoll Overhead lässt nicht viel mehr zu, auch beim 
SPI Takt von 80MHZ.

Schau mal die Trafic von W5500 an und du wirst bemerken das dort auch 
bei TCP ganz viele Pakete erneut angefordert werden.

: Bearbeitet durch User
von FloMann (Gast)


Lesenswert?

Hanns-Jürgen M. schrieb:
> Überhaupt war das "Timing" das eigentliche Problem. Ich hatte keine
> hinreichend lange Warteschleifen vorgesehen. Nur, diese würden
> grundsätzlich mein SW-Konzept durcheinanderbringen, da ich alle paar
> Hundert Millisekunden die Hauptprogrammscheife durchlaufen muß. Also
> habe ich die SMTP, POP3 und die DNS Routine in "Routinchen"
> portionsweise zerteilt, die dann einzeln in jedem Schleifenumlauf
> nacheinander angesprungen werden. Ist das Routinchen noch nicht
> durchlaufbar, weil z.B. noch keine Daten empfangen wurden, dann versuch
> es erneut im nächsten Umlauf bis zum Timeout. Sonst bearbeite das
> nächste "Routinchen".

Also eine "Art" des kooperativen Multitasking. Ich hatte mich recht
schnell dazu entschieden unter anderem auch aus dem Grund hier etwas
eigenes aufzusetzen was auch primär über die Socket Events funktioniert
(Socket Interrupt Register).
Aber Ende gut alles gut, klasse das du dein Ziel noch funktional
sauber erreichen konntest.

von FloMann (Gast)


Angehängte Dateien:

Lesenswert?

Marco H. schrieb:
> Schön...
>
> Zum ARP... diese ganze Broadcast müssen alle Teilnehmer im Netz
> verarbeiten. Dein PC antwortet darauf relativ schnell.
Da erzählts du mir aber nun was neues, der Wiznet antwortet(autark)
auf den ARP zwar nicht ganz so schnell aber es geht immer noch recht
fix.
Ansonsten schweifst du nun von deiner Wiznet und ARP "problematik" ab.
Deine "mich dann gewundert warum dann über 2sec alles blockiert ist",
ist mir immer noch unklar und wenn es um die halbe Weltkugel
ging okay mag das sein was jetzt nix daran ändert das dies kein
Prinzipielles Wiznet problem ist.

> Dein TCP/IP Stack im microcontroller deutlich langsamer und wenn
> die Netze größer werden ist die Trafic auch höher.
Worauf möchtest du hinaus? Gerade weil z.B. unser Software Stack
mit ext. MAC/Phy an den älteren eingesetzten MCU's langsamer und
anspruchsvoller bei Code und Ram ist bietet der Wiznet für diese
Basis und unseren Zweck eine gute Alternative. Auch gerade bei
mehr Teilnehmern und Traffic im Netz. Aber ja er hat auch klar
seine grenzen (z.b. Socket Anzahl und die RX/TX FIFO Größe).

> Gräte mit Mikrocontroller etc. sind nicht in der lange eine Bandbreite
> mit z.Bsp 100Mbit/s zu verbreiten. Dessen Ports werden überflutet und es
> gehen Pakete verloren. Ich kam real beim w5500(Arduino DUE) mit HTTP
> Server auf 1,5Mbit/s(gut mit lesen von der SD-Karte die auf dem selben
> SPI Port hängt)  , UDP 8-10Mbit/s (Artnet DMX).
Da sehe ich jetzt kein prinzipielles Wiznet Problem, der macht das
was er soll im Rahmen seiner Möglichkeiten.
Ich verstehe dann eher bei den "Anforderungen" nicht warum man
bei einen Atmel Sam3 mit MAC nicht diesen nutzt sowie die
Schnittstelle für die SD Karte. Weil es kein Arduino Shield dafür gibt?
Jetzt nimmt man einmal SPI und quetscht SD Karte und W5500 dran?
Schreibt/nutzt dann noch ineffizienten Code dazu.
Ja gut dann muss man mit 1,5Mbit/s leben.
Wenn es für die Anforderrung reicht dann ist ja auch voll in Ordnung.

> Dein ganzer SPI Protokoll Overhead lässt nicht viel mehr zu, auch beim
> SPI Takt von 80MHZ.
80Mhz SPI kann man quasi vergessen, wenn man real >> 10Mbit bei
ETH benötigt sollte man zuvor auch andere Möglichkeiten in betracht
ziehen. Dafür ist der Wiznet mit SPI Schnitstelle sicher nicht gemacht.
Mit 32Mhz SPI guten Code sollten 20Mbit one Way auch drin sein.

> Schau mal die Trafic von W5500 an und du wirst bemerken das dort auch
> bei TCP ganz viele Pakete erneut angefordert werden.
Hab ich zahlreich, was genau stört dich hier?
Viele TCP Retransmissions? Oder Paket Loss bei UDP?
Ist hier bei mir kein wirkliches Problem.
Kleinvieh macht auch mist so das man am Tag
auch mal x GByte transferiert und das soweit ohne Probleme.
PS im Bild die ARP Antwort Zeit des W5500
(und ja da steht/ist auch mal etwas mehr)

von Marco H. (damarco)


Lesenswert?

Ich habe damals die Treiber weiter entwickelt und der Code war 
grauenhaft...

Daraus ist dann eine Artnet Node entstanden mit vollen RDM Support. Man 
kann verschiedene Streams von Universen mischen HTP/LTP. Auf dem Socket 
laufen dann zwei Streams ein von unterschiedlichen Quellen a 4 
Universen, die auf einen 4x 512 Channels auf ws2812 + auf DMX mit RDM! 
und 1x DMX in mit RDM!. Das alles weil es nur um den Software ging auf 
Basis des DUE mit Shield. Da muss man nehmen was man bekommt.

Schon recht schnell war klar das der W5500 keine gute Wahl war...

Es fehlte Frames durch das Bufferproblem(ok Software), wegen ARP fehlten 
Frames da während der Auflösung der Socket blockiert war, UDP Pakete 
gingen verloren.  Ziemlich doof bei 44 Frames/s, merkt man sofort das 
was fehlte...

Durch RDM gibt es auch Trafic zurück zu den Controllern... An sich hat 
die Leistung vom DUE schon ausgereicht, viel Zeit verging um den 
Gurkencode des Herstellers zu überarbeiten. Bis heute ist dieser kein 
Stück besser geworden, einfach nur grauenhaft, wie der w5500 auch. Der 
ist aus vielen Applikationen mittlerweile auch wieder verschwunden. Zu 
hoher Strombedarf, 100Mbit PHY, macken im Stack usw...

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.