Hallo, ich möchte von meinem Xplained Pro D21 über einen Wiz550io Daten an den PC senden. Das ändern der IP des Wiz550io hat schonmal geklappt und ich kann den Wiz550io auch vom PC aus anpingen. Bloss werden keine Daten versendet, was bereits daran scheitert dass der Socket nicht erfolgreich geöffnet werden kann. Die Befehlsfolge beim Start: -IP des Wiz550io ändern // {0x00, 0x0F, 0x04, 0xC0, 0xA8, 0x0A, 0x64} -Modus von Socket 1 auf TCP ändern // {0x00, 0x00, 0x2C, 0x01} -Destination IP übertragen // {0x00, 0x0C, 0x2C, 0xC0, 0xA8, 0x0A, 0x01} -Destination Port übertragen // {0x00, 0x10, 0x2C, 0xEC, 0x54} -Source Port übertragen // {0x00, 0x04, 0x2C, 0xEA, 0x60} -Socket 1 Command "OPEN" absetzen // {0x00, 0x01, 0x2C, 0x01} -100ms warten (unterschiedliche Wartezeiten ausprobiert) -Socket 1 Status lesen -> "1" (sollte es gar nicht geben) // {0x00, 0x03, 0x28, 0x00} -Socket 1 Command "CONNECT" absetzen // {0x00, 0x01, 0x2C, 0x04} -20 Byte in den TX Buffer des Socket 1 schreiben -Socket 1 Command "SEND" absetzen // {0x00, 0x01, 0x2C, 0x20} Auf PC Seite mir Wireshark den Netzwerktransfer überprüft, aber bis auf die ARP Anfrage des WIZ550io bei Start kommt gar nichts an.
Hab mich schon länger nicht mit dem W5500 beschäftigt, aber vielleicht hilft es Dir erstmal ein IP-Packet zu versenden...
Lenz schrieb: > -IP des Wiz550io ändern // {0x00, 0x0F, 0x04, 0xC0, 0xA8, 0x0A, 0x64} > -Modus von Socket 1 auf TCP ändern // {0x00, 0x00, 0x2C, 0x01} > -Destination IP übertragen // {0x00, 0x0C, 0x2C, 0xC0, 0xA8, 0x0A, > 0x01} > -Destination Port übertragen // {0x00, 0x10, 0x2C, 0xEC, 0x54} > -Source Port übertragen // {0x00, 0x04, 0x2C, 0xEA, 0x60} > -Socket 1 Command "OPEN" absetzen // {0x00, 0x01, 0x2C, 0x01} Ich kann leider aus den Bytefolgen nicht erkenen was du da machst. Meist ist dann doch ein längeres Programm-Listing nötig. Aber in der Folge der Kommandos musst du sicherstellen dass im Socket Status Register das drinsteht was du erwartest bzw. kommandiert hast. Dazu müsste nach dem Socket Open mindestens der Staus 0x13 Iinit) oder mehr erreicht sein (im Fall einer Client App dann mindestens 0x17, Established). Ansonsten ist irgendetwas an der Initialisierung fehlerhaft / nicht ausreichend und du musst sukkzessive (aus dem "geringeren" Status) deine Schlüsse daraus ziehen.
User schrieb: > vielleicht hilft es Dir erstmal ein IP-Packet zu versenden... das versuche ich indem ich einen 20 Byte Puffer in den TX Buffer von Socket 1 schreibe und dann den SEND Command in das Command-Register schreibe, aber wenn Socket 1 gar nicht erst geöffnet werden kann, kann das auch nicht funktionieren. Eberhard F. schrieb: > Aber in der Folge der Kommandos musst du sicherstellen dass im > Socket Status Register das drinsteht was du erwartest bzw. > kommandiert hast. genau bei der Folge der Kommandos bzw. irgendwelchen notwendigen Wartezeiten (zu Wartezeiten steht im Datenblatt leider nichts drin) hatte ich auf Erfahrungswerte gehofft. Ich habe zwischen den SPI Botschaften jeweils ein 100µs Delay und übertrage mit SS Leitung, also auch mit Variabler Datenlänge. An der SPI Kommunikation an sich vermute ich keine Fehler, da das ändern der IP funktioniert und der Logic-Analyser das gleiche anzeigt was ich auch im Debugger sehe. Nur eben will der Status von Socket 1 nicht auf Init wechseln (established wäre erst dann nach dem CONNECT Befehl) Source ist im Anhang, aber viel mehr steht da nicht drin.
Lenz schrieb: > Source ist im Anhang, aber viel mehr steht da nicht drin. Hast du denn eine gültige MAC Adresse konfiguruiert? In diesem Fall wären das die Register SHAR0...SHAR5 Antwortet denn dein W5500 auf einen Ping Request?
Lenz schrieb: > irgendwelchen notwendigen > Wartezeiten (zu Wartezeiten steht im Datenblatt leider nichts drin) > hatte ich auf Erfahrungswerte gehofft. Wartezeiten sind eine schlechte Idee. Du musst - wie bereits eingangs erwähnt - Statusse solange auswerten bis das richtige daherkommt und ein Timeout Error Handling vorsehen dafür wenn nicht das Erwartete passiert.
Lenz schrieb: > An der SPI Kommunikation an sich vermute > ich keine Fehler, da das ändern der IP funktioniert Die SPI Kommunikation kannst du ja einfachst verifizieren indem du die Register die du beschreibst auch wieder zurückliest. Es sind ja praktisch alle Register schreib- und lesefähig. Ich mache solche Verifikationen (Schreiben/Lesen/Vergleichen) routinemässig beim Startup / Init um die korrekte Datenverbindung sicherzustellen.
Nachdem hier etwas Stille eingekehrt ist kann ich ja mal zeigen wie ich die Probleme gelöst habe den W5100 (ja ... nicht den W5500) in den Griff zu kriegen LABWindows Printer Interface W5100 CVI --> Port --> Printer Port --SPI--> auf Arduino Testprogramm Driver zu W5100 Ethernet Shield Mein Windows Testprogramm greift über den Druckerport auf den W5100 zu. Damit kann ich alle Register schreiben/lesen und übersichtlich (es gibt ja doch einiges anzuzeigen) darstellen. Dabei sind alle relevanten Sourcen (*.h und *.c) so gestaltet dass ich sie nahezu ohne Änderungen in einem Projekt mit AVR GCC verwenden kann. Mit diesem Programm habe ich zunächst die grundsätzliche Hardware-Initialisierung verifiziert, dann das Socket Handling implemetiert und in einem weiteren Schritt auch den DHCP-Mechanismus aufgebaut. Mit dem Debugger in LABWindows CVI lässt sich das (im Gegensatz zu AVR Debugger) sehr komfortabel verfolgen und man muss nicht dauernd einen neuen Code in den Controller laden. Weil das alles so gut ging habe ich mir in einem weiteren Schritt das Vergügen gegönnt an den Druckerport eine ATMega88 zu hängen und ihn dazu benutzt die Kommandierung des W5100 über SPI zu beschleunigen. Damit erspart man sich das lästige hinausschieben des Kommando-Overheads (pro Datenbyte ein Kommando und 2 Byte Adressen) über den Druckerport und das SPI ermöglicht eine deutlich höhere Taktrate.
Eberhard F. schrieb: > Lenz schrieb: >> Source ist im Anhang, aber viel mehr steht da nicht drin. > > Hast du denn eine gültige MAC Adresse konfiguruiert? > > In diesem Fall wären das die Register SHAR0...SHAR5 > > Antwortet denn dein W5500 auf einen Ping Request? Der Wiz550io übernimmt bereits die erste Initialisierung inkl. MAC Adressen-Vergabe. Und ja ich kann ihn anpingen. Wenn ich in einer Schleife warte bis der Status auf Init geht ist es eine Endlosschleife, da der Status bei 0 bleibt. Ich kann die Werte in der Registern auch verifizieren, bis auf Source IP und Destination IP. Da kommen andere IP's zurück als zu erwarten. Aber ich glaube mal gelesen zu haben dass die zurück gelesenen IP's erst stimmen nachdem der Socket CONNECTED Status hat. Da ich den Wiz550io auch nur unter der IP anpingen kann die ich beschreibe und nicht die ich zurück lese, macht das auch Sinn. Das Problem ist und bleibt der Socket Status bleibt bei 0, egal was ich mache. Leider finde ich auch nirgends was genau die Bedingungen sind damit der Socket auf Init geht.
Gibt es keinen W5500-spezifischen Besipielcode wo das Socket- Init dargestellt ist? (habe nicht gegoogelt) Lenz schrieb: > Der Wiz550io übernimmt bereits die erste Initialisierung inkl. MAC > Adressen-Vergabe. Das konnte ich aus deinem Code nicht erkennen, ich hoffe du machst es trotzdem. Ich habe doch noch gegoogelt: Es gibt Application Notes wo ziemlich klar beschrieben ist was für einen Socket alles zu tun ist, vielleicht gibt das noch einen Hinweis. http://wizwiki.net/wiki/doku.php?id=products:w5500:application:tcp_function Ich zitiere daraus: --------------------------------------- Setting network information Basic network information setting for communication: It must be set the basic network information. SHAR(Source Hardware Address Register) It is prescribed that the source hardware addresses, which is set by SHAR, use unique hardware addresses (Ethernet MAC address) in the Ethernet MAC layer. The IEEE manages the MAC address allocation. The manufacturer which produces the network device allocates the MAC address to product. GAR(Gateway Address Register) SUBR(Subnet Mask Register) SIPR(Source IP Address Register) Set socket memory information This stage sets the socket tx/rx memory information. The base address and mask address of each socket are fixed and saved in this stage. --------------------------------------- Zitat Ende Zum Init gehört auch ein Initialisieren eines RX und TX Buffers, hast du du das getan? Sorry, ich kann deinen Code so schlecht lesen.
Wow, so mies kommentierten code hab ich länger nicht gesehen. Komplett unverständlich, da hat doch niemand Lust drauf zu schauen. Wieso schreibst du nur die funktionsnamen als kommentar hin, aber NIE was da warum passiert? Zur Sache: wiznet hat wirklich gute Beispiele zu ihren controllern, die zusammen mit dem Datenblatt lassen eigentlich nur wenig offen.
Eberhard F. schrieb: > Zum Init gehört auch ein Initialisieren eines RX und TX Buffers, > hast du du das getan? nein, ich kann aber auch nichts im Datenblatt finden dass das nötig ist. Ich finde, Zitat: ---- 16KB RX memory is initially allocated into 2KB size for each Socket RX Buffer Block (2KB X 8 = 16KB). The initial allocated 2KB size of Socket n RX Buffer can be re-allocated by using ‘Socket n RX Buffer Size Register (Sn_RXBUF_SIZE)’. ---- selbes zum TX Buffer, mir reichen die 2kb aber erstmal zur ersten (noch immer gescheiterten) Inbetriebnahme. Das die von dir zitierten Register gesetzt werden müssen, stimmt für den W5500, beim Wiz550io werden diese aber bereits vor-initialisiert (und müssen bloss bei Bedarf geändert werden). Ich habe die Register auch mal bei Start ausgelesen und sie sind ungleich 0 (also vom wiz550io Modul initialisiert). Wobei SUBR erwartungsgemäß 255.255.255.0 ist und sowohl GAR als auch SIPR falsche IP's sind (default ist 192.168.1.2 und darunter auch anpingbar, zurück gelesen wird aber 192.80.9.144 und GAR 192.80.2.3). Die "schlechte Dokumentation" bezog sich auch eher auf das Wiz550io Modul also auf den W5500. Ich habe kein Dokument gefunden dass genau beschreibt was alles wie initialisiert wird bei Startup des Moduls. Ich weiss ehrlich gesagt nicht was ich noch ausprobieren könnte.
Lenz schrieb: > nein, ich kann aber auch nichts im Datenblatt finden dass das nötig ist. > Ich finde, Zitat: Ok, dann ist das anders als beim W5100 auf den ich mich (als äquivalentes Teil) bezogen habe. Generell ist jedoch die Dokumentation der WizNet Leute aureichend und korrekt um so einen Chip in Betrieb zu nehmen. Ich weiss dann auch nicht weiter.
Hallo, ich habe ein Wiz550io Modul mal auf die Schnelle mit dem Nötigsten angeschlossen: V3,3, GND, Reset über 10k nach Vdd. Der RDY-Pin sagt 3,3V (also Ready State.) Bei Anstecken meines Kabels (normal ungekreuzt) blinken auch die Lämpchen fleißig am Jack. Jedoch kann ich es nicht anpingen. Laut Wiznet mit 192.168.1.2, aber da gibts 100% Verlust: Ping wird ausgeführt für 192.168.1.2 mit 32 Bytes Daten: PING: Fehler bei der Übertragung. Allgemeiner Fehler. PING: Fehler bei der Übertragung. Allgemeiner Fehler. PING: Fehler bei der Übertragung. Allgemeiner Fehler. PING: Fehler bei der Übertragung. Allgemeiner Fehler. Ping-Statistik für 192.168.1.2: Pakete: Gesendet = 4, Empfangen = 0, Verloren = 4 (100% Verlust), Was könnte hier noch faul sein?
Verirrter Netzwerker schrieb: > Bastler schrieb: >> Bei Anstecken meines Kabels (normal ungekreuzt) > > Von wo nach wo? vom Wiz550 direkt zum PC.
Bastler schrieb: > vom Wiz550 direkt zum PC. Dann schätze ich mal dass du entweder ein gekreuztes Kabel oder aber einen Hub bzw Switch brauchst. Auch ein DSL Modem mit einer zusätzlichen freien Netzwerkbuchse dürfte diese Aufgabe erfüllen.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.