M
Michael Dreschmann
Guest
Hallo,
ich bin gerade dabei ein Gerät mit Netzwerkinterface zu entwickeln.
Als Ethernetcontroller kommt dabei ein CS8900A-CQ (10MBit, von
Crystal) zum Einsatz, der von einem M16C angesprochen wird. Der
CS8900A ist über Twisted Pair (isolation transformer = TG42-1406N1)
mit einem 100/10 MBit Switch verbunden. Die Verschaltung des analogen
TP-Parts ist wie im Datenblatt vom CS8900A angegeben. Auch am RES Pin
des Controllers liegt mittlerweile ein echter 4.99KOhm Widerstand
gegen Masse und die Kommunikation M16C <-> CS8900A funktioniert
einwandfrei.
Beim Empfangen (also Switch -> CS8900A) von Ethernet-Frames gibt es
nun folgendes Problem:
Wenn mehrere Frames schnell aufeinander folgen, werden vom CS8900A
nicht alle korrekt empfangen. Etwa jedes 20. Paket geht verloren.
Ich habe mal die Error Flags analysiert und so erfahren, dass der
Controller bei einem solchen "verlorenen" Paket meistens einen
Runt-Error (= Paket zu kurz, < 64 Byte, ist im Ethernet wegen
Kollisionserkennung nicht erlaubt) und (logischerweise auch) einen CRC
Error ausgibt. Manchmal ist es aber auch nur ein CRC Error oder er
registriert gar kein Paket.
Dieser Fehler tritt nur auf, wenn die Ethernet Pakete schnell
aufeinander folgen (bei meinem Test ca. 10ľs Delay zwischen den
Frames) und auch schon, wenn es nur zwei Pakete sind.
Wird zwischen den Paketen hingegen ein grösserer Delay (z.B. 10ms)
eingehalten, so geht keines verloren. (Ein Mp3-Datenstrom lässt sich
z.B. fehlerfrei abspielen.)
Durch die vielen Runt-Errors dachte ich zuerst, der Controller würde
vielleicht manchmal das Preamble eines Frames verpassen, aber dieser
Fehler müsste dann ja auch bei grösseren Delays zwischen den Frames
auftreten.
Daher meine Frage, hatte jemand schon mal ein ähnliches Problem oder
eine Idee, wo ich noch suchen könnte?
Und wenn jemand ein Projekt mit dem CS8900A am Laufen hat, könnte er
mir vielleicht mal die Initialisierungsroutine schicken? Ich könnte
mir vielleicht auch vorstellen, dass es an einer falschen
Initialisierung liegt. Obwohl der Controller ansonsten einwandfrei
funktioniert.
Vielen Dank,
Michael
ich bin gerade dabei ein Gerät mit Netzwerkinterface zu entwickeln.
Als Ethernetcontroller kommt dabei ein CS8900A-CQ (10MBit, von
Crystal) zum Einsatz, der von einem M16C angesprochen wird. Der
CS8900A ist über Twisted Pair (isolation transformer = TG42-1406N1)
mit einem 100/10 MBit Switch verbunden. Die Verschaltung des analogen
TP-Parts ist wie im Datenblatt vom CS8900A angegeben. Auch am RES Pin
des Controllers liegt mittlerweile ein echter 4.99KOhm Widerstand
gegen Masse und die Kommunikation M16C <-> CS8900A funktioniert
einwandfrei.
Beim Empfangen (also Switch -> CS8900A) von Ethernet-Frames gibt es
nun folgendes Problem:
Wenn mehrere Frames schnell aufeinander folgen, werden vom CS8900A
nicht alle korrekt empfangen. Etwa jedes 20. Paket geht verloren.
Ich habe mal die Error Flags analysiert und so erfahren, dass der
Controller bei einem solchen "verlorenen" Paket meistens einen
Runt-Error (= Paket zu kurz, < 64 Byte, ist im Ethernet wegen
Kollisionserkennung nicht erlaubt) und (logischerweise auch) einen CRC
Error ausgibt. Manchmal ist es aber auch nur ein CRC Error oder er
registriert gar kein Paket.
Dieser Fehler tritt nur auf, wenn die Ethernet Pakete schnell
aufeinander folgen (bei meinem Test ca. 10ľs Delay zwischen den
Frames) und auch schon, wenn es nur zwei Pakete sind.
Wird zwischen den Paketen hingegen ein grösserer Delay (z.B. 10ms)
eingehalten, so geht keines verloren. (Ein Mp3-Datenstrom lässt sich
z.B. fehlerfrei abspielen.)
Durch die vielen Runt-Errors dachte ich zuerst, der Controller würde
vielleicht manchmal das Preamble eines Frames verpassen, aber dieser
Fehler müsste dann ja auch bei grösseren Delays zwischen den Frames
auftreten.
Daher meine Frage, hatte jemand schon mal ein ähnliches Problem oder
eine Idee, wo ich noch suchen könnte?
Und wenn jemand ein Projekt mit dem CS8900A am Laufen hat, könnte er
mir vielleicht mal die Initialisierungsroutine schicken? Ich könnte
mir vielleicht auch vorstellen, dass es an einer falschen
Initialisierung liegt. Obwohl der Controller ansonsten einwandfrei
funktioniert.
Vielen Dank,
Michael