Mein Kollege ist aus gefallen und man hat hat mir am Montag die Aufgabe aufs Auge gedrückt, einen MAC über MCU anzusprechen. MAC ist als Software da, PHY auf dem board (ich habe es noch nicht gesehen) und alles soll hw-mässig laufen. Mein Problem: Ich habe keinen Plan, wie ich da ran gehe. Was ich muss einem MAC an infos verpassen, dass er einen Ton abgibt? Gesendet werden sollen UDP-Pakete. Ich habe mir das angesehen und laut WIKI wird noch aus dem IPV4-Protokoll ein header vorgeschaltet.
Progger schrieb: > Mein Problem: Ich habe keinen Plan, wie ich da ran gehe. Was ich muss > einem MAC an infos verpassen, dass er einen Ton abgibt? Ein MAC möchte eine MAC-Adresse als Ziel und eine als Quelle. Und einen Datenblock. Den sendet er raus, an das Ziel. Hängt natürlich vom verwendeten MAC und seinen Schnittstellen ab, wie genau und was genau er das möchte. > Gesendet werden sollen UDP-Pakete. Ich habe mir das angesehen und laut > WIKI wird noch aus dem IPV4-Protokoll ein header vorgeschaltet. Der Datenblock besteht dann in diesem Fall aus einem IP4 Header (mit IP-Adresse für Ziel und Absender, und vielem mehr) und den Nutzdaten. Diese Nutzdaten bestehen aus dem UDP Header und den eigentlichen Nutzdaten. Jedes Protokoll hat ein "next header" Feld, welches eine Nummer enthält die angibt, von welchem Typ das nächste innere Paket ist. Den Kram musst du vorher zusammenbauen und dem MAC schicken. Du musst natürlich die MAC Adresse des Ziels wissen. Wenn du nur die IP Adresse hast, musst du MAC Adresse nachgucken, oder noch ARP implementieren. gruß cyblord
Also - eine MAC Adresse für mein Gerät habe ich (vergeben) - eine MAC Adresse für das Ziel hätte ich auch, denke ich Die IP-Adressen sehe ich hier noch nicht, woher ich die nehme und wie die relevant sind. Braucht man die, wenn der MAC an MAC schickt? Laut WIKI stecken die IP-Adressen (ziel und quelle) im IPV4 header, ferner das Datenpaket UDP und dessen Länge. Wie ich es interpretiere muss ich dem MAC das gesamte IPV4-Datenpaket zusammengebaut schicken?
Progger schrieb: > Also > > - eine MAC Adresse für mein Gerät habe ich (vergeben) > - eine MAC Adresse für das Ziel hätte ich auch, denke ich > > Die IP-Adressen sehe ich hier noch nicht, woher ich die nehme und wie > die relevant sind. Braucht man die, wenn der MAC an MAC schickt? Nein, aber die brauchst du wenn du UDP Pakete schicken willst. Weil der Empfänger, den interessiert MAC nicht, nichtmal IP. Der mach nen Socket auf und wartet auf ein UDP Paket von dir. Und das Socket ist an die lokale Netzwekkarte gebunden und die kann dein Paket nicht an das Programm zustellen wenn die IP Adresse nicht stimmt, auf die das Socket horcht. Und da UDP auf Schicht 4 (Transportschicht) liegt und IP auf Schicht 3 (Netzwerkschicht) und du nur MAC hast (Sicherungsschicht/2) musst du wohl oder übel den ganzen Quatsch implementieren. Du musst ja auch bedenken, was wenn du die Pakete über LAN Grenzen hinweg, via Router oder gar über Internet schicken wolltest. Dann erfolgt die gesamte Adressierung nur noch logisch über IP Adressen, dann bringt dir die physikalische Adressierung via MAC gar nichts. Wenn du jetzt nur Controller hättest, welche sich Nachrichten schicken wollen über Ethernet, dann reicht MAC aus. Wer ist denn der Empfänger der UDP Pakete? Aber du hast ja sowieso UDP als Vorgabe also ist das alles egal. > > Laut WIKI stecken die IP-Adressen (ziel und quelle) im IPV4 header, > ferner das Datenpaket UDP und dessen Länge. > > Wie ich es interpretiere muss ich dem MAC das gesamte IPV4-Datenpaket > zusammengebaut schicken? Ja genau richtig. Aber du hast Glück. UDP ist ja total simpel. TCP ist viel viel komplizierter. gruß cyblord
Schau Dir mal uIP an, das ist ein minimaler Stack mit IP, TCP und UDP, der MAC Pakete generiert. ARP ist auch drin.
Progger schrieb: > Also > > - eine MAC Adresse für mein Gerät habe ich (vergeben) > - eine MAC Adresse für das Ziel hätte ich auch, denke ich > > Die IP-Adressen sehe ich hier noch nicht, woher ich die nehme und wie > die relevant sind. Braucht man die, wenn der MAC an MAC schickt? > > Laut WIKI stecken die IP-Adressen (ziel und quelle) im IPV4 header, > ferner das Datenpaket UDP und dessen Länge. > > Wie ich es interpretiere muss ich dem MAC das gesamte IPV4-Datenpaket > zusammengebaut schicken? Genau. Dafür gibt es das ARP (Adress Resolution Protocol). Damit kannst Du erstmal rausfinden, welche MAC Addresse Dein Ziel hat. Also: Ziel ist eine IP Adresse, meinetwegen 192.1.1.0 Jetzt musst Du dazu die MAC Adresse rausfinden. Dazu sendest Du ein ARP Packet. Das geht an alle und da wird sinngemäss drum gebeten, dass sich der Knoten mit der IP Adresse 192.1.1.0 meldet. Der antwortet dann und in dem Paket steht dann die MAC adresse als Sendeadresse. Damit hast Du die IP Adresse und die dazugheörende MAC Adresse und kannst Dein UDP Paket zusamenbauen. Gruss Axel
Hallo, irgendwann willst du die Daten sicherlich aufs Kabel drücken. Ethernet nutzt dazu meist MII (Media Independent Interface) oder RMII (Reduced MII), um MAC und PHY zu verbinden. Welches von beiden benutzt wird und welche Pins dafür verwendet werden, musst du dem MAC auch mitteilen. Um die Pakete zu erzeugen, kannst du dir zwei fertige Stacks anschauen: uIP (ziemlich limitiert, aber um ein paar UDP-Pakete zu verschicken ausreichend) und lwIP (komplizierter, größer und mächtiger). Beide sind mikrocontrollertauglich und besser, als sich da was selbst zu stricken. Gruß
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.