Forum: Analoge Elektronik und Schaltungstechnik Schmitt-Trigger nach 50MHz Quarz-Oszillator (LAN8720 Eth-Phy)


von Ing-Dom (Firma: OpenKNX) (sirsydom)



Lesenswert?

Hallo zusammen,

ich versuche mich aktuell an einem Gerät mit ESP32 mit Ethernet über die 
integ. EMAC und LAN8720.

Testaufbau mit einem "Waveshare LAN8720" Klon-Board läuft im Grundsatz 
und nun will ich die Schaltung finalisieren, aber ordentlich.

Taktquelle für EMAC und PHY soll ein 50MHz Quarz-Oscillator werden. Wie 
in vielen Schaltungen mit ESP32 und LAN8720 zu sehen.

Im LAN8720 Reference-Design ist da jedoch noch ein Schmitt-Trigger nach 
dem Oscillator. Brauchts den? Auf meinem Board ist er nicht drauf und 
bisher in keiner Schaltung mit LAN8720 die ich so gefunden habe.
https://ww1.microchip.com/downloads/en/DeviceDoc/EVB8720%20Evaluation%20Board%20Schematic.pdf

Dazu kommt das dämliche beim ESP32 mit EMAC, dass man sich den 
REFCLK-Eingang mit dem Bootloader-Pin teilt. Sprich, im Startup muss die 
Taktleitung  definiert HIGH (Normalbetrieb) oder LOW (Bootloader) sein.
Der interne Pullup des Eingang der normalerweise dafür sorgt dass immer 
im Normalbetrieb gestartet wird reicht aber wohl zumindest bei meinem 
Testsetup nicht aus, damit das stabil auf 1 bleibt - Sprich nach dem 
Reset spiele ich aktuell Lotto ob der BL oder das Programm geladen wird 
:)

Dafür wollte ich eigentlich den EN-EIngang des Oscillator nutzen. Was 
macht eigentlich der Out von so einem Oscillator wenn er disabled ist?
wird das Signal auf gnd gezogen, auf high oder ist das hochohmig?

: Bearbeitet durch User
von Helmut -. (dc3yc)


Lesenswert?

Ing-Dom schrieb:
> Dafür wollte ich eigentlich den EN-EIngang des Oscillator nutzen. Was
> macht eigentlich der Out von so einem Oscillator wenn er disabled ist?
> wird das Signal auf gnd gezogen, auf high oder ist das hochohmig?

Das steht sicher im Datenblatt des Oszillators, den wir leider nicht 
kennen.

p.s. nachdem gerade ein Glaskugelpolierer hier sein Unwesen treibt, sind 
die alle dort zur Nachbearbeitung. Also Pech gehabt!

von Gustl B. (gustl_b)


Lesenswert?

Ing-Dom schrieb:
> Im LAN8720 Reference-Design ist da jedoch noch ein Schmitt-Trigger nach
> dem Oscillator. Brauchts den?

Je nach Oszillator ja oder nein.

Der Schmitt-Trigger macht einen sauberen Rechteck wenn dein Oszillator 
einen Sinus ausgibt.
Und der macht einen Rechteck mit VDDIO auch wenn der Oszillator einen 
Rechteck mit 3.3 macht. Quasi auch Pegelwandler.

von Motopick (motopick)


Lesenswert?

Du koenntest 1 LVC NAND nehmen. Die haben Schmitt-Trigger an den
Eingaengen. Legst du den noch freien Eingang auf L, hast du ein
schoenes H am Ausgang...

von Ing-Dom (Firma: OpenKNX) (sirsydom)


Lesenswert?

Helmut -. schrieb:
> p.s. nachdem gerade ein Glaskugelpolierer hier sein Unwesen treibt, sind
> die alle dort zur Nachbearbeitung. Also Pech gehabt!

Leider nicht, da hab ich natürlich zuerst nachgesehen.
https://wmsc.lcsc.com/wmsc/upload/file/pdf/v2/lcsc/2210211600_YXC-OT2EL4C4JI-111OLP-50M_C5203552.pdf

Den genauen Typ auf der Referenz-Schaltung ist leider nicht angegeben..

