Forum: Mikrocontroller und Digitale Elektronik Kollisionen


von Markus (Gast)


Lesenswert?

Hallo an alle!

Mein RS232-LAN-Modul ist mittlerweile in der Lage Daten so zu
versenden, wie vorgesehen. Leider funzt das erst mit einer Derekten
Verbindung (gekreuztes Patchkabel vom Modul zum PC). Ist ein Hub- oder
höherwertihe Netzwerktechnik dazwischen geschaltet, so werden keine
Daten empfangen. Stattdessen zeigt mir der Hub total viele Kollisionen
an.

Dazu muß ich segen, daß ich den CS8900a im 8-Bit-I/O-Modus betreibe und
nur warte, bis er ein Rdy4Tx-Flag gesetzt hat.

Das Signal, welches den Ethernetkontroller verläßt wurde mittels eines
Oscar's mit ein anderes Signal verglichen und schaut gut aus.

Wer kann mir weiterhelfe?

Megadanke im Voraus!!

Gruß Markus

von Markus (Gast)


Lesenswert?

Hat denn hier keiner Ahnung von Ethernet? Wo holt ihr euch denn die
benötigten Infos her?

von Markus (Gast)


Lesenswert?

Hallo!

Ich habe ja die Hoffnung noch nicht ganz aufgegeben;-))

Wenn ich das Datenblatt von Cirrus richtig verstanden habe, so sorgt
die MAC-Engine für die Kollosionserkennung. Dementsprechend muß ich
nicht tätig werden.

Aber dennoch wird kein Trafic im Netz verzeichnet!

Vieleicht nur ein kleiner Hinweis?

Danke Markus

von Ratber (Gast)


Lesenswert?

>Ist ein Hub- oder
>höherwertihe Netzwerktechnik dazwischen geschaltet, so werden keine
>Daten empfangen. Stattdessen zeigt mir der Hub total viele
Kollisionen
>an.

Kannst du bitte mal genauere Angaben zum Protokoll geben ?

Hängst du nun an einem Switch oder an einem Hub ?
Welche Linkgeschwindigkeit liegt an ?

Wenn du mit 100Mbit über einen Hub gehst dann bitte nicht Vollduplex
weil dort die Kollisionsabfrage abgeschaltet ist.
Halbduplex ist da richtig.
Oder du nimmst einen Switch.


andere Möglichkeit:

Du nutzt 10Mbit und der Hub kann nicht auf 100Mbit vermitteln.
auch hier ist dann ein Hub oder Switch mit Bridge erforderlich.


aber gibh erstmal Infos über die Hardware.
Ohne ist eine Hilfe nicht so einfach zu bewerkstelligen

von Markus (Gast)


Lesenswert?

Hi Ratber!

Super daß Du dich meldest!!! Weil, leider weiß ich nicht ich nicht mehr
weiter.

Also: Ich sende mit 10 Mbit und der Hub hat auch 10 Mbit. An einen 100
Mbit Router habe ich das Teil auch schon angeschlossen. Da erhalte ich
auch keine Daten auf andere Rechner.

Ich schicke ausschließlich UPD-Daten, d.h. Mein Board sendet
ununterbrochen Daten ins Netz.

Die Daten werden von einer seriellen Schnittstelle in den Atmega32 mit
der USART eingelesen. Der Atmega initialisiert den Ethernetkontroller
und resettet ihn.

Im Anschluß wird jedem von der USART empfangenen Datensatz erst ein
UDP-Header (ohne Checksumme) und dann ein IP-Header vorangestellt.
Anschließend folgt der MAC-Header. Somit schaut dann das Packet so
aus:
     MAC-Header| IP-Header| UDP-Header| Datensatz

Die meisten Daten in den Headern sind statisch. Es sollen ja nur Daten
als Broadcast (MAC: FF FF FF FF FF FF, IP: FF FF FF FF) an einen
beliebigen Port(z.B.: 4000) gesendet werden.

Wie schon gesagt: In der direkten Verbindung klapt das auch. Da kann
ich mir bestens mit Ethereal die Frames anzeigen lassen. Da ist alles
super.

Gruß Markus

von Ratber (Gast)


Lesenswert?

Hmmm.


Was passiert wenn nur zb. ein Hub dazwischenhängt ?
(Also Rechner,Hub,AVR.Keine weiteren Geräte)

Dort auch Sendepause oder gehts dann ?

von Markus (Gast)


Lesenswert?

Hi Ratber!

