Forum: Mikrocontroller und Digitale Elektronik Ethernet, LWIP, STM32F107 - no RX packets?


von Jan (Gast)


Lesenswert?

Hallo liebes Forum,
ich habe ein Board mit STM32F107 und PHY gebastelt und bin nun dabei die 
Implementierung des LWIP Stacks zu testen.
Über mein Laptop sende ich ein ping der kommt auch über 
Ethernet->PHY->RMII beim Controller an und über RMII wird ein ARP 
response gesendet. Dieses ARP Frame habe ich auf Bitebene (RMII) 
analysiert und es ist korrekt.
Mein Laptop empfängt nichts, der RX Packets Zähler bleibt bei 0 stehen 
und es kommt "Destination Host Unreachable". Die ARP Tabelle bleibt auch 
leer.
Speed ist 100MBit und AutoNeg ist bei beiden an.


Wie würdet ihr bei der Fehlersuche vorgehen? Was könnte die Ursache 
sein? Kann der Laptop falsch konfiguriert sein? Gibt es unter Linux 
Tools die mir beim debugging helfen (abseits von wireshark)?

von hp-freund (Gast)


Lesenswert?

1. wie lautet die IP und Subnet-Mask vom Board und vom Notebook?

von Jan (Gast)


Lesenswert?

Laptop
IP: 192.168.0.1
subnet mask: 255.255.255.0

STM32F107 Board
IP: 192.168.0.8
subnet mask: 255.255.255.0
gateway: 192.168.0.1

von hp-freund (Gast)


Lesenswert?

2. per DHCP oder von Hand vergeben?

von Jan (Gast)


Lesenswert?

Bei beiden Geräten kein DHCP.

von hp-freund (Gast)


Lesenswert?

3. sind die Beiden allein im Netzwerk oder könnte ein DHCP Server 
dazwischen funken?

4. wenn es nur die Beiden sind, hast Du mal die firewall ausgeschaltet?

von Matthias (Gast)


Lesenswert?

>Dieses ARP Frame habe ich auf Bitebene (RMII)
>analysiert und es ist korrekt.

- MAC-Adresse beim LWIP eingestellt?

Wie sieht denn das ARP Paket genau aus?
Hast du ein pcap-Trace (Wireshark)?

von Jan (Gast)


Lesenswert?

Es ist eine 1:1 Verbindung. Firewall ist ausgeschaltet.

MAC Adresse ist vergeben (00:00:00:00:00:01) und ist in der ARP Antwort 
als Quell MAC Adresse korrekt enthalten.

von Harry L. (mysth)


Lesenswert?

Hat zwar nicht unmittelbar mit deinem Problem zu tun, aber wenn ich eine 
MAC-Adresse benötige benutze ich dieses Tool:
https://www.hellion.org.uk/cgi-bin/randmac.pl
Damit bekomme ich eine "local administered MAC".

von hp-freund (Gast)


Lesenswert?

Läuft denn ICMP auch?

Also gibt es ein:

#define LWIP_ICMP 1

?

von LHA (Gast)


Lesenswert?

Hey, wenn ARP schon nicht richtig geht, brauchst Du nicht bei ICMP zu 
suchen.

Folgende Reihenfolge hilft bei der Fehlersuche:
1. Paketempfang auf uC sicherstellen
2. Paketsenden von uC zu Host sicherstellen (wireshark + promiscuous 
mode)
3. ARP request empfangen
4. ARP reply aussenden (Checksumme im wireshark richtig?)
5. IP/ICMP echo request empfangen
6. IP/ICMP echo response schicken (Checksumme(n) im wireshark richitg?)
Dann kann es mit UDP oder TCP weitergehen.

Solange die ARP replys beim Host noch nicht ankommen, braucht man keine 
Netzmaske, kein ICMP und auch kein DHCP. Das kommt alles viel später.

von hp-freund (Gast)


Lesenswert?

Moin Jan,

mein Nucleo-F746 ist heute angekommen, so das ich deine Konfiguration 
mal kurz getestet habe.

Am Router per Kabel mit DHCP -> alles Super.

Bei der Direktverbindung zum Ubuntu-PC ging das Ping genau ein Mal.
Der Grund: da ich nur temporär die IP zuweisen wollte, habe ich auf der 
Konsole mit "ip addr add" die Adresse angegeben.
Nur ist diese dann - vermutlich durch den Network-Manager - nach ein 
paar Sekunden wieder verschwunden und somit kein weiterer Ping möglich.
Egal ob das WLAN aktiv ist oder nicht.

Ist deine PC IP dauerhaft eingestellt/noch vorhanden?

von Jan (Gast)


Lesenswert?

Über Wireshark sehe ich das keine Pakete empfangen werden.

Meine IP ist statisch festgelegt.

Komisch finde ich das ich eine IPv6 Addresse habe. Wie kann das sein?
Ich kenn mich damit leider nicht gut genug aus.

ifconfig liefert:
eth0
Link encap:Ethernet  HWaddr 60:02:XX:XX:XX:XX
          inet addr:192.168.0.1  Bcast:192.168.0.255  Mask:255.255.255.0
          inet6 addr: XXXX::XXXX:XXXX:XXXX:XXXX/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:428 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:0 (0.0 B)  TX bytes:29513 (29.5 KB)
          Interrupt:18

von LHA (Gast)


Lesenswert?

Jan schrieb:
> Über Wireshark sehe ich das keine Pakete empfangen werden.
Dann prüfe erstmal, ob der ARP-Request im Mikrocontroller ankommt.
(per printf-UART-Debugging oder per JTAG/SWD-Debugzugriff)


> Meine IP ist statisch festgelegt.

> Komisch finde ich das ich eine IPv6 Addresse habe. Wie kann das sein?
> Ich kenn mich damit leider nicht gut genug aus.

Da stehen doch zwei Adressen da:
>   inet addr:192.168.0.1  Bcast:192.168.0.255  Mask:255.255.255.0
>   inet6 addr: XXXX::XXXX:XXXX:XXXX:XXXX/64 Scope:Link

Der Netzwerkstack des Hosts kann beides unterscheiden. Dafür ist 
schließlich das Versionsfeld bei IP da:

https://de.wikipedia.org/wiki/IP-Paket#Version

von Jan (Gast)


Lesenswert?

LHA schrieb:
> Dann prüfe erstmal, ob der ARP-Request im Mikrocontroller ankommt.
> (per printf-UART-Debugging oder per JTAG/SWD-Debugzugriff)

Das kommt an und wird daraufhin beantwortet mit einem ARP Response. 
Dieser kommt nur nie am Laptop an.

Spannungspegel, Augendiagramme, Takte habe ich geprüft und alles ist in 
Ordnung.

Ich werde demnächst wohl erstmal mein PHY allein an eine andere Hardware 
hängen und testen.

von hp-freund (Gast)


Lesenswert?

Kannst ja einfach mal versuchen dein Board direkt an den Router zu 
stecken und per DHCP eine IPv4 zu beziehen.

von Jan (Gast)


Lesenswert?

Das Problem ist gelöst :-D
Habe den PHY ausgetauscht, der war wohl kaputt.

Tipp: schon beim Linkaufbau empfängt man RX Pakete also unabhängig vom 
LWIP Stack.



Vielen Dank für die Vorschläge.

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.