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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.