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?
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 ....
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 ...
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 ...
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.
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
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
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.
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.
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.
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.
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.
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".
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.
Verzweifelter Gast schrieb: > Pingen klappt leider trotzdem noch nicht. Siehe: https://www.mikrocontroller.net/articles/Netiquette Insbesondere: "Klare Beschreibung des Problems"
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.
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".
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.