Guten Morgen zusammen,
ich nehme aktuell den MAC an einem STM32F7 (Nucleo-F767ZI) in Betrieb
und versuche mich in die Thematik einzuarbeiten. Das Nucleo Board ist
direkt mit meinem PC über ein Ethernet-USB Wandler (Edimax EU-4208)
angeschlossen.
Im Wireshark kann ich sehen, dass regelmäßig ARP und Broadcast Pakete
vom PC verschickt werden. Diese kann ich auch mit dem STM32F7 empfangen.
Nun möchte ich gerne RAW Ethernet Frames (Payload 256 Bytes, 0x00 bis
0xFF) verschicken, laut Logic-Analyzer auf dem RMII passiert dies auch.
Nur kann ich im Wireshark nichts erkennen, hätte zumindest den Empfang
von fehlerhaften Paketen erwartet.
Ob CRC korrekt berechnet und verschickt wird kann man via Logic-Analyzer
nicht direkt sehen, da RMII vom Saleae nicht unterstützt wird. Habe auch
keine Lust das von Hand zu zerpflücken :).
Via google, habe ich paar Hinweise entdeckt, z. B. promiskuitive Modus
oder Deaktivieren des CRC checks im Treiber. Leider führte dies nicht
zum Erfolg.
Hat jemand von euch sowas gelöst?
mr. mo schrieb:> Nur kann ich im Wireshark nichts erkennen, hätte zumindest den Empfang> von fehlerhaften Paketen erwartet.
Vielleicht werden fehlerhafte Pakete schon vom Netzwerkteiber oder gar
der Hardware abgefangen.
> Via google, habe ich paar Hinweise entdeckt, z. B. promiskuitive> Modus oder Deaktivieren des CRC checks im Treiber.
Das sind sicher optionale Features.
Stefan ⛄ F. schrieb:> Vielleicht werden fehlerhafte Pakete schon vom Netzwerkteiber oder gar> der Hardware abgefangen.
Habe ich auch vermutet. Aber irgendwie muss man das ja debuggen können.
Ich könnte ein weiteres Nucleo Board nehmen, empfangen kann ich ja.
Ansonsten werde ich mal nach Sniffer für Ethernet Leitungen googeln,
vielleicht ist sowas bezahlbar oder einfach realisierbar.
mr. mo schrieb:> mit meinem PC über ein Ethernet-USB Wandler (Edimax EU-4208)> angeschlossen
bei einem Ethernet-Anschluss an USB würde ich erst einmal prüfen, ob der
den Promiscuous-Mode überhaupt vollständig implementiert.
Ethernetchips haben einen MAC-Filter, der Pakete wegschmeisst, dessen
Zieladresse nicht im Filter steht (Broadcast ff:ff:ff:ff:ff:ff geht
immer durch). Der Promiscuous-Mode schaltet diesen Filter ab.
Fehlerhafte Pakete (CRC, Framing, etc) werden ebenfalls verworfen (aber
üblicherweise in Errorcountern gezählt). Je nach Betriebssystem werden
dann Pakete weiter gefiltert (Ethertype etc).
Um es dem Empfänger möglichst einfach zu machen, also Broadcast-Pakete
mit einem bekannten Ethertype verschicken. CRCs werden üblicherweise
vom Chip generiert und sollten korrekt sein. Evtl die Errorcounter
überprüfen.
Evtl stimmt der Ethernet-Modus aber auch nicht (Bitrate, Duplex, etc) -
das wird vom MII ausgehandelt, muß aber evtl erstmals konfiguriert und
getriggert werden. Den Link-Status im Empfänger überprüfen, ob da was
passiert ist.
Moin,
Geh' davon aus, dass normale Netzwerkkarten/Switche das Paket verwerfen,
wenn die Ethernet-CRC nicht stimmt oder das Paket zu kurz ist. Fuer
solche Tests empfehl' ich ein Arp (+ Padding), da kann man sich einfach
ein "schoenes" incl. richtiger CRC aus einem Wireshark Mitschnitt von
irgendwoher raussuchen und c+p.
Gruss
WK
Danke für die Antworten!
foobar schrieb:> Evtl stimmt der Ethernet-Modus aber auch nicht (Bitrate, Duplex, etc) -> das wird vom MII ausgehandelt, muß aber evtl erstmals konfiguriert und> getriggert werden. Den Link-Status im Empfänger überprüfen, ob da was> passiert ist.
Wird via Autonegotiation ausgehandelt. Der PHY (LAN8742) meldet, dass
alles passt.
foobar schrieb:> Um es dem Empfänger möglichst einfach zu machen, also Broadcast-Pakete> mit einem bekannten Ethertype verschicken.Dergute W. schrieb:> solche Tests empfehl' ich ein Arp (+ Padding), ...
Das wäre eine einfache Lösung, würde ich als Nächstes testen und
berichten.
adib schrieb:> Versuche es doch mal mit dem Beispiel zu dem dev Board.> In den cubemx lib für den f4 sind Beispiele zu finden.
Funktionieren wundervoll. Habe daraus bloß kaum was gelernt. Deshalb
erarbeite ich mir den Weg vom MAC über Konfiguration lwIP bis zum
kleinen Server selbst.
Ha! Das war ja einfach :) Das ARP Paket kommt im Wireshark an (siehe
Screenshot). Die MAC Adresse mag er nicht sonderlich, aber egal.
Folgendes Datenpaket habe ich im Sekundentakt versendet, Padding und CRC
macht der MAC des STM32F7.
Nicht umsonst kosten "richtige" Sniffer auch "richtiges" Geld
und funktionieren nur mit dem "richtigen" Treiber, der die
"richtige" (PCMCIA/PCCARD/PCI/PCIe)-Karte am Laufen haaelt.
Das ein Switch das Paket dann trotzdem verwirft ist richtig.
Deswegen benutzt man fuer sowas, wenn auch heute nur noch
schlecht beschaffbar, einen echten Hub.
mr. mo schrieb:> Ha! Das war ja einfach :) Das ARP Paket kommt im Wireshark an (siehe> Screenshot). Die MAC Adresse mag er nicht sonderlich, aber egal.
Das I/G address bit darf bei der Quell-Adresse auch nicht 1 sein...
Einfach den Standard lesen.
Die 11 durch 10 tauschen und gut ist.