STM32H753: Ethernet / LWIP funktioniert nicht (Timeout durch fehlender SW-Reset)

OP #7385605
Lesenswert?

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:

1
  /* Wait for software reset */
2
  while (READ_BIT(heth->Instance->DMAMR, ETH_DMAMR_SWR) > 0U)
3
  {
4
    if (((HAL_GetTick() - tickstart) > ETH_SWRESET_TIMEOUT))
5
    {
6
      /* Set Error Code */
7
      heth->ErrorCode = HAL_ETH_ERROR_TIMEOUT;
8
      /* Set State as Error */
9
      heth->gState = HAL_ETH_STATE_ERROR;
10
      /* Return Error */
11
      return HAL_ERROR;
12
    }
13
  }

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.

Angehängte Dateien:
#7385637
Lesenswert?

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.

OP #7385646
Lesenswert?

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...

#7385664
Lesenswert?

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.

#7385702
Lesenswert?

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:

  1. 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?

#7385723
Lesenswert?

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

OP #7386133
Lesenswert?

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.

Angehängte Dateien:
OP #7386162
Lesenswert?

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).

Angehängte Dateien:

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren