Hallo Zusammen,
ich versuche mit Hilfe von CubeMX die Ethernet-Schnittstelle auf dem
STM32H753ZIT in Betrieb zunehmen. Ziel ist es, dass ich den µC anpingen
kann. Es handelt sich nicht um ein Evalboard sondern um eine selbst
entwickelte Platine. Der Schaltplan liegt mir leider nicht vor.
Ich habe schon das halbe Internet abgesucht und verschiedene Tutorials
durchgearbeitet aber ich habe immer den selben Fehler: bei der
Initialisierung des lwip-Stacks wird an folgender Stelle in der
stm32h7xx_hal_eth.c ein Timeout ausgelöst:
In verschiedenen Foren wurde das o.g. Problem gelöst, in dem die
APB4-Frequenz geändert wurde. Ich habe auch schon diverse Frequenzen
durchprobiert, leider ohne Erfolg. Oft wird erwähnt, dass das Problem
mit der Clock-Leitung zusammenhängt. Interessanterweise sind scheinbar
nur selbst entwickelte Platinen von dem Problem betroffen, also keine
Evalboards!
Der Hersteller der Platine gab noch an, dass die Signale MDIO und MDC
nicht verwendet werden. Ich kann die beiden Signale in CubeMX nicht
abschalten, weil ansonsten die komplette Ethernet-Schnittstelle
abgeschaltet wird. Der Hersteller hat mir daraufhin eine Firmware zur
Verfügung gestellt, mit der man die Ethernet-Schnittstelle in Betrieb
nehmen kann. Also die Signale MDIO und MDC sind anscheinend nicht
zwingend notwendig für einen Ping.
1. Frage:
lässt sich überhaupt ein funktionierendes CubeMX-Projekt erstellen, wenn
die Leitungen MDIO und MDC auf der HW nicht verwendet werden jedoch
weiterhin in CubeMX aktiv sind?
2. Frage:
Hat jemand eine Idee, wie ich das Problem mit dem oben erwähnten Timeout
löse? Oder hat jemand eine Vermutung wieso kein SW-Reset ausgelöst wird?
Um den Thread übersichtlich zu halten habe ich die main.c sowei mein
IOC-File als Datei dem Anhang angefügt. Falls noch Informationen fehlen,
dann sagt mir gerne Bescheid. Ich werde diese dann umgehend ergänzen.
Ich danke euch für eure Hilfe und würde mich über Antworten freuen.
Moe E. schrieb:> Es handelt sich nicht um ein Evalboard sondern um eine _selbst_> entwickelte Platine. Der Schaltplan liegt mir leider nicht vor.
Ach, du hast selbst eine Platine entwickelt und hast keinen
Schaltplan dazu? Wie ärgerlich!
Gretchenfrage wäre erst mal ob der 8720 einen eigenen Clock-
Generator bekommen hat (das wäre ein Quarzoszillator mit 50 MHz)
oder ob er seinen Clock vom H753 bezieht. Im letzteren Fall
muss dieser Clock natürlich auf 50 MHz konfiguriert worden sein.
Das erste was ich machen würde: nachmessen ob der Clock an
den 8720 geliefert wird und ob die Frequenz stimmt. Dazu muss
der H753 natürlich gestartet worden sein damit seine Clock-
Konfiguration aktiv ist.
Wastl schrieb:> Ach, du hast selbst eine Platine entwickelt und hast keinen> Schaltplan dazu? Wie ärgerlich!
Sorry, tatsächlich etwas unglücklich formuliert von mir. Damit ist
gemeint, dass die Platine in Auftrag gegeben wurden ist und es sich
hierbei nicht um ein Evalboard oder um ein fertiges Produkt handelt.
Wastl schrieb:> oder ob er seinen Clock vom H753 bezieht. Im letzteren Fall> muss dieser Clock natürlich auf 50 MHz konfiguriert worden sein.
Die Platine verfügt über zwei Ethernetports und verfügt über einen
Ethernetswitch Typ KSZ8463RLI. Den Ethernetswitch versorge ich mit einer
Clock von 50 MHz über den MCO des H753. Laut PCB Hersteller sollte die
Clock ausreichen um das Ethernet in Betrieb zu nehmen. Dennoch bekomme
ich Timeouts und ich weiß nicht wieso...
Moe E. schrieb:> und verfügt über einen> Ethernetswitch Typ KSZ8463RLI. Den Ethernetswitch versorge ich mit einer> Clock von 50 MHz über den MCO des H753.
Neue Salamischeibe, wie erfreulich. Erst mal das Auditorium
zappeln lassen und dann die Salami-Schneidemaschine anwerfen ....
Der Ethernetswitch läuft out-of-the-box? Ich kenne mich damit
nicht aus und habe keine Lust mir das 200-Seiten-Manual durch-
zulesen. Ich würde mal aus meinem gesunden Menscheneverstand
heraus sagen dass dieser erst mal konfiguriert werden muss
bevor er Bits durchlässt wie man das erwartet.
Moe E. schrieb:> versorge ich mit einer Clock von 50 MHz
Eine Uhr mit 50 MHz, was ist das denn?
Wastl schrieb:> Das erste was ich machen würde: nachmessen ob der Clock an> den 8720 geliefert wird und ob die Frequenz stimmt.
Moe E. schrieb:> 1. Frage:> lässt sich überhaupt ein funktionierendes CubeMX-Projekt erstellen, wenn> die Leitungen MDIO und MDC auf der HW nicht verwendet werden jedoch> weiterhin in CubeMX aktiv sind?
Wenn ich mich recht erinnere, sind diese beiden Leitungen normalerweise
notwendig um die PHY zu konfigurieren und den Status wie 'link' usw.
abzufragen. Wenn die PHY schon durch beispielsweise pull-up/down
Widerstände konfiguriert wird, dann braucht man das eventuell nicht.
Moe E. schrieb:> 2. Frage:> Hat jemand eine Idee, wie ich das Problem mit dem oben erwähnten Timeout> löse? Oder hat jemand eine Vermutung wieso kein SW-Reset ausgelöst wird?
In deinem ioc file ist der "Ethernet global interrupt" nicht aktiviert,
ist das vielleicht das Problem?
Wastl schrieb:> Moe E. schrieb:>> versorge ich mit einer Clock von 50 MHz>> Eine Uhr mit 50 MHz, was ist das denn?
Ist das ne ernstgemeinte Frage? Langeweile?
Moe E. schrieb:> Die Platine verfügt über zwei Ethernetports und verfügt über einen> Ethernetswitch Typ KSZ8463RLI. Den Ethernetswitch versorge ich mit einer> Clock von 50 MHz über den MCO des H753. Laut PCB Hersteller sollte die> Clock ausreichen um das Ethernet in Betrieb zu nehmen. Dennoch bekomme> ich Timeouts und ich weiß nicht wieso...
Der Ausgang des MCO ist nur dann gut genug, wenn die erzeugten 50 MHz
ein ganzzahliges Vielfaches der Taktfrequenz des primären Oszillators
ist. Ansonsten hast Du möglicherweise zu viel Jitter. Bei 25MHz
Oszillatorfrequenz ist das ok, bei 8MHz wirst Du wohl Probleme bekommen.
Der eine Euro für den extra Quarzoszillator hätte den Kohl nicht fett
gemacht.
Und zu MDC/MDIO: ja, ich weiß jetzt, warum die Leitungen nicht
angeschlossen wurden. Da hängt ja ein Switch dahinter, und der wird
anderweitig konfiguriert (und er MUSS konfiguriert werden). Über
MDC/MDIO kann der Ethernet-Treiber beispielsweise feststellen, ob der
Link up oder down ist und ob Halb- oder Vollduplex ausgehandelt worden
ist. Wenn der Treiber das so macht, und der Treiber vom CubeMX wird das
sehr wahrscheinlich so machen, dann wirst Du entweder den Treiber oder
die Hardware ändern müssen.
Was Dich lehren wird, Hardware und Software immer als Einheit zu sehen.
Wer die Hardware entwirft, muss wissen, wie sie später benutzt wird.
Gegenbeispiel: Ein LAN9303 oder LAN9354 kann nicht nur über I2C, sondern
auch über MDC/MDIO konfiguriert werden, und er kann auch als Ethernet
PHY arbeiten. Dabei stellt er die standardisierten 16 PHY-Register
bereit, weitere 16 bausteinspezifische, und den Rest der Register kann
man dann über andere PHY-Adressen ansprechen. Das sorgt dafür, dass der
Standard-Ethernet-Treiber, der eben die PHY-Register abfragt, eben die
standardisierten Register vorfindet und damit erstmal funktioniert.
Ob Dein Chip das auch so kann, weiß ich jetzt nicht - den hab ich mir
jetzt nicht angeschaut. Wenn, dann muss man aber den Ethernet PHY Modus
und MDC/MDIO auch benutzen.
Schade eigentlich.
fchk
fchk
A. G. schrieb:> In deinem ioc file ist der "Ethernet global interrupt" nicht aktiviert,> ist das vielleicht das Problem?
Danke für deine Antwort. Ich denke nicht. Laut Anleitung von ST werden
die Interrupts nur zwingend benötigt, wenn ein RTOS verwendet wird und
ich nutze kein RTOS. Auf dem Evalboard (STM32H745I-DISCO) funktioniert
der Ping auch mit der Anleitung von ST, ganz ohne Interrupt.
A. G. schrieb:> Wastl schrieb:>> Moe E. schrieb:>>> versorge ich mit einer Clock von 50 MHz>>>> Eine Uhr mit 50 MHz, was ist das denn?> Ist das ne ernstgemeinte Frage? Langeweile?
Keine Ahnung was bei dem Typen schief gelaufen ist. Einfach ignorieren.
Frank K. schrieb:> Und zu MDC/MDIO: ja, ich weiß jetzt, warum die Leitungen nicht> angeschlossen wurden. Da hängt ja ein Switch dahinter, und der wird> anderweitig konfiguriert (und er MUSS konfiguriert werden). Über> MDC/MDIO kann der Ethernet-Treiber beispielsweise feststellen, ob der> Link up oder down ist und ob Halb- oder Vollduplex ausgehandelt worden> ist. Wenn der Treiber das so macht, und der Treiber vom CubeMX wird das> sehr wahrscheinlich so machen, dann wirst Du entweder den Treiber oder> die Hardware ändern müssen.
Super Erklärung! Danke dir dafür. Dann hat der Hersteller der Platine
mir wohl Quatsch erzählt: er sagte mir, dass ich nur die 50 MHz
angelegen soll und weitere Konfigurationen am Switch nicht nötig sind.
Dann muss ich mir wohl doch das Datenblatt im Detail anschauen.
Ich hab jetzt mal das MCO Signal mit dem Scope gemessen: kann gerade
schwer beurteilen ob das so richtig ist (siehe Bild im Anhang).
Zumindest sind die gewünschten 50 MHz da aber die Amplitude ist
verdächtig klein. Vielleicht ist das auch schon der Grund, wieso der
SW-Reset nicht ausgelöst wird. Ich werde mal im Manual nach schauen ob
die Amplitude des MCOs spezifiziert ist.
Vielleicht kannst du ja den Switch von außen testen. Also wenn es zwei
Ports nach draußen gibt, einfach mal Pakete durchschicken. Dann wüsste
man ob es am µC oder am Switch liegt.
Wie zu Beginn erwähnt, hat der PCB-Hersteller mir eine Firmware zur
Verfügung gestellt, mit der ich die Ethernetschnittstelle in Betrieb
nehmen kann. Mit der Firmware sieht das MCO-Signal "besser" aus (siehe
Anhang). Höchstwahrscheinlich muss doch der Switch konfiguriert werden,
was dann zu einem anderen Verhalten auf der Leitung führt und
letztendlich zu einem anderen Clock-Verhalten (hoffe es ist verständlich
was ich damit meine).