Probleme mit dem Arduino Ethernet Shield


Ich wollte heute mal eben zwei Arduinos mit Ethernet Shield, genauergesagt zwei Nachbauten, die das Ethernet Shield direkt mit drauf haben im Formfaktor eines Arduino Unos, miteinander verbinden. Via Multicast soll ein Boolean getoggled werden, beide Arduinos sollen den Wert auf beiden togglen können. Die Beiden konnten aber nur Empfangen. Der DHCP Client funktioniert auch nicht, genausowenig wie das versenden von Multicast Paketen.

Die Lösung für das Problem hat mich mehrere Stunden debugging gekostet, ich habe 4 verschiedene Ethernet Librarys ausprobiert, bis ich merkte, dass das Beispiel, was bei der Library dabei war, tadellos funktioniert. Ich konnte das Problem dann schließlich auf die MAC Adresse beschränken und hab ein wenig nachgelesen.

Ich habe aus Faulheit einen MAC Adressen Generator benutzt (wobei ich zugegebenermaßen den gleichen Fehler gemacht hätte, wenn ich die Adresse manuell vergeben hätte). Bei MAC Adressen gibt es scheinbar zwei Dinge zu beachten: Die ersten beiden Bits.

Das erste Bit gibt an, ob es sich um eine Gruppen Adresse handelt oder eine Individuelle. Selbstverständlich hat der Generator bei mir zwei Gruppenadressen ausgespuckt. Eine Gruppenadresse als Absender geht nicht, also bekam der Arduino keine Adresse per DHCP und konnte nichts senden.

Das zweite Bit ist nicht ganz so kritisch, sollte aber bei zufälligen MAC Adressen auf 1 stehen, dies impliziert, dass es sich nicht um eine von der IANA vergebene Prefix handelt, sondern nur “Local Einzigartig” ist.

An der stelle: Danke Wikipedia

Also wenn der Arduino mit selbstgenerierter MAC Adresse

  • Keine DHCP Adresse bekommt
  • Keine Pakete versenden kann
  • Keine TCP / UDP Pakete empfängt
  • Aber einer UDP Multicast Gruppe joinen und UDP Multicast Pakete empfangen kann
  • Selbst mit manueller IP vergabe nicht pingt

Einfach mal genauer die verwendete MAC Adresse begutachten.

x2:xx:xx:xx:xx:xx
x6:xx:xx:xx:xx:xx
xA:xx:xx:xx:xx:xx
xE:xx:xx:xx:xx:xx

Am Besten ausschließlich MAC Adressen verwenden die diesem Pattern entsprechen.