Forum: Mikrocontroller und Digitale Elektronik Ethernet mit STM32F207ZGT, LAN8742a und HR911105A


von Thomas W. (thomas100)


Angehängte Dateien:

Lesenswert?

Hallo Forum,

ich bin gerade dabei, einen STM32F207ZGT mit dem Microchip Phy LAN8742A 
und einem HR911105A (RJ45 Stecker mit Magnetics) in Betrieb zu nehmen.
Der LAN8742A ist mit den Config-Pins auf Auto-Negotation eingestellt.
Im Grunde an dieser Steller der Nachbau des Nucleo-F207ZG inkl. 
Reset-Erzeugung, nur dass ST hier einen anderen Magnetics nutzt.

Nach Anschluss der Spannungsversorgung leuchten auch beide LEDs am 
Stecker, also ACK und Speed 100 Mbps.
Senden und empfangen kann ich allerdings nicht.

Mache ich eine HW-Reset, leuchtet ACK und Speed ist aus, d.h. 10 Mbps.
Jetzt kann ich senden und empfangen.

Der LAN8742A verlangt eine min. Reset-Zeit von 25ms. Schalte ich die 
Versorgungsspannung ein, während ich den Reset-Taster drücke und lassen 
den Taster dann los, kann ich senden und empfangen. Das würde eine zu 
kurze Reset-Zeit bestätigen.

Was ich nicht verstehe ist, warum
a. die Auto-Aushandlung nur 10 Mbps hinbekommt
b. es mit dem Nucleo-Board funktioniert (Aushandlung und Reset)

Der Ethernet-Teil des Schaltplans im Anhang. RMII_RESET ist mit der 
Reset-Leitung des STM32 verbunden (C 100nF gegen GND).

Hat hier jemand einen Tipp für mich oder hat sogar die Bauteile schon 
mal so in Betrieb genommen?

Danke für eure Antworten.

VG
Thomas

von jo mei (Gast)


Lesenswert?

Thomas W. schrieb:
> Hat hier jemand einen Tipp für mich oder hat sogar die Bauteile schon
> mal so in Betrieb genommen?

Beim DP83848 den ich mit einem F407 im Einsatz habe braucht es
einen 50 MHz Clock den der PHY zum Controller liefern muss um
das RMII Interface verwenden zu können. Wenn ich mich recht
erinnere, denn es ist schon wieder 2 Jahre her.

Weiss leider nicht ob das beim LAN8742a auch so ist, aber es ist
doch eine Überprüfung Wert ....

von Thomas W. (thomas100)


Lesenswert?

Hallo  jo mei,

danke für deine Antwort.

Aus den 25MHz vom Quarz macht der LAN8742A intern die 50MHz und schickt 
die über Pin 14 (REFCLK0) an den Controller.
Der 50MHz-Takt ist da und kommt auch am Controller sauber an.

VG
Thomas

: Bearbeitet durch User
von jo mei (Gast)


Lesenswert?

Thomas W. schrieb:
> danke für deine Antwort.

Danke für deine freundliche Rückmeldung.

Wenn das "Magnetics" nur irgendwie 100MBit kompatibel ist dann
wirds wohl daran nicht liegen.

Dann würde ich mir doch mal den Aufbau zur Brust nehmen, ob
da irgendwas im Argen liegt. Nachdem der LAN8742A ja überall
auf den Nucleo Boards drauf ist sollte das ja problemlos
funktionieren.

von Thomas W. (thomas100)


Lesenswert?

jo mei schrieb:
> Nachdem der LAN8742A ja überall
> auf den Nucleo Boards drauf ist sollte das ja problemlos
> funktionieren.

Genau das war der Grund, warum ich mich für den LAN8742A entschieden 
habe.

Den Aufbau habe ich auch schon zig mal überprüft.
Es handelt sich um eine 4-lagige LP von JLCPCB.
Die Leitungen vom Magnetics zum Phy sind gleich lang. (13.8mm zu 13.1mm) 
und liegen direkt nebeneinander.

