STM32F4x7, Ethernet, DP83848I

#7792106
Lesenswert?

Servus,

folgende Frage: ich würde gerne meinen PHY(DP83848) mit dem MAC/uC betreiben. Ich nutze RMII und mein PHY stellt mir meine 50Mhz. Jetzt möchte ich die 50MHZ doch als Input an PA1 (ETH_RMII_REF_CLK oder so) haben. Oder sehe ich hier etwas falsch? Wie kann ich in der Cube IDE meinen PIN als Input labeln und einen zusätzlichen Takt in der Clock Configuartion hinzufügen?

Hier sind grad nur die vorgefertigten clocks (...) ich nutze das STM32F407VG Disco Kit.

Oder wird der PA1/ETH_RMII_REF_CLK sobald ich mein ETH eibinde als INPUT gelabeld? Steht aber wenn nirgends... oder zumindest habe ich das nicht gefunden. Wie würde ich dann meinem MAC sagen, dass ich einen 50Mhz Clock nutzen möchte?

Bin neu in dem Bereich :-) Hoffe mir kann jemand von Euch helfen! Danke im Voraus! :D

#7792114
Lesenswert?

Hendrik K. schrieb:

Oder wird der PA1/ETH_RMII_REF_CLK sobald ich mein ETH eibinde als INPUT gelabeld? Steht aber wenn nirgends... oder zumindest habe ich das nicht gefunden. Wie würde ich dann meinem MAC sagen, dass ich einen 50Mhz Clock nutzen möchte?

Zwei Schritte:

  1. Pin PA1 auf die Alternate Function 11 stellen - damit hat er automatisch entweder die Funktion ETH_MII_RX_CLK oder ETH_RMII_REF_CLK. Diese Funktion ist immer ein Eingang.

  2. Den Ethernet MAC per MII_RMII_SEL Bit auf RMII stellen. RMII erfordert grundsätzlich einen 50 MHz Takt, MII 25 MHz bei 100 MBit/s oder 2.5 MHz bei 10 MBit/s. Siehe RM0090, 33.4.4 MII/RMII selection

fchk

#7792119
Lesenswert?

Wenn du in CubeMX unter Connectivity "ETH" auswählst/aktivierst bekommst du einen Satz von GPIOs konfiguriert wo der RefClock dabei ist. Der Codegenerator erzeugt dir einen Satz von Pins zu Initialisierung für deinen PHY.

Der Code steht dann in <ethernetif.c> Damit deine Frage(n) beantwortet?

1
void HAL_ETH_MspInit(ETH_HandleTypeDef* ethHandle)
2
{
3
  GPIO_InitTypeDef GPIO_InitStruct = {0};
4
  if(ethHandle->Instance==ETH)
5
  {
6
  /* USER CODE BEGIN ETH_MspInit 0 */
7

8
  /* USER CODE END ETH_MspInit 0 */
9
    /* Enable Peripheral clock */
10
    __HAL_RCC_ETH_CLK_ENABLE();
11
  
12
    __HAL_RCC_GPIOC_CLK_ENABLE();
13
    __HAL_RCC_GPIOA_CLK_ENABLE();
14
    __HAL_RCC_GPIOB_CLK_ENABLE();
15
    /**ETH GPIO Configuration    
16
    PC1     ------> ETH_MDC
17
    PA1     ------> ETH_REF_CLK
18
    PA2     ------> ETH_MDIO
19
    PA7     ------> ETH_CRS_DV
20
    PC4     ------> ETH_RXD0
21
    PC5     ------> ETH_RXD1
22
    PB11     ------> ETH_TX_EN
23
    PB12     ------> ETH_TXD0
24
    PB13     ------> ETH_TXD1 
25
    */
26
    GPIO_InitStruct.Pin = GPIO_PIN_1|GPIO_PIN_4|GPIO_PIN_5;
27
    GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
28
    GPIO_InitStruct.Pull = GPIO_NOPULL;
29
    GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH;
30
    GPIO_InitStruct.Alternate = GPIO_AF11_ETH;
31
    HAL_GPIO_Init(GPIOC, &GPIO_InitStruct);
32

33
    GPIO_InitStruct.Pin = GPIO_PIN_1|GPIO_PIN_2|GPIO_PIN_7;
34
    GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
35
    GPIO_InitStruct.Pull = GPIO_NOPULL;
36
    GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH;
37
    GPIO_InitStruct.Alternate = GPIO_AF11_ETH;
38
    HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
39

40
    GPIO_InitStruct.Pin = GPIO_PIN_11|GPIO_PIN_12|GPIO_PIN_13;
41
    GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
42
    GPIO_InitStruct.Pull = GPIO_NOPULL;
43
    GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH;
44
    GPIO_InitStruct.Alternate = GPIO_AF11_ETH;
45
    HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
46

47
  /* USER CODE BEGIN ETH_MspInit 1 */
48

49
  /* USER CODE END ETH_MspInit 1 */
50
  }
51
}
#7792139
Lesenswert?

