Forum: Mikrocontroller und Digitale Elektronik Daten über CS8900A versenden


von Markus (Gast)


Lesenswert?

Hallo an Alle!

Ich acker mich durch das Datasheet des CS8900A durch. Da Englisch nicht
meine Stärke ist, ist das alles recht mühselig. Daher möchte ich hier im
Forum ein paar Fragen stellen.

Die Standardeinstellung ist der I/O-Mode. Eine MAC-Adresse füge ich
selber zu. Wie verhält es sich mit den 8-Bit-I/I-Mode und der
IP-Adresse? Wo muß ich diese angeben?

Es gibt verschieden Längen von Frames. Auch variable Framelängen. Heißt
das, daß ich am Ende eines variablen Frames ein Bit setzen muß, damit
die MAC-Engine das Packet verschickt?

Soviel zunächst. Es fallen mir vieleicht noch mehr Fragen ein.

Danke im Voaraus und Gruß Markus

von Markus (Gast)


Lesenswert?

Hallo!

Hat niemand Ahnung vom CS8900A?

Ein paar Klarkeiten habe ich beseitigt. Leider stehen aber noch weitere
an.

An erster Stelle ist die Frage nach der Quell- und Ziel-IP-Adresse und
den beiden Ports auf denen gesendet und empfangen wird.

Im Datenblatt finde ich nix darüber.