VG
Thomas

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


Lesenswert?

Thomas W. schrieb:
> Der LAN8742A verlangt eine min. Reset-Zeit von 25ms. Schalte ich die
> Versorgungsspannung ein, während ich den Reset-Taster drücke und lassen
> den Taster dann los, kann ich senden und empfangen. Das würde eine zu
> kurze Reset-Zeit bestätigen.

Den Fehler haste ja schon entdeckt.
Aus dem Grund der Mindestresetzeiten hänge ich den Resetpin immer an 
einen GPIO des Prozessors.
Das hält die min Zeiten ein und wenn mal was ist lässt sich der PHY auch 
so vom Prozessor resetten.

Wenn die min Resetzeit nicht eingehalten wird, dann macht der eben 
irgendwas, da lässt sich lange drüber rätseln.

von Thomas W. (thomas100)


Lesenswert?

Hallo  Mw E.

leider hab ich den Fehler nicht gefunden.

Den Reset-Pin des LAN8742A hab ich auch schon an einen GPIO gehängt, um 
die 25ms Resetzeit zu bekommen. Das klappt auch soweit.
Das hat aber leider nichts daran geändert, dass ich nur 10 Mbps bekomme.

Und warum funktioniert es beim Nucleo-Board?

Wahrscheinlich sehe ich den Wald vor lauter Bäumen nicht :-(

VG
Thomas

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


Lesenswert?

Das stand oben aber nich so ;)

Wie sieht denn das Layout aus?
Das kannste ja mal mit dem Nucleo vergleichen und hier posten.
PHYs sind recht zickig was zB die Bypass Cs angeht.

von Thomas W. (thomas100)


Angehängte Dateien:

Lesenswert?

Mw E. schrieb:
> Das stand oben aber nich so ;)

Ja, weils nichts geändert hat.

Im Anhang das Layout.
Nicht dargestellt sind die beiden Versorgungslagen 3.3V und GND.
Beide im Bereich des Ethernet-Stecker/Magnetics freigestellt.

von Johannes S. (Gast)


Lesenswert?

wie sieht es denn in der Software aus? Wenn STM32 Cube verwendet wird 
muss man aufpassen das die PHY Statusregisteradresse richtig gesetzt 
ist. HAL war für die DP Phy konfiguriert, die LAN8742 haben das SR an 
Adresse 31 und die Bits sind anders. Und genau das macht sich beim 
Autokonfig bemerkbar.

von jo mei (Gast)


Lesenswert?

Thomas W. schrieb:
> Im Anhang das Layout.

Beim Quarz hätte ich etwas Bedenken dass er zu weit weg ist, aber
das "geht noch". Aber die Lastkapazitäten sind für einen 25 MHz
Quarz erfahrungsgemäss zu gross. Zudem wirken die grossen Pads
des Quarzes als zusätzliche Kapazität. Vielleicht verschiebt es
dir die Quarzfrequenz zu stark, dann klappts mit den 100 MBit
nicht mehr. 25 MHz Quarze brauchen aus alter Erfahrung etwa
12 bis 18 pF Lastkapazitäten.

Ein Entwickler-Kollege hat in den 2000er Jahren einen PHY in
einem professionellen Gerät verbaut und die Firmware Mannschaft
wunderte sich geraume Zeit warum die Netzwerk-Verbindung so
unzuverlässig war. Er hatte die Lastkapazitäten komplett weg-
gelassen. So wie heutztage die Arduino-Jünger alles ohne
Abblock-Kondensatoren aufbauen und sich wundern. Braucht's ja
alles nicht ....

von Thomas W. (thomas100)


Angehängte Dateien:

Lesenswert?

Hallo Johannes,

ich nutze die SMT32CubeIDE 1.3.1 mit der FW 1.9.

Die Config im Anhang.
Die IDE kennt den LAN8742A, die Register passen. Auch die Phyadresse 
habe ich angepasst auf 0.

