cancel
Showing results for 
Search instead for 
Did you mean: 

How can i change the interface RGMII to RMII using CubeMX?

SPark.15
Associate II

Hello Guys

Like the subject, I want change the interface RGMII to RMII using CubeMX.

(RealTek-RTL8211EG-VB-CG => Microchip - LAN8720AI-CP)

Based on STM32MP157C-EV1 Code in CubeMX, I changed the Ethernet option from RGMII to RMII as shown in the picture below.

0693W00000D03NZQAZ.png

And after Code Generating, I applied it to my addon(mx) directory and built it.

(Changed to the code generated by CubeMX.)

   eth1_pins_mx: eth1_mx-0 {
        pins1 {
            pinmux = <STM32_PINMUX('A', 1, AF11)>, /* ETH1_REF_CLK */
                     <STM32_PINMUX('C', 1, AF11)>, /* ETH1_MDC */
                     <STM32_PINMUX('G', 13, AF11)>, /* ETH1_TXD0 */
                     <STM32_PINMUX('G', 14, AF11)>; /* ETH1_TXD1 */
            bias-disable;
            drive-push-pull;
            slew-rate = <1>;
        };
        pins2 {
            pinmux = <STM32_PINMUX('A', 2, AF11)>; /* ETH1_MDIO */
            bias-disable;
            drive-push-pull;
            slew-rate = <0>;
        };
        pins3 {
            pinmux = <STM32_PINMUX('A', 7, AF11)>, /* ETH1_CRS_DV */
                     <STM32_PINMUX('C', 4, AF11)>, /* ETH1_RXD0 */
                     <STM32_PINMUX('C', 5, AF11)>; /* ETH1_RXD1 */
            bias-disable;
        };
        pins4 {
            pinmux = <STM32_PINMUX('B', 11, AF11)>; /* ETH1_TX_EN */
        };
    };
 
    eth1_sleep_pins_mx: eth1_sleep_mx-0 {
        pins {
            pinmux = <STM32_PINMUX('A', 1, ANALOG)>, /* ETH1_REF_CLK */
                     <STM32_PINMUX('A', 2, ANALOG)>, /* ETH1_MDIO */
                     <STM32_PINMUX('A', 7, ANALOG)>, /* ETH1_CRS_DV */
                     <STM32_PINMUX('B', 11, ANALOG)>, /* ETH1_TX_EN */
                     <STM32_PINMUX('C', 1, ANALOG)>, /* ETH1_MDC */
                     <STM32_PINMUX('C', 4, ANALOG)>, /* ETH1_RXD0 */
                     <STM32_PINMUX('C', 5, ANALOG)>, /* ETH1_RXD1 */
                     <STM32_PINMUX('G', 13, ANALOG)>, /* ETH1_TXD0 */
                     <STM32_PINMUX('G', 14, ANALOG)>; /* ETH1_TXD1 */
        };
    };
 
 
&ethernet0{
    pinctrl-names = "default", "sleep";
    pinctrl-0 = <&eth1_pins_mx>;
    pinctrl-1 = <&eth1_sleep_pins_mx>;
    status = "okay";
 
    /* USER CODE BEGIN ethernet0 */
    phy-mode = "rgmii-id";
    /*phy-mode = "rmii";*/
    max-speed = <1000>;
    phy-handle = <&phy0>;
 
    mdio0{
        #address-cells = <1>; 
        #size-cells = <0>; 
        compatible = "snps,dwmac-mdio";
 
        phy0:ethernet-phy@0{
            reg = <0>; 
        };
    };   
    /* USER CODE END ethernet0 */
};

However, it seems that the ethernet chip is not recognized as shown in the log below.

