Schmitt-Trigger nach 50MHz Quarz-Oszillator (LAN8720 Eth-Phy)

OP (Firma: OpenKNX) #7702659
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?

#7702680
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!

OP (Firma: OpenKNX) #7702753
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?

#7702775
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

OP (Firma: OpenKNX) #7702782
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.

OP (Firma: OpenKNX) #7702793
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?

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

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

OP (Firma: OpenKNX) #7703096
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.

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