Es macht auch keinen Unterschied, ob ich hier Auto, 10 oder 100Mbps 
einstelle.

von Thomas W. (thomas100)


Lesenswert?

jo mei schrieb:
> Aber die Lastkapazitäten sind für einen 25 MHz
> Quarz erfahrungsgemäss zu gross. Zudem wirken die grossen Pads
> des Quarzes als zusätzliche Kapazität. Vielleicht verschiebt es
> dir die Quarzfrequenz zu stark, dann klappts mit den 100 MBit
> nicht mehr. 25 MHz Quarze brauchen aus alter Erfahrung etwa
> 12 bis 18 pF Lastkapazitäten.

So, gleich mal gemessen.
Die Frequenz des Quarz kann ich nicht direkt messen. Aber die 
Outputfrequenz an Pin 14 (REFCLK0). Hier kommen ziemlich genau die 50MHz 
raus.

Am Quarz und den Kapazitäten habe ich mich an die Vorgaben von ST 
gehalten.
Was aber nicht heißt, dass das in Stein gemeißelt ist.
Ich werde mal sehen, ob ich die Cs etwas kleiner bekomme. Die Pads werde 
ich mal mit einem Fräser etwas verkleiner.

jo mei schrieb:
> So wie heutztage die Arduino-Jünger alles ohne
> Abblock-Kondensatoren aufbauen und sich wundern. Braucht's ja
> alles nicht ....
Abblock-Kondensatoren werden allgemein überschätzt. So klein wie die 
sind, können die ja nix tauchen ;-)

von jo mei (Gast)


Lesenswert?

Thomas W. schrieb:
> Am Quarz und den Kapazitäten habe ich mich an die Vorgaben von ST
> gehalten.

Hast du denn den gleichen Quarz bekommen den ST verwendet?
Habe leider auch keine Erfahrungen mit den kleinen Typen ...

Thomas W. schrieb:
> Die Pads werde ich mal mit einem Fräser etwas verkleiner.

Nein lass mal, das kannst du ja mit den Lastkapazitäten ausgleichen.

Thomas W. schrieb:
> Abblock-Kondensatoren werden allgemein überschätzt. So klein wie die
> sind, können die ja nix tauchen ;-)

Ja gut, dann verstehen wir uns ja.

Thomas W. schrieb:
> Hier kommen ziemlich genau die 50MHz raus.

Diese Aussage ist natürlich etwas problematisch :-)
Weil ziemlich ....

Dann noch: zeig doch mal bitte die 50 MHz Clockleitung die zum
Controller führt.

von Johannes S. (Gast)


Lesenswert?

Thomas W. schrieb:
> Die IDE kennt den LAN8742A, die Register passen.

ja, ok, die 0x1f ist 31 und passt.

Ich entwerfe auch gerade einen Phy Adapter für ein China-F407 Board. Im 
ersten Schritt einfach, da nehme ich ein fertiges Modul von Waveshare. 
Ich habe auch überlegt so was mal selber zu versuchen und angefangen die 
Teile zusammenzusuchen. Aber beim Quarz wird man erschlagen an vielen 
Möglichkeiten: lt. Datenblatt  300 oder 100 µW Typen, bei 100 µW ist 
noch ein Serienwiderstand von 500R drin. Lastkapazitäten auf jeden Fall 
deutlich geringer, eher wenige pF, je nach Quarz. Und dann noch zig 
Bauformen...

von jo mei (Gast)


Lesenswert?

Thomas W. schrieb:
> Ethernet-Stecker/Magnetics

Das saudumme ist jetzt dass die Nucleo Boards doch tatsächlich
einen vom LAN Connector separaten Trafo draufgebaut bekommen
haben, das soll einer verstehen. Vielleicht braucht dein
LAN Connector eine andere Beschaltung ....

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


Lesenswert?

jo mei schrieb:
> Vielleicht braucht dein
> LAN Connector eine andere Beschaltung

Da hatte ich schon ins DB von PHY und Magjack geguckt, die passen 
zusammen.