Müssen nicht irgendie an der MAC-Engine die Adressen und Ports gegeben
werden. Wie soll denn sonst der CS8900A wissen, wohin die Packete
gehen? Verwirr;-(((

Danke Markus

von Thomas (Gast)


Lesenswert?

So richtig kenne ich mich zwar damit auch nicht aus aber vielleicht
solltest Du Dir mal die Grudlagen TCP/IP genau ansehen. Es gibt auch
ein paar gute pdf's wenn Du Google bemühst.
Ich denke mal die IP Adressen werden Software seitig programmiert.
Vielleicht schaust Du Dir auch mal die Website von Ulrich Radig an
(www.ulrich-radig.de ?). Dort gibt es, soweit ich weiß, Codebeispiele.

von Jochen Pernsteiner (Gast)


Lesenswert?

>Wie verhält es sich mit den 8-Bit-I/I-Mode und der
>IP-Adresse? Wo muß ich diese angeben?

IP-Adresse oder IO-Adresse?

>Es gibt verschieden Längen von Frames. Auch variable Framelängen.
>Heißt das, daß ich am Ende eines variablen Frames ein Bit setzen muß,
>damit die MAC-Engine das Packet verschickt?

Nein, du musst vorher die Länge in das "Transmit Length"-Register
schreiben.

Siehe auch Datenblatt, Seite 104. Dort ist der Ablauf beim Senden eines
Rahmens dargestellt.

von Markus (Gast)


Lesenswert?

Hi Thomas!

Erst einmal Danke für die Antwort. Leider funktioniert der Link nicht.

Markus

von Jochen Pernsteiner (Gast)


Lesenswert?

>An erster Stelle ist die Frage nach der Quell- und Ziel-IP-Adresse und
>den beiden Ports auf denen gesendet und empfangen wird.

>Im Datenblatt finde ich nix darüber.

Selbstverständlich findest Du dort nichts darüber, denn das hat nichts
mit Ethernet zu tun.
Sicher, man kann auch TCP/IP-Pakete über Ethernet schicken, genau so
wie
tausend andere Pakete.

Was Du brauchst ist dieses Buch hier:

"TCP/IP Illustrated, Volume 1" von W. Richard Stevens.

von Markus (Gast)


Lesenswert?

Hallo Jochen!

Mit das mit der variablen Framelängen habe ich gestern verstanden. Wie
Thomas sagt (IP-Adressen und Ports) verstehe ich so, daß ich sie
softwaremäßig eingeben muß. Aber wohin. Ich denke auch, die MAC-Engine
ließt dieses Adtessen und Ports automatisch ein.

Gruß Markus

von Thomas (Gast)


Lesenswert?

sorry:
http://www.ulrichradig.de/index.html

deshalb auch das fragezeichen :-)

von Markus (Gast)


Lesenswert?

Hallo Namenskollege,

du hast hier noch ein kleines Verständnisproblem, weswegen o.g. Buch
sicher eine gute Wahl wäre (wenn es nicht in englisch geschrieben
wäre).

Mal eine vereinfachte Darstellung für den Anfang, den Rest darfst Du
Dir selber ergoogeln:

Das ganze Netzwerkgeraffel ist in verschiedene Schichten aufgeteilt.
Dieser CS9800A macht Ethernet, nichts anderes. In diese Ethernetpakete
kann man nun IP-Pakete reinstecken. In die IP-Pakete steckt man dann
z.B. TCP-Pakete und in diese wiederrum z.B. HTTP.
http://de.wikipedia.org/wiki/OSI-Modell

Da der Chip nur Ethernet macht, mußt Du alle darüberliegenden Schichten
selber programmieren. Du baust also z.B. ein HTTP-TCP/IP-Paket zusammen
und übergibst das dem Chip. Für den sind das nur Daten, die er zusammen
mit den MAC-Adressen zu einem Ethernetpaket zusammenbaut.

Ob der Chip ein Paket annimmt entscheidet er nicht anhand der
IP-Adresse (davon versteht er ja nichts), sondern anhand der
MAC-Adresse. Damit z.B. Dein PC nun weiß, welche MAC-Adresse zu welcher
IP-Adresse gehört, mußt Du auch noch ARP implementieren. Und wenn Du ihn
anpingen können willst, dann brauchst Du auch noch Ping.

Da hast Du noch ein ordentliches Stück arbeit vor Dir.

Markus

von T.Stütz (Gast)


Lesenswert?

Schau mal bei www.easyweb.de rein, der Source ist downloadbar
verwendet wird der gleiche Baustein (ich glaub sogar auch einen AVR).

Der "Ethernet"-Controller selektiert nur nach Ziel-MAC-Adresse (die
du ihm ja vorgibst).
Ausnahme ist Broadcast (FF-FF-FF-FF-FF-FF) der wird IMMER empfangen.

Das ganze Netzwerk-gelumpe gibts zum nachlesen auch als RFC's
(Request for comments)

Gruss

von Markus (Gast)


Lesenswert?

Ich möchte das nit eigenen Worten wiedergeben.

Der CS8900A sendet nur IP-Packete. Was darinstaht interessiert ihn
nicht. In den Speicher, den ich in TxLength reserviere, stehen nicht
nur meine Nutzdaten, sondern das gesamte UDP-Packet einschließlich
Portadressen ind IP-Adressen usw.

Mein ATmega32 muß also alle diese Daten via PacketPage Pointer im 8-Bit
Modus an die Adressen 0x000C und 0x000D senden. Ist das letzte Byte
eingetroffen, so wird das UDP-Packet automatisch in einen IP-Packet
versendet.

Kurze Frage zur MAC-Adresse: Wie erfährt der CS8900A die Zieladresse?

Danke Markus

von Markus (Gast)


Lesenswert?

Der Chip sendet nur Ethernet-Pakete, keine IP-Pakete. IP ist bereits
eine Stufe höher.

Die MAC-Adresse erfährt er vom Zielrechner per ARP. Er schickt ein
spezielles Paket an die Ethernet-Broadcast-Adresse (also an alle
Netzteilnehmer), in dem er fragt, wem die IP-Adresse gehört. Und dann
antwortet der Zielrechner darauf.

Für den Anfang kannst Du Dir ja mal einen Paketsniffer wie z.B.
Ethereal besorgen (ist kostenlos) und damit Deinem Netz bei der Arbeit
zuschauen.

Markus

von Netbandit (Gast)


Lesenswert?

Mensch wenn man sich das so durchliest wird man richtig heiß mal selbst
ein Ethernetprojekt zu machen ;)

von Markus (Gast)


Lesenswert?

@ Netbandit!

Dann darfst du auch in die Tiefen der Netzwerkprotokolle vorstoßen. Ich
habe mich immer gewundert, wieso in der FH-Bücherei so dicke Bücher über
TCP/IP stehen. Nun erahne ich warum das so ist;-)

In den letzten Tagen ist mir einiges bewußt geworden. Den Code von
easytoweb habe ich auch gefunden. Aber ihn zu verstehen ist nicht
einfach für mich.

Kennt jemand eine einfachere Möglichkeit UDP-Packete zu verschicken?

Ich denke daran:

CS8900A konfigurieren in einer Funktion. Speicher definieren, jedesmal
beor ein Packet versendet wird. Broadcastadresse und Portnr. 4000
eingeben. 50 bis 80 Bytes vom ATmega32 zum CS8900A senden und "rubbel
die Katz" ist das Packet verschickt.

