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.
Hi Thomas! Erst einmal Danke für die Antwort. Leider funktioniert der Link nicht. Markus
>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
Mensch wenn man sich das so durchliest wird man richtig heiß mal selbst ein Ethernetprojekt zu machen ;)
@ 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
Du könntest hier vielleicht ein paar Ideen übernehmen: http://www.cesko.host.sk/IgorPlugUDP/IgorPlug-UDP%20(AVR)_eng.htm Markus K.
@ Markus! Danke für den Link, aber leider habe ich dafür nicht die entsprechende Berechtigung. Kannst du sie mir nennen? THX 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
@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 :)
>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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.