Das Layout sieht auch nicht schlecht aus, also der Fehler ist durchaus 
mystisch.

von jo mei (Gast)


Lesenswert?

Mw E. schrieb:
> also der Fehler ist durchaus mystisch.

Je länger ich das Datenblatt des LAN8742A lese desto mehr zweifle
ich an den Daten im Nucleo Schaltplan wo 30pF Lastkapazitäten
angegeben sind. Müsste schon sehr dumm zugehen wenn das stimmen
sollte. Oder aber es ist ein "ganz anderer Quarz".

Letzter Satz in den Specs zum erforderlichen Quarz:
"The external load capacitors, C1 and C2, determine the accuracy
of the 25.000 MHz frequency".
Ja daran zweifle ich nicht.

von Zero V. (Firma: Freelancer) (gnd)


Lesenswert?

Oszilloskop vorhanden?
Dann mess doch die Signale TX/RX nach. Prüfe mal die Signalqualität und 
die übertragenden Daten der Fast Link Pulse.

von Gerd E. (robberknight)


Lesenswert?

R15 / RBIAS ist falsch, das müssen 12.1k sein, nicht 12.4k.

R12 ist mit 470 Ohm für den Regoff-Strap zu hoch, das DB sagt etwa 270 
Ohm.

Das sind jetzt alles keine "smoking guns" für Dein Problem, aber auf 
jeden Fall Differenzen zum DB, die ich bei so einem Problem auf jeden 
Fall korrigieren würde.

Ich bin mir nicht sicher, ob es korrekt ist das Gehäuse des Magjacks 
über so einen kleinen, nicht genug spannungsfesten Kondensator (C20) an 
das GND der Schaltung anzubinden. Wenn so, dann müsste das einer mit >= 
1.5kV sein. Ich dachte aber eigentlich daß der Hanrun den Kondensator 
schon integriert hat, Du den Gehäuseschirm also gar nicht selbst 
verbinden musst.

von Thomas W. (thomas100)


Angehängte Dateien:

Lesenswert?

Guten Morgen,

im Anhang der Takt am Ausgang Pin 14 (REFCLK0).

Die Last-Cs am Quarz habe ich auf 22pf verringert.
Ein sauberer Takt sieht allerdings anders aus.
Wäre es sinnvoll, die Leitung auf der LP mit einer GND-Leitung 
abzuschirmen?

Gerd E. schrieb:
> R15 / RBIAS ist falsch, das müssen 12.1k sein, nicht 12.4k.
Habe ich geändert. Danke.

Gerd E. schrieb:
> R12 ist mit 470 Ohm für den Regoff-Strap zu hoch, das DB sagt etwa 270
> Ohm.
Ist auch korrigiert.

Gerd E. schrieb:
> Ich dachte aber eigentlich daß der Hanrun den Kondensator
> schon integriert hat, Du den Gehäuseschirm also gar nicht selbst
> verbinden musst.
Du hast recht. Der C ist bereits im HR911105A integriert.
Ich habe den C entfernt und mit 0Ohm ersetzt.

D. C. schrieb:
> Dann mess doch die Signale TX/RX nach. Prüfe mal die Signalqualität und
> die übertragenden Daten der Fast Link Pulse.
Auf dem Oszi sehe ich nichts.
Muss ich gegen GND messen oder zwischen + und - ?

VG
Thomas

von Johannes S. (Gast)


Lesenswert?

also meine Aufbauten sehen viel wilder aus, mit 10 cm Dupontkabeln. Bei 
einem habe ich wenigstens die billigen Stecker ersetzt weil die nach 
kurzer Zeit ausleiern und dann schon kleine Erschütterungen zum Ausfall 
führten. Ein Modul ist ein org. Waveshare und ein anderes, hüstl, eine 
halb so teure Kopie. Von daher sollte eine saubere Platine maximal 
sporadische Fehler verursachen, aber nicht so einen reproduzierbaren 
systematischen Fehler.

