www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik DM9000A macht Probelem


Autor: Schnapphase (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Schnapphase (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

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.