Mein DM9000A macht Probleme. Oder mein Code, mit dem ich ihn nutze ;) Ich habe ein Altera DE2 Board mit Cyclone II und eben diesem DM9000A. Das Board soll auf UDP, ARP und ICMP Pakete antworten. Das tut es auch. Allerdings habe ich ein komisches Problem: Wenn ich das Board pinge (ARP und ICMP) funktioniert das so lange, bis mehr Traffic auf der Leitung entsteht. Wenn viele Pakete auf der Leitung sind, wird das Board extrem langsam und reagiert nicht mehr auf die pings oder verzögert die Antworten extrem. Aber: Wenn sich der Traffic wieder beruhigt, bleibt das Problem bestehen. Das Lustige: Ich hab raus gefunden, dass viel Traffic von kleinen Paketen nichts ausmacht. Kommt aber ein einziges größeres Paket (über 200 Byte) tritt das Problem sofort auf und ich muss das Board neu starten. Das Problem tritt zB immer auf, wenn ein 251 Byte großes UDP Paket zur Arbeitsgruppen-Identifikation an Boradcast gesendet wird. Solche Pakete werden aber vom Board gedroppt, das habe ich per Debug überprüft.... Kommt ein großes Problem gleich als aller erstes Paket zum Board nach dem Neustart, tritt das Problem auch auf. Der Code: http://pastebin.com/m1e2f871b Ich hab überlegt, ob meine Interrupt-Routine nicht einfach zu groß ist und das Ding deshalb langsam wird. Also habe ich nur eine ganz kleine Interrupt-Routine gebaut und den Rest im Hauptprogramm verarbeitet. Half aber nix. Außerdem... Wenn es an der Größe der IR-Routine läge, dann: * würde sich das Board wieder einkriegen, wenn weniger Traffic auf der Leitung ist * würde das Board nicht sofort beim ersten großen Paket Mist bauen * würde ich nicht stundenlang pingen können, was ich aber kann
Lösung: Multicast macht Probleme, also Multicast abschalten: RX Control Register macht heftige Probleme mit bestimmten Einstellungen Gesetzt: 0110001 = 0x31, dh gesetzt sind: 6: Watchdog Timer Disable = 0 (aktiviert) 5: Discard Long Packets = 1 4: Discard CRC Error = 1 3: Pass Multicast = 0 (unbedingt deaktivieren, sonst geht garnix) 2: Pass Runt Packets = 0 (kurze Pakete annehmen) 1: Promiscuous Mode = 1 (Netzwerkkarte nimmt einfach alles) 0: RX enable = 1
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.