In den Datenblättern renommierterer Hersteller wird aber was 
angegeben...
hier zB EN = 0 => OUT = HI Z
https://www.mouser.de/datasheet/2/3/ASEDV-1826261.pdf

Gibt es hier kein "übliches" Verhalten?



Gustl B. schrieb:
> Ing-Dom schrieb:
>> Im LAN8720 Reference-Design ist da jedoch noch ein Schmitt-Trigger nach
>> dem Oscillator. Brauchts den?
>
> Je nach Oszillator ja oder nein.
>
> Der Schmitt-Trigger macht einen sauberen Rechteck wenn dein Oszillator
> einen Sinus ausgibt.
> Und der macht einen Rechteck mit VDDIO auch wenn der Oszillator einen
> Rechteck mit 3.3 macht. Quasi auch Pegelwandler.

Sollte so ein Quarz-Oscillator nicht immer ein Rechteck ausgeben?
Auf welches Datum im Datenblatt sollte ich hier achten?

von Frank K. (fchk)


Lesenswert?

Ing-Dom schrieb:

> Sollte so ein Quarz-Oscillator nicht immer ein Rechteck ausgeben?
Nö. Beispiel:
https://www.crystek.com/specification/vcxo/CVSS-945.pdf
"True SineWave"

> Auf welches Datum im Datenblatt sollte ich hier achten?

Wenn da CMOS/HCMOS/LVCMOS steht, has Du das passende. z.B.
https://www.we-online.com/components/products/datasheet/831019987.pdf

fchk

von Obelix X. (obelix)


Lesenswert?

Der ESP32 kann die 50MHz für den LAN8720 bereitstellen, so kannst du dir 
den Quarz(oszillator) sparen.

https://sautter.com/blog/ethernet-on-esp32-using-lan8720/

Ich verwenden in meinem Projekt den GPIO17 um den Takt auszugeben.

* ETH_CLOCK_GPIO0_IN   - default: external clock from crystal oscillator
* ETH_CLOCK_GPIO0_OUT  - 50MHz clock from internal APLL output on GPIO0 
- possibly an inverter is needed for LAN8720
* ETH_CLOCK_GPIO16_OUT - 50MHz clock from internal APLL output on GPIO16 
- possibly an inverter is needed for LAN8720
* ETH_CLOCK_GPIO17_OUT - 50MHz clock from internal APLL inverted output 
on GPIO17 - tested with LAN8720

https://github.com/flusflas/esp32-ethernet

: Bearbeitet durch User
von Ing-Dom (Firma: OpenKNX) (sirsydom)


Lesenswert?

Danke Frank! Wieder was gelernt.

Obelix X. schrieb:
> Der ESP32 kann die 50MHz für den LAN8720 bereitstellen, so kannst du dir
> den Quarz(oszillator) sparen.

Im Grundsatz, ja (beschäftige mich nun geraume Zeit schon damit).
Dafür ist aber nur GPIO17 geeignet, da GPIO16 und 0 zwar auch gehen, 
aber falsche Phasenlage haben und insbesondere auf GPIO0 noch andere 
Probleme auftreten (Phasenlage könnte man ja noch hinbekommen).
https://docs.espressif.com/projects/esp-idf/en/stable/esp32/api-reference/kconfig.html#config-eth-rmii-clk-out-gpio
Bei dem von mir eingesetzt PICO-V3-02 ist aber GPIO16/17 nicht 
verwendbar - insofern bleibt mir leider nur GPIO0, und weil der OUT 
nicht funktioniert, als Input.

: Bearbeitet durch User
von Obelix X. (obelix)


Lesenswert?

Dann den Enable-Eingang des Quarzoszi nutzen. Also beim Start dafür 
sorgen, dass der Ausgang des QO High-Impedance ist und erst später 
enablen.

Ing-Dom schrieb:
> Im LAN8720 Reference-Design ist da jedoch noch ein Schmitt-Trigger nach
> dem Oscillator.

Würde ich weg lassen, habe ich auch noch nicht mit gesehen.

: Bearbeitet durch User
von Ing-Dom (Firma: OpenKNX) (sirsydom)