Die Nucleos versorgen den µC über den STLink mit dem Takt, die Cube SW 
konfiguriert den etsprechend auf ext. Clock. Wie ist das bei deinem 
Board, ist das berücksichtigt? Wenn der ext. Clock fehlt git es noch 
einen Fallback auf HSI.
Und der Reset für den Phy wird wimre in der HAL Software gemacht, 
HAL_INIT_Phy(). Da ist auch eine Wartezeit drin die du in der Config 
gezeigt hast. Dafür muss aber der HAL_Tick auch funktionieren. Hast du 
den init Code mal mit dem Debugger durchgesteppt?

Korrektur:
HAL_ETH_Init() meinte ich.

von Gerd E. (robberknight)


Lesenswert?

Thomas W. schrieb:
>> Ich dachte aber eigentlich daß der Hanrun den Kondensator
>> schon integriert hat, Du den Gehäuseschirm also gar nicht selbst
>> verbinden musst.
> Du hast recht. Der C ist bereits im HR911105A integriert.
> Ich habe den C entfernt und mit 0Ohm ersetzt.

auch wenn es mit Deinem fehlenden 100MBit nix zu tun hat: 0 ohm für C20 
ist noch falscher.

Denn jetzt hast Du eine direkte Verbindung von Kabelschirm auf Deine 
Masse. Das gibt bei 100m Ethernet-Kabellänge eine hübsche Masseschleife.

Lass C20 komplett weg und die Verbindung offen. Der HR911105A hat den 
Kondensator zwischen dem Schirm und seinem Pin 8 integriert. Alles was 
Du tun musst, ist Pin 8 mit Deiner Masse verbinden. Das hast Du. Mehr 
ist nicht notwendig und eher schädlich.

von jo mei (Gast)


Lesenswert?

Thomas W. schrieb:
> Die Last-Cs am Quarz habe ich auf 22pf verringert.

Versuche auch mal 10-15 pF.

Thomas W. schrieb:
> Ein sauberer Takt sieht allerdings anders aus.

Abgesehen von den "Wackeleien" die vermutlich dein Oszilloskop
durch Rauschen hinzufügt gibt es an dem Signal eigentlich nichts
auszusetzen. Ein signifikanter Jitter (der dem LAN-Treiben ab-
träglich wäre) ist nicht zu erkennen.

jo mei schrieb:
> zeig doch mal bitte die 50 MHz Clockleitung die zum
> Controller führt.

von Zero V. (Firma: Freelancer) (gnd)


Lesenswert?

Thomas W. schrieb:
> Auf dem Oszi sehe ich nichts.
> Muss ich gegen GND messen oder zwischen + und - ?

Ein Tastkopf zw. GND und + und ein Tastkopf zw. GND und -.
Dann im Oszi subtrahieren und dann mit dem IEEE802.3 Standard 
vergleichen oder hier posten.

von Zero V. (Firma: Freelancer) (gnd)


Lesenswert?

Übrigens ich hatte mal das Problem, einen falschen Transformer 
eingesetzt zu haben. Prüfe das bitte. Da kann es kleine Unterschiede 
geben die den Unterschied ausmachen.

von Thomas W. (thomas100)


Lesenswert?

Hallo zusammen,

ich wollte mal eine kurze Rückmeldung geben, wie der aktuelle Stand ist:
Mit einfachen Worten: Es geht!

Woran lags?
Das ist eine gute Frage. Ich habe alle eure Tipps umgesetzt, aber nicht 
wirklich einen Erfolg gehabt.

Also alles neu, Platine bestellt und alles neu gelötet. Und siehe da, 
der erste Versuch hat geklappt.

Also entweder hatte einer der ICs einen Knacks oder die Umbauten haben 
nicht so geklappt, wie es hätte sein sollen.

Auf jeden Fall funktioniert das ganze jetzt, wie es soll.

Vielen Dank für eure tolle und schnelle Hilfe.

VG Thomas

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.