Auch bei der Konfiguration AVR-Board, Hub, PC und nur ein gesendeten
Frame wird eine Kollision erkannt. Selbst wenn nur AVR-Board und Hub
angeschlossen sind, zeigt der Hub Kollisionen an :-(((

Ist ein Hub - im allgemeinen - eigendlich so intelligent, daß er
Kollisionen erkennt und die Stopsignale versendet, oder reagiert bringt
er nur erkannte Stopsignale zur Anzeige?

Angenommen der Hub verhält sich passiv, dann könnten die Kollisionen
nach der Konfiguration (AVR-Board, Hub) nur vom AVR-Board erkannt
worden sein. Da in direkter Verbindung die Daten aber empfangen werden
(Die LED der Netzwerkkarte ist dann allerdings gelb statt grün) könnte
dies bedeuten, daß RXD Hardwareseitig nicht sauber ist. Das die LinkLED
vom PC gelb ist, mag daran liegen, daß der PC zwar ein Netzwerk erkennt,
abder mit diesem keinen Kontakt via ARP aufnehmen kann, da der AVR
wirklich nur Daten sendet und keine Protokolle zuläßt.

Sind nun alle Klarheiten beseitigt;-)

Viele Grüße Markus

von Ratber (Gast)


Lesenswert?

Nicht ganz.


Erstens ist ein Hub salopp gesagt nix anderes als ein Strohdummer
Verteiler äller Daten.
Dh. jedes Datenpaket steht an allen angeschlossenen Geräten an was dann
auch die Bandbreite auslastet.

Eine analogie wäre alle Telefongespräche in einer riesigen Konferenz zu
schalten wo jeder jeden höhrt.
Quatschen alle gleichzeitig drauflos dann gibts eben
"Datenkollisionen" und keiner versteht mehr was.
Ergo muß man eine Sprechpause abwarten um seinen nächsten Satz
abzusetzen.


Ein Switch dagegen verbindet nur die beiden beteiligten
Gesprächspartner miteinander.(Kein anderer höhrt mit)
Dabei wird jede Leitung nur mit dem Datenstrom belastet des auch hier
hingehöhrt.

Die Analogie hierzu ist das Telefonieren wie wir es kennen.
Eine Kollisionsabfrage ist hier überflüssig.

Natürlich gilt auch zwischen zwei Geräten das man seine Pakete zu
zugelassenen Zeiten loschickt sonst schlägt die Kollisionserkennung des
Hubs Alarm.

Zimindest einies deiner Geräte (AVR oder PC fürht kein korrektes
Protokoll aus.

Spiel mal mit Halb und Vollduplex rum
Am PC gehts auf jeden Fall.Was mit deinem AVR-Teil ist weiß ich nicht
weil ich die Konstruktion nicht kenne.

Was die Kollision als solches betrifft so ist es ja so das kein
Ethernetgerät "nur reine Daten" schickt.
Ein Protokoll ist immer dabei selbst auf 255 imn Broadcast.



Ich vermute das der Ethernetteil am AVR nicht ganz Konform geht.

von Markus (Gast)


Lesenswert?

Hallo Ratber!

Also, der AVR macht folgendes und wirklich nur das:

  - CS8900a initialisieren
  - GPS-Daten mit UDP-Header versehen (ohne Checksumme)
  - UDP-Frame mit IP-Header versehen
  - IP-Frame mit MAC-Header versehen
  - CS8900a konfigurieren
  - Daten an den CrystalLan senden

Dementsprechend reagiert der AVR auf kein höheres Protokoll. Das
einzige ist die Kollisionserkennung. Die aber geschieht in der
MAC-Engine des Ethernetkontrollers.

>Zimindest einies deiner Geräte (AVR oder PC fürht kein korrektes
>Protokoll aus.

Wenn dann der AVR!
Was muß noch berücksichtigt werden, wenn ich nur stur UDP-Packete als
Broadcast versenden möchte?

Gestern habe ich meine Hardware nocheinmal kontrolliert. Aber es mir
kein Fehler aufgefallen.

Fast vermute ich, daß es ein SW-Fehler ist. Mißachtung von
Protokollregeln.

Hast du eine mögliche Antwort?

Danke und Gruß Markus

Wenn ich

von ka-long (Gast)


Lesenswert?

Hi,

Doofe Frage:

MAC Addresse FF FF FF FF FF FF FF ?

Ich dachte FF FF FF.... und 00 00 00.... sind verboten ?!?

Oder ist das tatsächlich die Broadcast Addresse im MAX Heaser ? Wie
soll man dann den Sender Identifizieren ?!?

Gruß ka-long

von Markus (Gast)


Lesenswert?

Hallo ka-long!

Es sollen tatsächlich alle Rechner angesprochen werden. Nur der, der
ein UDP-Programm mit dem richtigen Port gestartet hat, empfängt die
Packete. Das ist zunächst durchaus so gewollt.

Gruß Markus

von hans müller (Gast)


Lesenswert?

da steht
... initialisieren ...
GPS daten in udp header senden
...

also alle daten in ein(!) paket packen und dann das gesamte paket
senden.
normalerweise packt doch der ethernet-controller das level 2-paket
zusammen, also müsste das dann evtl. nicht mehr an den controller
gesendet werden (ins datenblatt schauen)

also ethernet senden läuft im prinzip so ab:
-an der leitung horchen (gab-Zeit)
-wenn leitung frei, dann senden
-wenn eine kollision auftritt, sendung abbrechen und die backoff-zeit
warten, danach kann erneut versucht werden

ich nehme aber an, dass du twisted pair kabel verwendest, da kann es
eigentlich keine kollisionen geben. (Evtl. ein Cross-Over-Kabel
erwischt oder im Hub/Switch die "Uplink"-Funktion aktiviert?)

von Ratber (Gast)


Lesenswert?

@Markus


>Wenn dann der AVR!

Ja,das vermute ich auch.

Wie es Läuft hat Hans ja schon gesagt.

Ich gehe aber mal davon aus das du beim Betrieb mit Hub oder Switch
auch ein normales Patchkabel nimmst oder ds Crosoverkabel über den
Uplink betreibst (Doppelte drehung damits stimmt.)

Mehr fällt mir aber im Momment auch nicht ein

von hans müller (Gast)


Lesenswert?

schau mal in den rfc zu ethernet und den ganzen protokollen nach,
vielleicht stimmt die checksumme oder ein paket nicht und das falsche
paket wird als kollision angezeigt.

was gibts du als quell-adresse an?
da kannst du die FFs nicht verwenden...

rfc791 -> ip
rfc768 -> udp

Was meinst du mit gps daten ... ohne checksum ?
bei udp gibt es eine checksum (4. wort im header)

von ka-long (Gast)


Lesenswert?

Hi,

Oh ja, das hatte ich vergessen....

FF .. oder 00 .. sind als Quelle verboten. das hattte ich vergessen, in
meinem Beitrag oben zu erwähnen.....

Also was hast Du als QuellenMac und IPO und als Ziel MAC und IP ?

Gruß ka-long

von Markus (Gast)


Lesenswert?

Hallo hans müller!

Als IP-Quell-Adresse suche ich mir eine schöne aus. Als
MAC-Quell-Adresse verwende ich die einer ausgemusterten Netzwerkkarte.

Die Checksumme im UDP-Header habe ich mit 0x0000 aufgefüllt, damit wird
erkannt, daß ich auf eine Prüfsummenberechnung verzichte. So auch die
Aussage von Ethereal.

Kannst du mir zufällig sagen, wie hoch der Pegel vom Manchaster-Code
sein muß? Ich nehme an, das er von Spitz zu Spitze 7,5V betragen muß!
Bei mir messe ich aber nur 5V!

Gruß Markus

von Markus (Gast)


Lesenswert?

@ ka-long!

Quelle:
MAC: MAC-Adresse ausrangierter Netzwerkkarte
IP. 192.168.0.179
Port: 3000

Ziel:
MAC: FF FF FF FF FF FF
IP: FF FF FF FF
Port: 4000

Gruß Markus

von chriss chd (Gast)


Lesenswert?

hallo!
vielleicht liegt es doch an der hardware:
eine kollision auf dem netzwerk wird durch gleichanteilmessung
ermittel. ich glaub dass wenn mehr als 40mA gleichstrom festgestellt
wird, dann wird eine kollision gemeldet.
hast du schon mal probiert:
1.) nur avr und hub (hub eingeschaltet)
2.) nur avr und hub (hub ausgeschaltet)
3.) nur avr und statt hub einen endwiderstand rein lt. def von lan

der hub ist ja ein dummes ding, d.h. wenn du nur avr und hub hast und
es wird eine kollision angezeigt, dann muss etwas in der ahrdware
falsch sein. das problem ist natürlich erkennt dein controller eine
kollision sendet er ein jam signal und versucht nach einer zufälligen
zeit wieder zu senden. (vielleicht hast du reflexionen auf der leitung?
verwendest du patch kabeln?)

von Markus (Gast)


Lesenswert?

Kurz nocheinmal zum Ethernetkontroller!

Beim CS8900a muß alles zwischen den SFD und CRC vom Host bereitgestellt
werden, MAC-Header inclusive. Der CS8900a hat nur ein Register für die
eigene MAC-Adresse und das nur für Receive. Die Idee mit dem gekreuzten
Kabel am Uplink hatte ich auch schon. Daran lag es aber auch nicht!

Gestern hatte ich den Ethernetübertrager noch getauscht und nun habe
ich am TXD vom CrystalLan noch ein schönen Nadelimpuls mit 2,5V
anliegen.

Öfters mal was neues;-/

Gruß Markus

von Martin (Gast)


Lesenswert?

Hallo,

das frontend für den CS8900 hast du selbst gemacht oder eine fertige
ISA Netzwerkkarte genommen?


Martin

von Markus (Gast)


Lesenswert?

@ Chris!

zu 1. Hub zeigt Kollision an.
zu 2. ??? Das kann doch gar nicht funktionieren. Ein Hub refreshed doch
das Signal.

zu 3: muß ich versuchen

Natürlich verwende ich ein Patchkabel. Ein Jam-Signal konnte ich nicht
messen.

Gruß Markus

von Markus (Gast)


Lesenswert?

@ Martin!

Das Frontend habe ich selber gemacht. Die Beschaltung habe ich aus dem
Datenblatt von Cyrrus.

Gruß Markus

von chriss chd (Gast)


Lesenswert?

hallo!
sorry ich hab das falsch verstanden, ich dachte du bekommst vom avr ein
signal dass du kollisionen hast, daher 2.) aber vielleicht kannst du den
controller abfragen nach kollisionen? den dann wäre der versuch 2
berechtigt, somit könnte man feststellen ob es ein problem mit dc ist.

