Forum: Mikrocontroller und Digitale Elektronik DM9000A macht Probelem


von Schnapphase (Gast)


Lesenswert?

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

von Schnapphase (Gast)


Lesenswert?

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