W3100a

Hi Leute, also ich habe da ein Problem. Habe selbst ei Board entwickelt, mit W3100a, RTL8201 und 89C52. Wenn ich versuche das Board anzupingen kriege ich bloss Zeitüberschreitung. Habe dann mal den Datenverkehr im Netz mit ETHEREAL aufgezeichnet. Das Board antwortet aber mein PC versteht das nicht. Hängt auch ein Router zwischen (NETGEAR RP6114v2) Der findet die Schaltung auch (IP adresse und MAC wird angezeigt. Wenn ich einen Ping sende erzeugt der W3100A auch keinen Interrupt. Ich weiss nicht mehr weiter. Hier dass Programm (für Hilfen wäre ich sehr dankbar. wie muss ich dat Dingen richtig programmieren?Von C habe ich keinen Blassen, mache alles mit BASCOM8051).

Übrigens der W3100a hängt auf der Basis-Adresse $8000

$regfile = "89c51.dat" $crystal = 4000000 $ramstart = &H8000 'at this adress is the w3100a (hardwired) Dim Iii As Byte 'i need variables Dim Aaa As Byte Dim Result As Byte Dim T As Byte Dim S As String * 50 Waitms 100 P3.1 = 0 P1.7 = 0 Iii = 0 Aaa = 0

Call W3100a_init

'Enable Interrupts 'enables the interrupts of my mcu 'Enable Int0 'enable the interrupt (at this pin is the int wire of the w3100a 'On Int0 Isr 'if ainterrupt occurs call the isr routine 'Initialise the INT0 Interrupt

Do P1.7 = Not P1.7 Wait 1 'at this position will be the main program (later) Loop

Isr: P1.7 = Not P1.7 'it will change the status of the led to show me that an interrupt has occured Return End

Sub W3100a_init 'W3100A Reset will set the reset pin for 50 ms at high then at low and wail 50ms P3.1 = 1 Waitms 50 P3.1 = 0 Waitms 50

'Init W3100A Out &H8000 , &H80 Waitms 50

'memory setup (4 x 2kB) Out &H8095 , 55 Out &H8096 , 55

'gar Gateway i have a netgear router, it have the ip adress 192.168.0.1 Out &H8080 , 192 Out &H8081 , 168 Out &H8082 , 0 Out &H8083 , 1

'smr Subnet-Mask subnet mask as at my windows computer Out &H8084 , 255 Out &H8085 , 255 Out &H8086 , 255 Out &H8087 , 0

'shar MAC Adresse 'MAC Address Out &H8088 , 0 Out &H8089 , 8 Out &H808A , &HDC Out &H808B , 0 Out &H808C , 0 Out &H808D , 0

'sipr IP-Adresse IP adress is 192.168.0.8 Out &H808E , 192 Out &H808F , 168 Out &H8090 , 0 Out &H8091 , 8

'sysinit i think it's o.k. Waitms 10 Out &H8000 , 1 While Result = 1 Result = Inp(&H8004) Wend '( 'TCP stream festlegen is that right? Out &H80A1 , 1 Waitms 100

'sock init I'm not really know is it correct Out &H8092 , &H0F Waitms 2 Out &H8092 , &HA0 Waitms 2

'port port have to be $80 (HTTP) Out &H80F6 , &H00 Waitms 2 Out &H80F7 , 80 Waitms 2

Out &H8000 , 2 While Result = 2 'established ? Result = Inp(&H8004) Wend ')

For T = 1 To 6 ' this for next routine let a led blink to show me it's ready P1.7 = Not P1.7 Waitms 500 Next T

End Sub

Reply to
Torsten
Loading thread data ...

War das "ICMP echo reply"-Packet (insbesondere die Adressen) korrekt?

Ich hatte mal Probleme mit Ping zwischen zwei Windows-Rechnern. Zum einen hatte die Firewall irgendwelche ICMP-Packete weggeworfen (AFAIK zeigt Ethereal die Packete vor der Firewall an). Zum anderen glaube ich, daß Windows Probleme mit dem Adressraum 192.168.0.x hatte, hab' das aber nicht genauer untersucht.

Warum sollte er auch einen Interrupt erzeugen, es gibt ja nichts, was die Aufmerksamkeit des Prozessors erfordert.

/Jan-Hinnerk

Reply to
Jan-Hinnerk Reichert

Warum nicht? Wo sind die Unterschiede zwischen den Paketen?

Hängt auch ein Router zwischen (NETGEAR RP6114v2)

Testhalber mal rauswerfen. Crosskabel verwenden.

Das ist ein gutes Zeichen.

Na und? Ist der erforderlich?

[Code entsorgt] Kann man das nicht lesbarer gestalten? (Assembler oder sowas)

Robert

Reply to
R.Freitag

[snip: BASIC *fingerkreuz*]

1) Einen PC anstelle des Boards anschliessen und verifizieren, dass das routing _wirklich_ klappt.