was mir aber noch komisch erscheint, du hast follkommend recht, der hub
macht eigentlich nichts anderes alls das signal zu refreshen bzw. er
verbindet halt alle station untereinander und repeatet. ("collision in
a box") allso du hast nur eine collisiondomain! wenn du aber nur den
avr und den hub in verwendung hast, dann ist es sehr komisch das du
kollisionen angezeigt bekommst. wer soll den eine kollision
verursachen? der hub bestimmt nicht, der darf ja nichts senden, da auf
den andern port schweigen herscht, somit analysiert er nur deinen port,
also kommt etweder misst auf diesem port daher (was ja nicht sein kann
wenn der pc avr link funktioniert) oder es gibt einen hardwaredefekt.
vielleicht ist die hardware bei nic's etwas unterschiedlicher als bei
hub's/switch, oder deine nic ist nicht so empfindlich wie die anderen
geräte.

von hans müller (Gast)


Lesenswert?

hast du den oszi immer dran hängen? bzw. wo hast du den hängen?
ich könnte mir vorstellen, dass die 50pF der Kabel schon ausreichen um
das signal deutlich zu stören...´

der manchester-code sagt nur aus, wie ein signal behandelt werden muss
(umcodiert) nichts über pegel oder so etwas.

der hub zeigt kollisionen an? dann kann das nur eine bridge (oder
höher) sein...
dann kann es daran liegen dass die checksum doch berechnet werden
muss... pack mal ein statisches paket zusammen und verwende die
checksum
(vielleicht ist die firmware nicht ganz so toll implementiert und will
eine checksum)

von Markus (Gast)


Lesenswert?

@ Chris!
Eigendlich müßte das Netz doch DC-frei sein. Es sind doch Übertrager
zwischenEthernetkontroller und Netz geschaltet. Was die nic's (heißt
das Netzwerkkarte?) betrifft, so scheint mir, sind die Netzwerkkarten
immer tollerenter, da ich es bisher mit drei Karten versuchte und es
auch immer klappte.

@ Hans!
Das Oszi hängt nur manchmal dran.

Auf dem Gerät steht auf jedenfall Hub drauf?!

Hast du Code zur Berechnung der UDP-Prüfsumme? Ich weiß nähmlich nicht,
wie der Pseudoheader berücksichtigt wird.

Danke und Gruß Markus

von chriss chd (Gast)


Lesenswert?

hallo!
ja der m.-code ist auch dc frei und durch diesen "trick" wird so
festgestellt ob kollisionen auftetretten sind, denn die analyse wäre
sonst etwas kompliziert und komplex. (dsp wäre nötig mit schneller fft,
etc. denn man kann ja nicht ausschließen, dass drei senden -> muss man
alles berücksichtigen, daher ist meines wissens eine 40mA DC Strom
grenze eingeführt worden)

aber ich lass mich gerne korregieren dass muss nicht stimmen, du
könntest aber trotzdem mal messen!?

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.