Hendrik K. schrieb:

Ich nutze RMII und mein PHY stellt mir meine 50Mhz.

Nein! Dein PHY erzeugt keinen Referenzclock! Du brauchst einen externen Oszillator. Empfehlung: nimm nicht die Clock-Erzeugung deines F407 sondern spendiere einen eigenen Oszillator fürs Ethernet. Sparsame Gesellen verwenden 50MHz generiert aus einer PLL im F407, das ist nicht günstig und fehleranfällig wegen hohem Jitter.

#7792187
Lesenswert?

Frank K. schrieb:

Hendrik K. schrieb:

Oder wird der PA1/ETH_RMII_REF_CLK sobald ich mein ETH eibinde als INPUT gelabeld? Steht aber wenn nirgends... oder zumindest habe ich das nicht gefunden. Wie würde ich dann meinem MAC sagen, dass ich einen 50Mhz Clock nutzen möchte?

Zwei Schritte:

  1. Pin PA1 auf die Alternate Function 11 stellen - damit hat er automatisch entweder die Funktion ETH_MII_RX_CLK oder ETH_RMII_REF_CLK. Diese Funktion ist immer ein Eingang.

  2. Den Ethernet MAC per MII_RMII_SEL Bit auf RMII stellen. RMII erfordert grundsätzlich einen 50 MHz Takt, MII 25 MHz bei 100 MBit/s oder 2.5 MHz bei 10 MBit/s. Siehe RM0090, 33.4.4 MII/RMII selection

fchk

okay, der PHY befindet sich im RMII Modus - logisch. PIN PA1 ist als ETH_RMII_REF_CLK gelabeld als "Alternate Function". Alternate Function 11 bedeutet ja, dass der GPIO als ETH_RMII_REF_CLk genutzt wird, oder muss ich hier noch etwas in den Registern ändern?

Der PIN ist also ein Input, oder?

Mein PHY und MAC sollen (müssen) doch synchron laufen, d.h. beide brauchen doch auch die gleiche Quelle für die Referenzclock, oder nicht (also meine 50Mhz)?

Wie konfiguriere ich das in der Clock Config?

Grüße, Hendrik

#7792192
Lesenswert?

Hendrik K. schrieb:

okay, der PHY befindet sich im RMII Modus - logisch. PIN PA1 ist als ETH_RMII_REF_CLK gelabeld als "Alternate Function". Alternate Function 11 bedeutet ja, dass der GPIO als ETH_RMII_REF_CLk genutzt wird, oder muss ich hier noch etwas in den Registern ändern?

Der PIN ist also ein Input, oder?

Steht in der Source die ich gepostet habe.

Hendrik K. schrieb:

Wie konfiguriere ich das in der Clock Config?

Der RefClock ist Input ("alternate") und geht direkt zu MAC. Da braucht man nichts weiter konfigurieren.

Der Controller selbst läuft mit dem Takt was du in CubeMx konfiguriert hast.

Machst du jetzt CubeMx oder gehst du zu Fuss? Hardcore bare-metal low-level Computing? ääähhh Programming ....

#7792236
Lesenswert?

