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
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
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 | }
|
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.
ich meine damit, dass auf dem PCB wo der PHY sitzt auch ein cmos oszi sitzt der mir meinen Takt generiert :D. Danke für die Posts sitze grad noch im Zug! Sobald ich daheim bin probiere ich das mal aus! Danke!
Hendrik K. schrieb: > ich meine damit, dass auf dem PCB wo der PHY sitzt auch ein cmos oszi > sitzt der mir meinen Takt generiert Tja, wenn man sich nich klar ausdrückt dann kommt es zu solchen Misverständnissen. Die Version mit dem PHY-Modul mit Oszillator ist natürlich die optimale für den RefClock.
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
Hendrik K. schrieb: > 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)? Steht alles im Datenblatt.
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 ....
:
Bearbeitet durch User
Wastl schrieb: > Der RefClock ist Input ("alternate") und geht direkt zu MAC. > Da braucht man nichts weiter konfigurieren. Das ist allerdings etwas verwirrend, offensichtlich überstimmt "alternate" die anderen GPIO-Attribute (Input). Jedenfalls funktioniert das so, ich habe das am F407 explizit schon gemacht.
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. :)
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.
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.
Vielleicht wäre es auch angebracht auf meine Gegenfragen mal zu antworten. Vielleicht erklärst du dabei auch was genau du nicht verstehst. Wastl schrieb: > Liest du meine Beiträge, oder ist dir das egal? Wastl schrieb: > und wozu soll das gut sein? Wastl schrieb: > Nein. Liest du meine Beiträge, oder ist dir das egal?
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
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).
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.