www.mikrocontroller.net

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


Autor: Timo Birnschein (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Timo Birnschein (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.