Forum: Mikrocontroller und Digitale Elektronik STM32F429ZI Nucleo: Ethernet/LwIP Probleme


von Verzweifelter Gast (Gast)


Lesenswert?

Hey,

ich würde gerne Ethernet mit einem TCP/IP Stack auf meinem Nucleo F429ZI 
laufen lassen. Allerdings bekomme ich es einfach nicht hin.

Es gibt kein funktionierendes Beispiel (aus dem STM32F4Cube Package das 
funktioniert leider auch nicht bei mir - und ich hätte es eigentlich 
auch gerne ohne RTOS).

Wenn ich in CubeMX alles einstelle, das heißt LwIP und Ethernet 
aktiviere, statische IP einstelle, ICMP, Software Checksums aktiviere 
und 1-2 weitere Kleinigkeiten, dann komme ich nicht so weit, dass ich 
das Board anpingen kann.

In der Main Loop rufe ich `MX_LWIP_Process();` auf.

Natürlich sind beide Geräte im gleichen Subnetz.

Das Board bekommt ARP-Requests von meinem PC und laut Debug Nachricht 
versucht es auch darauf zu antworten. Soweit ich es mit meinem 
Laien-Verständnis nachvollziehen kann, ist im entsprechenden Code auch 
kein Fehler, der zurückgeworfen wird.

Ich habe schon einige Vorschläge, die ich so im Internet gefunden habe, 
ausprobiert. Z.B. die externe PHY Konfiguration angepasst. Auch habe ich 
schon verschiedene Ethernet-Kabel probiert (auch Crossover, oder über 
einen Switch statt direkt zu verbinden).

Wireshark zeigt mir Nachrichten von meinem PC an das Board an (also 
vorallem die erwähnten ARP Requests), aber nie eine Antwort. Das Board 
behauptet aber, es hätte würde etwas senden, aber scheinbar scheint 
irgendwas Probleme zu machen.

Hat jemand eine Idee, was ich noch probieren kann? Oder ... ein 
funktionierendes Beispiel?

von Sherlock Holmes (Gast)


Lesenswert?

Verzweifelter Gast schrieb:
> Hat jemand eine Idee, was ich noch probieren kann? Oder ... ein
> funktionierendes Beispiel?

Habe das letzthin selbst durchexerziert und zum Erfolg gekommen.

Poste mal deine *.ioc Datei, dann schaugn mer mal ....

von Verzweifelter Gast (Gast)


Angehängte Dateien:

Lesenswert?

Danke, für's Zeit nehmen, im Anhang ist die .ioc Datei.

Ich habe allerdings ein wenig den Überblick verloren, im TrueStudio 
Projekt selbst habe ich auch ein paar Modifikationen ausprobiert und 
nicht jedes mal das CubeMX Projekt neugeneriert, wenn ich ein Flag 
geändert habe.

Aber im Wesentlichen habe ich wie im ersten Post beschrieben noch 
`MX_LWIP_Process()` in der Main Loop aufgerufen und ansonsten mit ein 
paar Parametern gespielt.

Ah, und was mir gerade einfällt, ich habe die min Heap/Stack Size auf 
0x9999 angehoben, aber auch nicht im CubeMX Projekt.

Und sonst nur Dinge wie Debugnachrichten zum laufen gebracht, damit ich 
sehe, was auf dem Board passiert ...

von Sherlock Holmes (Gast)


Lesenswert?

Verzweifelter Gast schrieb:
> Danke, für's Zeit nehmen

Danke ich schaue es mir mal an ...

Dabei stolpere ich gleich über den Dateinamen. Denn assoziativ
betrachtet ist der falsch. Denn eigentlich hast du ein Projekt
angelegt das ein Netzwerkprotokoll (IP) nutzen bzw testen
will, und eben nicht (nur) das Ethernet Interface.

Verzweifelter Gast schrieb:
> Aber im Wesentlichen habe ich wie im ersten Post beschrieben noch
> `MX_LWIP_Process()` in der Main Loop aufgerufen

Das ist auch ganz richtig.

Verzweifelter Gast schrieb:
> und ansonsten mit ein paar Parametern gespielt.

... wo man sich leicht im Dschungel verirren kann ...

von Sherlock Holmes (Gast)


Lesenswert?

Verzweifelter Gast schrieb:
> Ethernet.ioc

Also auf die Schnelle fällt auf:

du verwendest den internen 16MHz Oszillator. Der ist erstens
ungenau und zweitens stärker Jitterbehaftet. Das geht für
Ethernet höchstwahrscheinlich nicht.

