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
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
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.
>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.
>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.
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
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
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
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
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
@ 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
@ 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
@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!
@ 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
@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
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
>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
@ 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
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
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