ja, ich weiß. Aber genau daher ja meine Frage. Die 50 Mhz bekommt der PHY und der STM32, die 50Mhz liegen am MAC/STM32 nur am PA1 Pin an, oder?

Auf dem Datenblatt sieht es ja so aus, als würden die 50Mhz einmal durch ETH_RMII_REF_CLK kommen, aber auch durch einen anderen "PIN" um den HCLK mit einem PLL zu "gestalten".

Wie konfiguriere ich das nun in der Clock Config die 50MHz, ich muss das ja irgendwie definieren, oder wird direkt davon ausgangen das am PA1 Pin im RMII Mode die 50MHz anliegen und ich muss nicht mehr machen?

Der STM würde doch immernoch mit den Frequenzen laufen, die ich im CubeMX konfiguiert habe. Beim STM32F407VG Disco Board also 8MHz HSE oder 32.768KHz LSE.

Ich möchte hier aber doch meine 50Mhz anliegen haben. Der STM32 soll diese ja auch als Takt "benutzen".

Also quasi statt dem HSE mit 8MHz meine 50MHz, oder nicht?

Sorry für so etwaige "dumme" Fragen. :)

#7792246
Lesenswert?

Hendrik K. schrieb:

Wie konfiguriere ich das nun in der Clock Config die 50MHz, ich muss das ja irgendwie definieren, oder wird direkt davon ausgangen das am PA1 Pin im RMII Mode die 50MHz anliegen und ich muss nicht mehr machen?

Liest du meine Beiträge, oder ist dir das egal?

Wastl schrieb:

Der RefClock ist Input ("alternate") und geht direkt zu MAC. Da braucht man nichts weiter konfigurieren.

#7792252
Lesenswert?

Hendrik K. schrieb:

Der STM würde doch immernoch mit den Frequenzen laufen, die ich im CubeMX konfiguiert habe. Beim STM32F407VG Disco Board also 8MHz HSE oder 32.768KHz LSE.

Ja.

Hendrik K. schrieb:

Ich möchte hier aber doch meine 50Mhz anliegen haben. Der STM32 soll diese ja auch als Takt "benutzen".

Das geht nicht, und wozu soll das gut sein?

Hendrik K. schrieb:

Also quasi statt dem HSE mit 8MHz meine 50MHz, oder nicht?

Nein. Liest du meine Beiträge, oder ist dir das egal?

Wastl schrieb:

Der Controller selbst läuft mit dem Takt was du in CubeMx konfiguriert hast.

Dazu dient die Clock-Konfiguration von CubeMX. Die 8 MHz sind nur die Ausgangsbasis für die PLLs um auf die hohen Frequenzen (üblicherweise 168 MHz) zu kommen.

#7792317
Lesenswert?

Hendrik K. schrieb:

okay, der PHY befindet sich im RMII Modus - logisch. PIN PA1 ist als ETH_RMII_REF_CLK gelabeld als "Alternate Function". Alternate Function 11 bedeutet ja, dass der GPIO als ETH_RMII_REF_CLk genutzt wird, oder muss ich hier noch etwas in den Registern ändern?

nein, das reicht.

Der PIN ist also ein Input, oder?

ja, und das unabhängig von der GPIO Config.

Mein PHY und MAC sollen (müssen) doch synchron laufen, d.h. beide brauchen doch auch die gleiche Quelle für die Referenzclock, oder nicht (also meine 50Mhz)?

Wie konfiguriere ich das in der Clock Config?

gar nicht, das ist fest verdrahtet. Bei RMII braucht der MAC immer einen Takt an ETH_RMII_REF_CLK, und das sind auch immer 50 MHz.

fchk

#7792532
Lesenswert?

Ich lese alle Beiträge. Hab es nur anders verstanden.

Also muss ich am Ende in der Clock Configuartion garnichts mehr zusätzlich konfiguriueren, wenn ETH im RMII Mode aktiviert ist, oder?

PTP muss nicht den 50Mhz entsprechen, oder? Sollte rechnerisch auch garnicht gehen mit meinen Clocks die ich habe (glaube ich).

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