Lesenswert?

Obelix X. schrieb:
> Dann den Enable-Eingang des Quarzoszi nutzen.

Genau das ist der Plan, nach Frank Sautter sozusagen.
https://sautter.com/blog/ethernet-on-esp32-using-lan8720/
Siehe meinen aktuellen Arbeitsstand.

Frank Sautter schreibt noch, ein 4k7 Pullup an den GPIO-0 (der ja einen 
internen Pullup hat) - ist der aus deiner Sicht nötig?

Für die Qualität der Clock wahrscheinlich auch nicht ideal, oder?

von Obelix X. (obelix)


Lesenswert?

Ing-Dom schrieb:
> ein 4k7 Pullup an den GPIO-0 (der ja einen
> internen Pullup hat) - ist der aus deiner Sicht nötig?

Ich habe jetzt nicht ins Datenblatt geschaut aber die Internen Pullups 
müssen meist erst Softwaremäßig eingeschaltet werden. Beim Augenblick 
des Starts ist das noch nicht der Fall. Also ja, externen Pullup.

Ing-Dom schrieb:
> Für die Qualität der Clock wahrscheinlich auch nicht ideal, oder?

Dann nimm 10k oder noch größer. Schau mal ins Datenblatt von deinem 
Quarzoszi, wie stark der Ausgang belastet werden darf. Sollte meiner 
Meinung nach also nicht stören.

von Dietrich L. (dietrichl)


Lesenswert?

Ing-Dom schrieb:
> Leider nicht, da hab ich natürlich zuerst nachgesehen.
> 
https://wmsc.lcsc.com/wmsc/upload/file/pdf/v2/lcsc/2210211600_YXC-OT2EL4C4JI-111OLP-50M_C5203552.pdf

Dort steht an Pin 1 "Tri-state"

> In den Datenblättern renommierterer Hersteller wird aber was
> angegeben...
> hier zB EN = 0 => OUT = HI Z

Auch wenn das im Datenblatt oben nicht so explizit steht vermute ich 
zusammen mit dem Bild "Test Circuit", dass es dort auch so ist.

von Wastl (hartundweichware)


Lesenswert?

Ing-Dom schrieb:
> Für die Qualität der Clock wahrscheinlich auch nicht ideal, oder?

Die Clock  --->  Uhr
Der Clock  --->  Takt

Welche Qualität der Uhr meinst du denn?

von Ing-Dom (Firma: OpenKNX) (sirsydom)


Lesenswert?

Obelix X. schrieb:
> Ich habe jetzt nicht ins Datenblatt geschaut aber die Internen Pullups
> müssen meist erst Softwaremäßig eingeschaltet werden. Beim Augenblick
> des Starts ist das noch nicht der Fall. Also ja, externen Pullup.
Nene, wenn am IO0 nichts dranhängt bootet der sauber und zuverlässig vom 
Flash - ist auch so im Datenblatt  hinterlegt.
https://www.espressif.com/sites/default/files/documentation/esp32-pico_series_datasheet_en.pdf, 
Seite 18.
Insofern, wenn der Ausgang vom Oszillator als hochohmig ist, sollte man 
hier ohne auskommen. Da ich eh erstmal ein "Devboard" mache, mach ich 
einfach mal einen Footprint drauf und teste


Obelix X. schrieb:
> Dann nimm 10k oder noch größer. Schau mal ins Datenblatt von deinem
> Quarzoszi, wie stark der Ausgang belastet werden darf. Sollte meiner
> Meinung nach also nicht stören.

Stimmt, bei dem YXC steht zwar nichts, aber typischerweise 1-5mA können 
CMOS Oscillatoren in der Bauform so nach meiner Datenblattrecherche.
Insofern sollte ein 10k nicht stören, aber wenn nicht nötig, dann lass 
ich ihn weg.

von Ing-Dom (Firma: OpenKNX) (sirsydom)


Lesenswert?

ich kann mich gleich mal korrigieren. Der Pullup ist nötig, da der XTAL1 
/ CLKIN vom LAN8720 anscheinend so niederohmig ist, dass er gegen den 
internen Pullup des ESP nicht ankommt.

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.