Danke für jede Hilfe im Voraus!

Gruß Markus

von Markus (Gast)


Lesenswert?

Du könntest hier vielleicht ein paar Ideen übernehmen:
http://www.cesko.host.sk/IgorPlugUDP/IgorPlug-UDP%20(AVR)_eng.htm

Markus K.

von Markus (Gast)


Lesenswert?

@ Markus!

Danke für den Link, aber leider habe ich dafür nicht die entsprechende
Berechtigung. Kannst du sie mir nennen?

THX Markus

von Markus (Gast)


Lesenswert?

@ Markus!

Ich nochmal. Über Downloads klappt das. Leider kann mein WINRAR das
File nicht extrahieren. Ich versuche das mal mir WINZIP. Bis später.

Gruß Markus

von Netbandit (Gast)


Lesenswert?

@Markus:

das macht ja den Reiz an der ganzen sache aus, wenn man sich stück für
stück durch die Schichten frisst.. und irgendwann geht es dann und das
ist großartig!
Und wenn dann irgendwelche Leute vob TCP/IP oder FTP oder HTTP oder
sonnst was reden, dann weiß die Protokolle im Detail bedeuten und was
im Hintergrund abgeht und hat nicht irgendwelche Abkürzungen im Kopf
:)

Viel Erfolg noch!

von Markus (Gast)


Lesenswert?

@ Netbandit!

Da hast du recht. Geht man so vor, dann kann man eine Menge lernen und
das bleibt dann auch. Aber ich möchte gar nicht so tief in die Materie
einsteigen. Nicht der Weg ist das Ziel, sondern das Ergebnis, welches
ich meinem Prof. vorlege. Da fehlt mir leider die Zeit, so daß ich auf
eine fertige Lösung angewiesen bin.

So, nun werde ich weiter googlen.

Gruß Markus

von T.Stütz (Gast)


Lesenswert?

@Markus (ohne Email)
Tu dir das bitte nicht an, du lernst dabei sehr viel.
Wenn dein Prof. nur das Ergebnis will, dann erschlag ihn (sorry).

Zum EasyToWeb-Code:

Stimmt er ist nicht gerade gut zu lesen, aber er tut größtenteils das
was er soll.

in Project.h kannst du bestimmte Dinge per #define zu/abschalten

Die einzelnen "Schichten" (ISO/OSI) sind jeweils in unterschiedliche
Sourcen verpackt.

Bsp: http_server.c baut auf TCP.c auf, tcp.c baut seinerseits auf ip.c
auf, ip.c baut auf buffer.c (eine art cache). buffer baut auf
ethernet.c auf (jetzt wirds interressant) ethernet.c baut auf cs8900.c
auf.

Gruss

von Markus (Gast)


Lesenswert?

Hallo T.Stütz!

Wenn ich nun den CS8900A honfiguriere, was ich wohl hinbekomme und dann
das IP-Packet incl. Header aufbaue und in den Speicher schiebe und
anschließend das gleiche mit UDP mache (also geschachtelt) sollte es
dann nach meinen Vorstellunegn klappen.

Der Einfachheit halber würde ich im UDP-Header auf eine Prüfsumme
verzichten (und dan auch auf den Pseudoheader?) Als IP-Adresse verwende
ich dann eine Broadcast. Somit kann ist der Empfänger nur noch über den
Port definiert. Mit dem letzten Byte des IP-Rahmen (glaube ich, weil
hab da ein CRC im Hinterkopf oder war das beim Ethernet-Frame) wird das
Ethernet-Packet geschürt und verschickt.

Außerdem habe ich gehört, daß die MAC-Adresse ebenfalls weggelassen
werden kann?

Anders herum gesprochen gesagt: Netzwerk auf absolut niedrigstem
Niveau!

Kann das so im groben laufen?

Bei der Gelegenheit: Welche Literatur (bevorzugt in deutsch, da
englischschach;-)) könnt ihr empfehlen?

Danke im Voraus Markus

von Netbandit (Gast)


Lesenswert?

@Markus

