Forum: Mikrocontroller und Digitale Elektronik STM32F407 + DP83848 PHY + MCO1 Clock


von Artata (Gast)


Lesenswert?

Ich habe ein Board designed, mit dem STM32F407 und einer DP83848 Phy. 
Beide ICs sind via RMII miteinander verbunden. Am PHY Chip selbst ist 
kein Oszillator dran, weil ich MCO vom uC verwenden wollte (hatte eine 
ähnliche Geschichte mit einem STM32F107). Beim STM32F107 konnte man MCO 
mit 50 MHz folgendermaßen laufen lassen:
1
GPIO_ETH_MediaInterfaceConfig(GPIO_ETH_MediaInterface_RMII);
2
3
  /* Set PLL3 clock output to 50MHz (25MHz/5)) */
4
  RCC_PLL3Config(RCC_PLL3Mul_10);
5
  /* Enable PLL3 */
6
  RCC_PLL3Cmd(ENABLE);
7
  /* Wait till PLL3 is ready */
8
  while (RCC_GetFlagStatus(RCC_FLAG_PLL3RDY) == RESET)
9
  {}
10
  /* Get PLL3 clock on PA8 pin (MCO) */
11
  RCC_MCOConfig(RCC_MCO_PLL3CLK);

Beim STM32F407 habe ich folgendes Probiert:
1
  RCC_PLLConfig(RCC_PLLSource_HSE, 25,300,2,7);
2
  // Enable PLL
3
  RCC_PLLCmd(ENABLE);
4
  // Wait till PLL is ready
5
  while (RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET) {}
6
7
  // HSE clock selected to output on MCO pin(PA8)
8
  //RCC_MCO1Config(RCC_MCO1Source_HSE, 1);
9
  RCC_MCO1Config(RCC_MCO1Source_PLLCLK, RCC_MCO1Div_3);

Sysclock kommt vom einem 25MHz HSE Oszi und ist auf 150MHz eingestellt.
Weiß einer woran das liegt? Bzw. jemand schon probiert 50MHz am MCO1 
rauszubekommen....

von Artata (Gast)


Lesenswert?

Ach ja, MCO2 ist leider bereits durch USART1 belegt, dass ich da keine 
50MHz abzwacken kann....

von Artata (Gast)


Lesenswert?

Also, ich habe jetzt mit der Zeile:
RCC_MCO1Config(RCC_MCO1Source_PLLCLK, RCC_MCO1Div_3);
50MHz am MCO1 raus bekommen.

Habe festgestellt, dass meine Flankeneinstellung nicht akzeptiert wurde:
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz;
Ich dachte, es ist besser "rundere" Flanken zu haben. Mit 
GPIO_Speed_100MHz ist jetzt ein Signal am Ausgang zu sehen. Jedoch ist 
es kein Sinus, sondern eher ein Rechteck mit runden Flanken und hat eine 
Ausgangsspannung von 1.3-1.55V. Die PHY scheint mit dem Signal auch 
nicht klar zu kommen. Wurde schon jemand mit so einem Fall konfrontiert?

Grüße

von Frank K. (fchk)


Lesenswert?

Du bist nicht der erste, der das versucht, und Du wirst nicht der letzte 
sein. Die Signalqualität des Ausgangssignals reicht nicht nicht aus, wie 
hier

Beitrag "Ethernet PHY für STM32F4Discovery"

schlussendlich festgestellt wurde. Es wird Dir nichts anderes übrig 
bleiben, als einen 50 MHz Oszillator einzusetzen.

fchk

von Artata (Gast)


Lesenswert?

Naja, da geht es doch um Discovery, da sind 8MHz extern dran. Ich habe 
ja 25Mhz und Systemtakt ist auf 150MHz eingestellt. Im Datenblatt steht 
folgendes:
The selected clock to output onto MCO must not exceed 100 MHz (the 
maximum I/O speed).
Da sollten doch die 50Mhz drin sein. Die Leitung auf dem Board ist recht 
kurz und da messe ich am Pin sogar einen zu geringen Pegel. Beim 
stm32F107 habe ich damals die PHY auch durch MCO betrieben, weiß zwar 
nicht wie die Pegel waren, aber die PHY lief auf jeden Fall.

von Artata (Gast)


Lesenswert?

So für die nachfolgend Geplagten mit dem gleichen Problem. MCO läuft nur 
sicher wenn man 25MHZ HSE benutz und das Signal im MII Mode 
durchschleift. Im RMII muss man auf MCO verzichten und tatsächlich einen 
externen 50MHz Quarz verwenden, wenn die PHY selbst keine PLL hat und 
mit 25MHz nicht klar kommt. Dieses Signal nicht vergessen an PA1 der MCU 
durchzuschleifen.
MfG

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.