(Kollegen hatten in einem Projekt vergessen die Lastkapazitäten
in einem EThernet PHY vorzusehen. Was eine geringfügige
Verschiebeung der Quarzfrequenz zu Folge hatte, was wiederum
zu schwacher LAN Performance bzw Ausfällen führte.)

Dein Nucleo Board hat zwar keinen 8MHz Quarz bestückt, bekommt
jedoch trotzdem einen 8MHz Takt vom angehängten ST-Link V2.1
Den solltest du unbedingt nutzen. Auch wenn d uvielleicht nicht
auf 180 MHz kommst.

von Sherlock Holmes (Gast)


Angehängte Dateien:

Lesenswert?

Hier mal eine fertige Applikation zum flashen und testen
für das Nucleo F429ZI Board.

Sucht sich selbst per DHCP eine IP Adresse und lässt sich
dann anpingen:

ping My_NucleoF429

von Verzweifelter Gast (Gast)


Lesenswert?

Sherlock Holmes schrieb:
> du verwendest den internen 16MHz Oszillator. Der ist erstens
> ungenau und zweitens stärker Jitterbehaftet. Das geht für
> Ethernet höchstwahrscheinlich nicht.

Ah, interessant. Ich kenne mich mit den Details leider nicht so aus und 
hatte gehofft, dass CubeMX mir die Konfiguration abnimmt.

> Den solltest du unbedingt nutzen. Auch wenn d uvielleicht nicht
auf 180 MHz kommst.

Wie mache ich das denn?

> Hier mal eine fertige Applikation zum flashen und testen für das Nucleo F429ZI 
Board.

Danke! Ich kann nur gerade mein Board nicht flashen, ich schätze wegen 
Treiberproblemen oder so (Windows 10). Die ST-Link Utility sagt "No 
ST-LINK detected !". In meiner IDE kann ich aber flashen und debuggen - 
nur weiß ich spontan nicht, wie ich ihr das HEX-File unterschieben soll.

Man sieht, ich bin echt nicht so erfahren damit :D

von Sherlock Holmes (Gast)


Lesenswert?

Verzweifelter Gast schrieb:
> Wie mache ich das denn?

Indem du die Clock-Konfiguration anwirfst, dir Gedanken machst
(speziell zum HSE Clock) und deine Schlüsse (mittels Clicks)
daraus ziehst.

von Sherlock Holmes (Gast)


Lesenswert?

Verzweifelter Gast schrieb:
> Ich kenne mich mit den Details leider nicht so aus und
> hatte gehofft, dass CubeMX mir die Konfiguration abnimmt.

Gebratene Tauben die einem in den Mund fliegen gibt's halt
noch nicht. Bisschen Hirnschmalz braucht es also doch.

Wenn du die Genauigkeits-Erfordernisse von Ethernet betrachten
würdest und dazu die Genauigkeit des internen RC-Oszillators
dann würdest du vielleicht eine Diskrepanz bemerken.

von Verzweifelter Gast (Gast)


Lesenswert?

So, erst mal zu dem HEX-File. Ich hatte ganz vergessen, dass ich ja vor 
einer Weile die Firmware von ST-Link auf J-Link gewechselt hab und es 
damit zusammenhängt, dass ich nicht flashen kann. Das war 
zugegebenermaßen auch einer der ersten Schritte, die ich gemacht habe, 
ich wusste nicht mal wirklich, was ich tue :)

Das Ethernet Beispiel klappt jedenfalls, ich kann das Gerät anpingen!

Jetzt zu den Clocks ... Es tut mir Leid, aber ich habe absolut Null 
Erfahrung damit. Das sind meine ersten Schritte im 
Mikrocontroller-Bereich, das einzige was ich mitbringe sind 
C-Kenntnisse. Ich weiß zwar, was ein Oszillator ist und ich kann mir 
auch vorstellen, dass Ethernet einen guten Taktgeber braucht, aber da 
hört es leider auf.

Das von dir erwähnte HSE ist auch ausgegraut bei mir. Ich denke mal, da 
müsste ich einen eigenen Quarz dranlöten, damit ich das überhaupt nutzen 
könnte (ist ja schließlich "external"?"

> Gebratene Tauben die einem in den Mund fliegen gibt's halt
> noch nicht. Bisschen Hirnschmalz braucht es also doch.

Schade :) Es ist ja nicht so, dass ich zu faul wäre, mir etwas 
anzulesen, aber für meine ersten Schritte bin ich ein wenig überfordert 
bzw. weiß überhaupt nicht, wo man ansetzen muss.

von Sherlock Holmes (Gast)


Lesenswert?

