Forum: Mikrocontroller und Digitale Elektronik Erstinbetriebnahme Ethernet


von Progger (Gast)


Lesenswert?

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.

von Cyblord -. (cyblord)


Lesenswert?

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

von Progger (Gast)


Lesenswert?

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?

von Cyblord -. (cyblord)


Lesenswert?

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

von Wusel D. (stefanfrings_de)


Lesenswert?

Schau Dir mal uIP an, das ist ein minimaler Stack mit IP, TCP und UDP, 
der MAC Pakete generiert. ARP ist auch drin.

von Axel L. (axel_5)


Lesenswert?

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

von Name (Gast)


Lesenswert?

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
Noch kein Account? Hier anmelden.