2) tcpdump nehmen und nachsehen, was gesendet und empfangen wird.

Zuerst sollte der pingende PC ja via ARP die MAC-Adresse anfordern, bevor er das ICMP Echo-Request-Packet senden kann. Wenn Du den ARP-Cache des PC ausliest (mit 'arp -a' als root) kannst Du auch sehen, ob es bis hierhin funktioniert hat..

Computer sind halt doof.... ;-)

Gruss Detlef

--
Man ersetze das _dot_ in der Email gegen einen Punkt..
Reply to
Detlef Voss

Hi, also habe das Ganze mal mit ethereal aufgezeichnet. Via ARP wird Adresse angefordert. Der Rechner bekommt auch die richtige MAC Adressse. Dann ghet das Datenpaket raus. Zurück kommt aber was ganz anderes. Also was Ethereal anzeigt kann man auf den Bildern sehen die hier liegen:

formatting link

Da sind 4 Bilddateien drin die alles zeigen.

Ich danke allen, die versuchen mir zu helfen.

Mfg T. Müller

Reply to
Torsten

Hab' die Bilder angeguckt. Ich versteh' Dein Problem trotzdem nicht. Natürlich kriegst Du was anderes zurück: Du schickst ein "Echo Request" (Anforderung) und kriegst ein "Echo Reply" (Antwort) zurück.

Wie sollte das den funktionieren, wenn er dasselbe Packet zurückschickt?

Ich bin mir recht sicher, daß Dein Problem an Deinem PC liegt. Kannst Du eigentlich von Deinem PC lokal andere Rechner anpingen? Kannst Du überhaupt irgendwas anpingen (z.B.

formatting link

/Jan-Hinnerk

Reply to
Jan-Hinnerk Reichert

Hi Torsten,

sieht aus, als ob der W3100 die Daten, die er kopieren sollte, versaubeutelt. Beim Identifier und der Sequenz number ist das recht fatal, dann kann der TCP/IP-Stack des sendenden Computers natuerlich die Antorten nicht mehr korrekt zuordnen und wirft sie weg.

Das sind doch schon mal Kandidaten. Schreibst Du da nicht dezimal 55 statt Hex 0x55 in die Register? Dann hättest Du mehr Speicher verteilt, als vorhanden ist.

Hier sollte eine Adresse gewiss 0x8093 sein?!

Setzt Du da nicht Port 80 fuer Channel 3??

Da ist erst die Socket-Initialisierung abgeschlossen, Verbindungen werden wohl erts akzeptiert, nachdem noch ein 'Listen'-Command abgesetzt wurde.

Die Datenzeiger fuer den Channel0 müssen dann noch initialisiert werden.

Das Pollen des Interrupt-Statusregisters macht womoeglich erst Sinn, nachdem die entsprechenden Interrupts im Interrupt-Mask Register auch frei gegeben wurden. Steht zwar nicht explizit im Datenblatt......

In den Poll-Schleifen auf das Statusregister solltest Du das Bit, auf das geprüft wird, vorher Maskieren. Sonst haengt Dein Programm dort womoeglich sehr lange. Und ein kurzes 'Wait' nach jedem Poll ist gewiss auch nett. Aber bei Basic womoeglich nicht noetig ;-)

Am besten, Du bereinigst die Speicheraufteilung, kommentierst erstmal alles nach'm sysinit aus und schaust, ob das Ping dann besser geht

Viel Erfolg damit, schreib mal, wie's ausgeht.

Wo haste die beiden Chips eigentlich bezogen?

Gruß Detlef

--
Man ersetze das _dot_ in der Email gegen einen Punkt..
Reply to
Detlef Voss

Huestel, das Ping-Programm hoechstselbst wirft die wohl weg, nicht der Stack. Aber ist ja egal, wech iss wech ;-)

Gruß Detlef

--
Man ersetze das _dot_ in der Email gegen einen Punkt..
Reply to
Detlef Voss