Verzweifelter Gast schrieb:
> Das von dir erwähnte HSE ist auch ausgegraut bei mir. Ich denke mal, da
> müsste ich einen eigenen Quarz dranlöten, damit ich das überhaupt nutzen
> könnte (ist ja schließlich "external"?"

Hierzu ein einfacher Fragebogen:

[ ]  Du liest meine Beiträge dazu
[ ]  Dir ist egal was ich in meinen Beiträge schreibe

Sherlock Holmes schrieb:
> Dein Nucleo Board hat zwar keinen 8MHz Quarz bestückt, bekommt
> jedoch trotzdem einen 8MHz Takt vom angehängten ST-Link V2.1
> Den solltest du unbedingt nutzen. Auch wenn du vielleicht nicht
> auf 180 MHz kommst.

von Verzweifelter Gast (Gast)


Lesenswert?

Ich weiß, dass ich der Fragende bin und du derjenige, der mir hilft. Es 
wäre trotzdem nett, wenn du mich nicht so sehr von oben herab behandeln 
würdest.

Ich habe den Beitrag durchaus gelesen und zur Kenntnis genommen. Auf den 
von dir zitierten Teil habe ich geantwortet mit:

> Wie mache ich das denn?

Wenn ich das als HSE Signal einstellen kann, ist mir jedenfalls nicht 
klar, wie. Das alles mag für dich offensichtlich sein, ist es für mich 
jedenfalls nicht.

von Sherlock Holmes (Gast)


Lesenswert?

Verzweifelter Gast schrieb:
> Das von dir erwähnte HSE ist auch ausgegraut bei mir.

Pinout & Configuration --> RCC -->
   --> High Speed Clock (HSE) --> Crystal/Ceramic Resonator

In der Clock Configuration:

Bei "Input Frequency" trägst du 8 (MHz) ein.

Bisschen weitere Eigeninitiative wäre schon "schön".

von Verzweifelter Gast (Gast)


Lesenswert?

Danke, wie gesagt, das war für mich nicht offensichtlich. Jetzt sieht es 
bei mir so aus: https://i.imgur.com/SF6mdyp.png

Pingen klappt leider trotzdem noch nicht.

von Hinwaiser (Gast)


Lesenswert?

Verzweifelter Gast schrieb:
> Pingen klappt leider trotzdem noch nicht.

Siehe: https://www.mikrocontroller.net/articles/Netiquette

Insbesondere:  "Klare Beschreibung des Problems"

von Verzweifelter Gast (Gast)


Lesenswert?

damit wollte ich sagen: Es hat sich nichts verändert

von Verzweifelter Gast (Gast)


Lesenswert?

Ich habe übrigens ein Projekt gefunden, welches ich übernehmen konnte: 
https://github.com/DutchEngineer/STM32F429_NUCLEO_LWIP_FREERTOS

Das kann ich bei mir ausführen und habe ich dann angepasst, so dass z.B. 
kein FreeRTOS benutzt wird usw.

Vielleicht hilft das noch jemandem weiter, der ähnliche Probleme hat wie 
ich.

Was ich mir von "Sherlock Holmes" anhören durfte ist übrigens schon eine 
Frechheit. Entscheide dich doch bitte das nächste Mal, ob du helfen 
willst, oder ob du nur Leute beleidigen willst, weil sie in deinen 
Interessensgebieten wenig Erfahrung haben.

Ich war schon oft auf der anderen Seite (wenn es um 
Programmier-Anfänger) geht, verstehe also durchaus, dass man auch selbst 
in der Pflicht ist, etwas zu leisten. Aber einfach nur ein Häppchen 
hinwerfen und dann ausfallend werden, weil derjenige es nicht versteht 
ist nicht die Art, wie ich mit Programmierneulingen umgehe.

von Mw E. (Firma: fritzler-avr.de) (fritzler)


Lesenswert?

Verzweifelter Gast schrieb:
> Was ich mir von "Sherlock Holmes" anhören durfte ist übrigens schon eine
> Frechheit. Entscheide dich doch bitte das nächste Mal, ob du helfen
> willst, oder ob du nur Leute beleidigen willst, weil sie in deinen
> Interessensgebieten wenig Erfahrung haben.

Nich wirklich, bevor man sich mit Netzwerk auseinander setzt sollt man 
eben erstmal die Grundlagen kennen lernen.
Also zB das DB vom PHY lesen.

Auf die Hilfestellungen und Fragen von Sherlock biste nunmal wenig 
eingenagen und hast immer nur wild im CubeMX rumgeklickt und gesagt 
"geht nicht".

von Sherlock Holmes (Gast)


Lesenswert?

Verzweifelter Gast schrieb:
> ob du nur Leute beleidigen willst

So so, beleidigen .... wo wären denn hier Beleidigungen zu finden?

Naja, Einbildung ist auch eine Bildung.

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.