Forum: Mikrocontroller und Digitale Elektronik Wiznet W3150A+ mit Mega128 Problem!


von Timo Birnschein (Gast)


Lesenswert?

Hallo,

ich arbeite seit zwei Wochen an einer Verbindung von Mega128 und einem 
Wiznet TCP/IP Modul namens W3150A+.

Das Modul selbst bietet alles, was man braucht, die die es kennen werden 
es sicher wissen. Ich habe gesehen, dass man das Modul mit µCOS auf 
einem Altera FPGA sehr leicht zum laufen bringen kann.

Wenn ich nun den C-Code des FPGAs auf meinen Mega128 portiere, bekomme 
ich das Modul aber nicht zum laufen. Dies gilt ebenfalls für den 
original Wiznet Treiber, den man ebenfalls recht leicht für AVR 
portieren kann.
Ich kann Daten mittels SPI hinschicken und auch Daten auslesen. Soweit 
so gut.
Wenn ich aber nun versuche das Modul zum laufen zu bekommen, scheint es 
herum zu spinnen.

Ich setze erstmal alle notwendigen Register. Z.B. IP, MAC, Subnet, 
Gateway, anschließend mache versuche ich nen Socket auf zu machen und 
dort den Source-Port zu setzen.

Beim Source-Port beginnt das ganze dann bereits zu scheitern. Wenn ich 
das High-Byte setze, klappts noch, wenn ich das Low-Byte hinterher 
schiebe, klappt es nicht mehr. Beispielsweise 0x0050 (port 80) setze ich 
und lese anschließend 0x0150 wieder aus. Wo ist der Sinn?
Das führt sich leider so fort. Wenn ich das Sn_CR Register für Socket 0 
auf TCP setze, klappt das, wenn ich anschließend den Port setze um dann 
mit Sn_CR = 0x01 versuche den Socket zu öffnen, gehts nicht weiter, da 
im Statusgegister für Socket 0 nie SOCK_INIT steht, sondern immer nur 
irgendein quatsch.

Da das Wiznet Modul Big Endian zu sein scheint und ich mit Übertragungen 
wie:

-----------------------------
  // Set Sn_MR to 0x01

  packet = 0;
  packet |= (0xf0000000 | (0x0400 << 8)) | 0x01;
  spi_send32(packet);

  packet = 0;
  packet |= (0x0f000000 | (0x0400 << 8)) | 0x00;
  printf("\tSn_MR: %.2x\n", spi_send32(packet));
------------------------------

arbeite, wobei 0xf0000000 der OpCode zum schreiben, 0x0400 die Adresse 
ist und 0x01 das Datenwort, in diesem Fall Sn_MR_TCP.

Um Abstand zu nehmen von den vorgebenen Codes, habe ich ne kleine .h 
datei angelegt in der ich eben zum Testen die ganze initialisierung 
manuell vornehme. Vielleicht hat jemand damit schonmal gearbeitet und 
kann mir sowas sagen wie "Hey, der AVR ist Little Endian, darum musst du 
alle Adressen umdrehen!"

Damit wäre mir schon sehr geholfen, es ist nämlich nur eine Theorie.. :(

Gruß und danke fürs Lesen,
Timo

ps. unten an der manuinit.h ist mein SPI-Code angehängt. Der ist hier 
natürlich mit absicht auskommentiert, da er nur als Beispiel für meine 
Übertragungsart da dran ist.

von Timo Birnschein (Gast)


Angehängte Dateien:

Lesenswert?

Hm, das mit dem Datei anhängen scheint nicht geklappt zu haben...

Hier der Link: http://www.microforge.de/mcnugget/manuinit.h

Danke und Gruß
Timo

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.