www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Merkwürdiges Problem mit NE2000 Netzwerkkarte


Autor: Simon K. (simon) Benutzerseite
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Leute,

Mittlerweile läuft meine Netzwerkkarte an einem ATMega644 weitgehend 
problemlos. Allerdings ist mir doch noch was verdammt merkwürdiges 
aufgefallen.

ARP und PING (als ICMP Bestandteil) sind bereits realisiert. Pinge ich 
die Karte an, wird der ARP Request und der nachfolgende ICMP Echo 
Request beantwortet.

Nun habe ich allerdings probiert ein UDP Paket (mit NTP drin) 
loszuschicken. Dabei ergibt sich folgender Fehler:

Es werden von meinem Netzwerkmonitor(Wireshark) die NTP Pakete 
empfangen, die ich mit meinem AVR losschicke. Allerdings variieren die 
Daten innerhalb des Pakets. Komischerweise aber nur an einer bestimmten 
Stelle. Diese Stelle ist die IP-Paketlänge im IP Header. Die richtige 
Paketlänge beträgt 90 bytes (=005A hex). Die zweite (falsche Variante) 
des Paketes hat an dieser Stelle den Wert 76 (=004C hex). Welches Paket 
davon nun empfangen wird, ist purer Zufall. Manchmal kommen nur 
"falsche" Pakete an, manchmal 5 "richtige" direkt hintereinander.

Das allermerkwürdigste ist, dass bevor die Daten wirklich an den 
Datenport am AVR gelegt werden, die Daten im internen Puffer stimmen. 
Die erzeugte Prüfsumme ist somit in beiden Paketen immer gleich. Deshalb 
wird im "falschen" Paket die Checksumme immer als falsch markiert - 
völlig logisch.
Meiner Meinung nach müsste dieser Fehler aber innerhalb der 
Netzwerkkarte auftreten, da die Daten bis vor dem Anlegen an den 
Datenport (wie schon gesagt) sich nicht verändert haben.

richtiges Paket:
0000  00 e0 7d 7a 36 41 00 0a  10 20 a0 ff 08 00 45 00   ..}z6A.. . ....E.
0010  00 5a aa aa 00 00 80 11  0d b8 c0 a8 00 de c0 a8   .Z...... ........
0020  00 02 00 7b 00 7b 00 38  00 00 d9 00 0a fa 00 00   ...{.{.8 ........
0030  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00   ........ ........
0040  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00   ........ ........
0050  00 00 aa aa aa aa aa aa  aa aa                     ........ ..      

falsches Paket:
0000  00 e0 7d 7a 36 41 00 0a  10 20 a0 ff 08 00 45 00   ..}z6A.. . ....E.
0010  00 4c aa aa 00 00 80 11  0d b8 c0 a8 00 de c0 a8   .L...... ........
0020  00 02 00 7b 00 7b 00 38  00 00 d9 00 0a fa 00 00   ...{.{.8 ........
0030  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00   ........ ........
0040  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00   ........ ........
0050  00 00 aa aa aa aa aa aa  aa aa                     ........ ..      

PS: Im Anhang habe ich mal den relevanten Code angehangen.

Ich hoffe mir kann jemand einen Tipp geben. Danke schonmal im Voraus.

Autor: Simon K. (simon) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hmpf, keiner 'ne Idee? :-/

Wie ich solche undurchsichtigen Probleme hasse.

Autor: Simon K. (simon) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ohne das ganze jetzt nochmal ungewollt hochzuschieben:

Ich bin jetzt mal auf Nummer Sicher gegangen und hab die Daten, so wie 
sie an den Datenport der NIC gelegt werden über ein Terminal Programm 
ausgeben lassen.
-> Resultat: Das Paket wird 1A, völlig richtig gesendet.
Hier ein Auszug.
0000  00 E0 7D 7A 36 41 00 0A  10 20 A0 FF 08 00 45 00 
0010  00 5A AA AA 00 00 80 11  0D B8 C0 A8 00 DE C0 A8
0020  00 02 00 7B 00 7B 00 38  00 00 D9 00 0A FA 00 00 
0030  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00 
0040  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00 
0050  00 00 AA AA AA AA AA AA  AA AA

Im Wireshark siehts wiefolgt aus:
0000  00 e0 7d 7a 36 41 00 0a  10 20 a0 ff 08 00 45 00   ..}z6A.. . ....E.
0010  00 4c aa aa 00 00 80 11  0d b8 c0 a8 00 de c0 a8   .L...... ........
0020  00 02 00 7b 00 7b 00 38  00 00 d9 00 0a fa 00 00   ...{.{.8 ........
0030  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00   ........ ........
0040  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00   ........ ........
0050  00 00 aa aa aa aa aa aa  aa aa                     ........ ..      

Ich fass es langsam nicht mehr. Wo ist der Fehler bitte?! Und warum ist 
der Fehler nur, wenn ich versuche dieses spezielle Paket zu schicken. 
Das kann doch fast nicht wahr sein...

Autor: Simon K. (simon) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
PS: Andere Netzwerkkarte - Gleiches Problem. Ich bleib dran!

Autor: Simon K. (simon) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Oh Mann!

Keine Ahnung woran das liegt, dass der Wert verändert wird. Vielleicht 
macht das auch Wireshark. Aber eins habe ich festgestellt: Die 
Paketlänge im IP Header bezieht sich nur auf den IP Teil im Paket, nicht 
auf das gesamte Paket mit Ethernet Header. Nun ists statt 90 nur noch 90 
- 14 = 76. Und siehe da, mein Windows XP schickt sogar NTP Replys und 
der Fehler tauch nun nicht mehr auf.

Endlich weiterarbeiten! Juhu.

Danke für das Durchlesen ;)

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.