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:
1 | 0000 00 e0 7d 7a 36 41 00 0a 10 20 a0 ff 08 00 45 00 ..}z6A.. . ....E.
|
2 | 0010 00 5a aa aa 00 00 80 11 0d b8 c0 a8 00 de c0 a8 .Z...... ........
|
3 | 0020 00 02 00 7b 00 7b 00 38 00 00 d9 00 0a fa 00 00 ...{.{.8 ........
|
4 | 0030 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ........ ........
|
5 | 0040 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ........ ........
|
6 | 0050 00 00 aa aa aa aa aa aa aa aa ........ ..
|
falsches Paket:
1 | 0000 00 e0 7d 7a 36 41 00 0a 10 20 a0 ff 08 00 45 00 ..}z6A.. . ....E.
|
2 | 0010 00 4c aa aa 00 00 80 11 0d b8 c0 a8 00 de c0 a8 .L...... ........
|
3 | 0020 00 02 00 7b 00 7b 00 38 00 00 d9 00 0a fa 00 00 ...{.{.8 ........
|
4 | 0030 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ........ ........
|
5 | 0040 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ........ ........
|
6 | 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.