Forum: Mikrocontroller und Digitale Elektronik STM32H753: Ethernet / LWIP funktioniert nicht (Timeout durch fehlender SW-Reset)


von Moe E. (moe_espunkt)


Angehängte Dateien:

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.

: Bearbeitet durch User
von Wastl (hartundweichware)


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.

von Moe E. (moe_espunkt)


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

: Bearbeitet durch User
von Wastl (hartundweichware)


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.

von A. G. (grtu)


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:
> 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?

von Frank K. (fchk)


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

von Moe E. (moe_espunkt)


Angehängte Dateien:

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.

von Thorsten M. (pappkamerad)


Lesenswert?

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.

von Moe E. (moe_espunkt)


Angehängte Dateien:

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

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.