~# dmesg | grep eth
[    0.000000] psci: probing for conduit method from DT.
[    1.236408] usbcore: registered new interface driver cdc_ether
[    2.756520] stm32-dwmac 5800a000.ethernet: PTP uses main clock
[    2.760976] stm32-dwmac 5800a000.ethernet: no reset control found
[    2.767028] stm32-dwmac 5800a000.ethernet: No phy clock provided...
[    2.773905] stm32-dwmac 5800a000.ethernet: User ID: 0x40, Synopsys ID: 0x42
[    2.780299] stm32-dwmac 5800a000.ethernet:   DWMAC4/5
[    2.785190] stm32-dwmac 5800a000.ethernet: DMA HW capability register supported
[    2.792527] stm32-dwmac 5800a000.ethernet: RX Checksum Offload Engine supported
[    2.799835] stm32-dwmac 5800a000.ethernet: TX Checksum insertion supported
[    2.806696] stm32-dwmac 5800a000.ethernet: Wake-Up On Lan supported
[    2.812984] stm32-dwmac 5800a000.ethernet: TSO supported
[    2.818278] stm32-dwmac 5800a000.ethernet: Enable RX Mitigation via HW Watchdog Timer
[    2.826149] stm32-dwmac 5800a000.ethernet: device MAC address be:10:95:ec:a0:c7
[    2.833449] stm32-dwmac 5800a000.ethernet: TSO feature enabled
[   10.455282] stm32-dwmac 5800a000.ethernet eth0: no phy at addr -1
[   10.475335] stm32-dwmac 5800a000.ethernet eth0: stmmac_open: Cannot attach to PHY (error: -19)

I have no experience changing ethernet ICs so I need your help.

​If necessary, I can attach the ethernet circuit diagram of my board.

Thanks​

This discussion is locked. Please start a new topic to ask your question.
1 ACCEPTED SOLUTION

Accepted Solutions
PatrickF
ST Employee

Hi,

please have a look to AN5031 and https://wiki.st.com/stm32mpu/wiki/Ethernet_device_tree_configuration#DT_configuration_examples_at_board_level

Regards.

In order to give better visibility on the answered topics, please click on 'Accept as Solution' on the reply which solved your issue or answered your question.
NEW ! Sidekick STM32 AI agent, see here

View solution in original post

4 REPLIES 4
PatrickF
ST Employee

Hi,

please have a look to AN5031 and https://wiki.st.com/stm32mpu/wiki/Ethernet_device_tree_configuration#DT_configuration_examples_at_board_level

Regards.

In order to give better visibility on the answered topics, please click on 'Accept as Solution' on the reply which solved your issue or answered your question.
NEW ! Sidekick STM32 AI agent, see here

Thank you for your answer.

​In my case I think it's 3.3.1 from your link.

So I applied the line below to the dts file in my addons/mx/PROJECT/u-boot and kernel directory.

    ethernet0: ethernet@5800a000 {
        compatible = "st,stm32mp1-dwmac", "snps,dwmac-4.20a";
        reg = <0x5800a000 0x2000>;
        reg-names = "stmmaceth";
        interrupts-extended = <&intc GIC_SPI 61 IRQ_TYPE_LEVEL_HIGH>,
                              <&intc GIC_SPI 62 IRQ_TYPE_LEVEL_HIGH>,
                              <&exti 70 1>;
        interrupt-names = "macirq",
                          "eth_wake_irq",
                          "stm32_pwr_wakeup";
        clock-names = "stmmaceth",
                      "mac-clk-tx",
                      "mac-clk-rx",
                      "ethstp";
        clock = <&rcc ETHMAC>,
                <&rcc ETHTX>,
                <&rcc ETHRX>,
                <&rcc ETHSTP>;
        st,syscon = <&syscfg 0x4>;
        snps,mixed-burst;
        snps,pbl = <2>; 
        snps,en-tx-lpi-clockgating;
        snps,axi-config = <&stmmac_axi_config_0>;
        snps,tso;
        power-domains = <&pd_core>;
        status = "disabled";
    }; 

After that, an error occurs when bitbake. Do I need to apply it to a file other than the one in that location?

Hi,

I'm more HW oriented, so I cannot help much on SW aspects.

Have you carefully followed the steps in https://wiki.st.com/stm32mpu/wiki/How_to_compile_the_device_tree_with_the_Developer_Package ?

This could also help:

https://wiki.st.com/stm32mpu/wiki/How_to_create_your_board_device_tree

https://wiki.st.com/stm32mpu/wiki/How_to_configure_U-Boot_for_your_board

Regards

In order to give better visibility on the answered topics, please click on 'Accept as Solution' on the reply which solved your issue or answered your question.
NEW ! Sidekick STM32 AI agent, see here

HI !

I solved that problem.

It was a HW problem, not a BSP problem.

But your answer helped me find my HW problem.

Thank you very much!