Jetzt wo Du es sagst, sehe ich es auch ;-( Ich hab' gerade mal meinen W3100A aus der Schublade geholt und der macht richtig.

Mehr Speicher zu verteilen ist in Ordnung, hab' ich auch ausprobiert.

Wozu überhaupt ändern?

Richtig ist auf jeden Fall $80ae/$80af

Das macht man zusammen. Also gleich (8 | 2) d.h. 10 schreiben.

Ist lange her, aber wenn ich mich richtig erinnere, ist das nicht nötig.

Bei den Schleifen ist noch mehr falsch:

Es sieht so aus, als ob Result beim ersten mal geprüft wird, bevor es gesetzt wird (Es sei denn das Basic macht was merkwürdiges). Dann ist der Test falsch und es wird gar nicht gewartet.

Abgesehen davon ist die Testbedingung falschrum, er wartet bis das Interrupt-Flag gelöscht ist.

Ansonsten sollte man noch nachprüfen, ob wirklich "=" sowohl für Zuweisungen als auch für Tests benutzt wird. Kann aber durchaus sein, daß das richtig ist.

Für den SysInit würde ich auch eher $8000 pollen und warten bis das bit0 gelöscht ist.

Volle Zustimmung. Aber besser gleich eine Endlosschleife einfügen...

Was passiert eigentlich nach der Initialisierung? Geht er in eine Endlosschleife oder macht er einen Reset und fängt von vorne an. Letzteres könnte Deine Probleme auch erklären.

Hoffentlich als fertiges Modul IIM7010, sonst könnte der Fehler auch noch im Layout liegen ;-(

/Jan-Hinnerk

Reply to
Jan-Hinnerk Reichert

die chips habe ich von DACOMWEST bezogen. Da gibt es auch die RJ45 Buchsen mit integr. Mgnetics und LED (MAG-Jack). Adresse:

formatting link

So jetzt trinke ich Kaffe und meine schwangere Frau O-Saft. und dann gehts nochmal ran an die Schaltung. Bis dann. MfG T. Müller

Reply to
Torsten

Hi, wenn ich einen anderen Rechner im Netz anpinge klappt das, und da kommen auch die Daten so zurück wie sie gesendet wurden. Ping will ja vergleichen ob die Übertragung klappt. MfG T. Müller

Reply to
Torsten

Hallo, also alles nach dem sysinit ist raus aus dem Programm. Die Zeilen

Out &H8095 , 55 Out &H8096 , 55 habe ich geändert

Out &H8095 , &H55 Out &H8096 , &H55

Aber das Ergebnis sieht nicht besser aus. MfG T. Müller

Reply to
Torsten

Hier ein geändertes Programm, funzt aber auch nicht :-(((( Die selben Probleme.

$regfile = "89c51.dat" $crystal = 4000000 $ramstart = &H8000 'Basisadresse w3100a Waitms 500 P3.1 = 0 P1.7 = 0

P3.1 = 1 'RESET Waitms 50 P3.1 = 0 Waitms 50

Out &H8000 , &H80 'w3100 initialisieren Waitms 50 '50ms warten

Out &H8095 , &H55 '0x55 in Register 0x95 für Speicheraufteilung Out &H8096 , &H55 '0x55 in Register 0x96 für Speicheraufteilung

Out &H8080 , 192 'Adresse vom Router Out &H8081 , 168 Out &H8082 , 0 Out &H8083 , 1

Out &H8084 , 255 'Subnet Maske Out &H8085 , 255 Out &H8086 , 255 Out &H8087 , 0

Out &H8088 , 0 'MAC Adresse (Wiznet) Out &H8089 , 8 Out &H808A , &HDC Out &H808B , 0 Out &H808C , 0 Out &H808D , 0

Out &H808E , 192 'Die Adresse sol das Board haben Out &H808F , 168 Out &H8090 , 0 Out &H8091 , 8

Waitms 30 '30ms warten Out &H8000 , 1 'Sys_init Wait 1 '1 Sekunde Warten Do P1.7 = Not P1.7 'LED blinken lassen (habe fertig) Waitms 400 Loop End

Reply to
Torsten

So langsam gehen mir die Ideen aus ;-(

Benutzt Du jetzt eigentlich ein Modul oder hast Du die ganze Schaltung selber aufgebaut?

Falls letzteres, solltest Du nochmal die Konfigurationspins überprüfen. Vielleicht Kurzschlüsse durch Lötzinn zwischen den Beinchen?

Ich hab' bei meinem Chip nochmal versucht durch falsche Konfiguration ein kaputtes "echo reply" zu erzwingen, aber selbst im "memory test"-mode läuft bei mir alles prächtig.

Den nochmal wegmachen, sollte aber nichts ändern.

Woher sind die 50ms. Da war irgendwo was in der Doku, aber ich find es nicht wieder.

Den Wait habe ich nicht

Gehe ich recht in der Annahme, daß das eine _Endlosschleife_ mit Blinken ist? Falls ja, gut.

Blinkt er denn wenigstens ;-)

Viel Glück Jan-Hinnerk

Reply to
Jan-Hinnerk Reichert

snipped-for-privacy@elcomportal.de (Torsten) schrieb:

Bitte keine Bilder von sowas machen, sondern lieber das capture file abspeichern und dieses veröffentlichen. Dann kann sich das jeder nach Herzenslust selbst im ethereal (oder tcpdump oder was auch immer) analysieren.

--
Jörg Wunsch

"Verwende Perl. Shell will man können, dann aber nicht verwenden."
				Kristian Köhntopp, de.comp.os.unix.misc
Reply to
Joerg Wunsch

ElectronDepot website is not affiliated with any of the manufacturers or service providers discussed here. All logos and trade names are the property of their respective owners.