ich habe mal was interessantes auf der Homepage von Uli
(http://www.ulrichradig.de/) gefunden und zwar:

http://www.ulrichradig.de/site/infos/pdf/Netzwerk.pdf

und

http://www.ulrichradig.de/site/infos/pdf/ipadress_30312.pdf

vielleicht hast du das ja selbst schon gefunden oder so, aber
vielleicht hilft es dir auch weiter :)

von T.Stütz (Gast)


Lesenswert?

>Wenn ich nun den CS8900A honfiguriere, was ich wohl hinbekomme und
>dann das IP-Packet incl. Header aufbaue und in den Speicher schiebe
>und anschließend das gleiche mit UDP mache (also geschachtelt) >sollte
>es dann nach meinen Vorstellunegn klappen.

Ja

>Der Einfachheit halber würde ich im UDP-Header auf eine Prüfsumme
>verzichten

Setz die Checksumme auf 0000h dann wird selbige nicht geprüft

>(und dan auch auf den Pseudoheader?)

leider nicht möglich

>Als IP-Adresse verwende ich dann eine Broadcast.

Quell-IP nicht möglich da sonst kein Empfang
Ziel-IP, wird vom BS ausgefiltert, du kommst nicht ran.

>Somit kann ist der Empfänger nur noch über den
>Port definiert.

Nein,Port+IP-Adresse (zumindest Ziel) ist nötig

>Mit dem letzten Byte des IP-Rahmen (glaube ich, weil
>hab da ein CRC im Hinterkopf oder war das beim Ethernet-Frame) wird
>das Ethernet-Packet geschürt und verschickt.

kenne den CS8900 nicht so gut -> Datenblatt reinschauen

>Außerdem habe ich gehört, daß die MAC-Adresse ebenfalls weggelassen
>werden kann?

Ja, aber nicht sinnvoll

>Anders herum gesprochen gesagt: Netzwerk auf absolut niedrigstem
>Niveau!
>Kann das so im groben laufen?
Ja

>Bei der Gelegenheit: Welche Literatur (bevorzugt in deutsch, da
>englischschach;-)) könnt ihr empfehlen?

Du kommst ohne Englisch nicht weiter.
Als Überblick und Kurzreferenz habe ich
Tachenbuch Rechnernetze und Internet.Erich Stein, Fachbuchverlag
Leipzig,ISBN3-446-21542-5. Ist in Deutsch geschrieben

Auf dieser Seite findest du die Dokumentation zu jeder einzelnen
Schicht: www.rfc-editor.org/rfc.html

Minimale Konfiguration wäre
ARP-Request / Reply (RFC826)
ICMP Echo request/reply wegen Ping, (RFC792)
IPv4 (RFC791)
UDP (RFC768)

Gruss

von Markus (Gast)


Lesenswert?

@ T.Stütz!

Du machst mir Angst, wenn du sagst, dap ich nicht aus ein Pseudoheader
verzichten kann. Wie mache ich das denn dann? Prüfsumme 0000 und dann
weiter?

Das Buch, welches du empfohlen hast habe ich mir mal angeschaut und
bestellt.

Danke Markus

von T.Stütz (Gast)


Lesenswert?

Der UDP-Header besteht aus
-SourcePort (2Byte)
-DestinationPort (2Byte)
-Länge der Daten (2Byte)
-Checksumme (2Byte)

danach folgen die Daten. Wenn du also die Checksumme auf 0000h setzt
brauchst du nichts berechnen. Wenn du die Checksumme berechnen willst,
mußt du den UDP-Header, die Daten und einen "imaginaeren"
Pseudo-Header zusammenrechnen.
=> UDP-Header und Pseudo-Header sind nicht gleich!

Um die Checksummenberechnung im IP-Header kommst du aber leider nicht
herum. Die Berechnung ist übrigens für die UDP-Checksumme und die
IP-Checksumme (mal abgesehen von den Daten) genau gleich.

Kopf hoch, das sieht komplizierter aus als es ist.

Ach,ja: besorg dir Ethereal und WinPCap von www.ethereal.com
das ist ein Tool um den Netzwerkverkehr aufzuzeichnen
damit ist dann die Fehlersuche einfacher.

Gruss

von Markus (Gast)


Lesenswert?

Hallo T.Stütz!

Vieleicht Thomas?

Nungut Erteinaml Megadanke. Damit kann ich wohl was anfangen;-)

Fur morgen hast du mich damit auf jeden Fall beschäftigt.

Sobald ich weiter bin, melde ich mich wieder.

Danke Markus

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.