Post Go back to editing

enable adin1110 on cn0575 using nucleo_l4r5zi

Thread Summary

The user encountered issues initializing the ADIN1110 driver on a NUCLEO-L4R5ZI board with an EVAL-CN0575. The solution involved configuring SPI and MDIO settings in prj.conf, including setting CONFIG_SPI_STM32_DMA=y, CONFIG_MDIO=y, CONFIG_ETH_ADIN2111_SPI_CFG0=n, and increasing the system workqueue stack size to 4096. In app.overlay, the SPI and GPIO configurations were adjusted, and spi-oa and spi-oa-protection were commented out. The default EVAL-CN0575 settings (Generic SPI, CRC Disabled) were also considered.
AI Generated Content
Category: Hardware
Product Number: cn0575

Hi, I have a NUCLEO-L4R5ZI board and a eval_cn0575. I want to enable adin1110 driver for cn0575 on nucleo. I connected nucleo pins to cn575 rpi compatible header as follows:

                                       CN0575 rpi header                                         nucleo

SPI2_SCK                     23                                                                   pb13

SPI2_MOSI                   19                                                                   pb15

SPI2_MISO                   21                                                                   pb14

SPI2_CS                       24                                                                   pb12

SPI_INT                        22                                                                   pb11

RESET_N                    13                                                                    pc13

this is prj.conf:

CONFIG_GPIO=y
CONFIG_SPI=y
CONFIG_NETWORKING=y
CONFIG_NET_L2_ETHERNET=y
CONFIG_ETH_DRIVER=y

CONFIG_ETH_ADIN2111=y
CONFIG_MDIO_ADIN2111=y

CONFIG_SPI_STM32_DMA=y

CONFIG_MDIO_INIT_PRIORITY=81
CONFIG_PHY_INIT_PRIORITY=82

# Enable UART
CONFIG_SERIAL=y

# Console configuration
CONFIG_CONSOLE=y
CONFIG_UART_CONSOLE=y
CONFIG_NET_LOG=y
CONFIG_NET_SHELL=y

# Enable IPv4
CONFIG_NET_IPV4=y
CONFIG_NET_IF_MAX_IPV4_COUNT=2

# Enable IPv6 (if needed)
CONFIG_NET_IPV6=n

CONFIG_LOG_BUFFER_SIZE=8192
CONFIG_SHELL_BACKEND_SERIAL_LOG_MESSAGE_QUEUE_SIZE=256


this is app.overlay
/ {
aliases {
adin1110 = &adin1110;
};
};

&spi2 {
pinctrl-0 = <&spi2_sck_pb13 &spi2_miso_pb14 &spi2_mosi_pb15>;
pinctrl-names = "default";
cs-gpios = <&gpiob 12 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)>;
dmas = <&dmamux1 2 13 (STM32_DMA_MEMORY_TO_PERIPH | STM32_DMA_MEM_INC |
STM32_DMA_MEM_8BITS | STM32_DMA_PERIPH_8BITS)>,
<&dmamux1 3 12 (STM32_DMA_PERIPH_TO_MEMORY | STM32_DMA_MEM_INC |
STM32_DMA_MEM_8BITS | STM32_DMA_PERIPH_8BITS)>;
dma-names = "tx", "rx";
status = "okay";

adin1110: adin1110@0 {
compatible = "adi,adin1110";
reg = <0x0>;
spi-max-frequency = <25000000>;
int-gpios = <&gpiob 11 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)>;
reset-gpios = <&gpioc 13p GPIO_ACTIVE_LOW>;
status = "okay";

port1 {
local-mac-address = [ 00 E0 22 FE DA C8 ];
};
mdio {
compatible = "adi,adin2111-mdio";
#address-cells = <1>;
#size-cells = <0>;

ethernet-phy@1 {
reg = <0x1>;
compatible = "adi,adin2111-phy";
};
};
};
};

&iwdg {
status = "okay";
};

&rng {
status = "okay";
};

&dma1 {
status = "okay";
};

&dmamux1 {
status = "okay";
};

this is output
[00:00:00.210,000] <err> eth_adin2111: Failed to communicate over SPI, -5
[00:00:10.410,000] <err> phy_adin: PHY 1 didn't come out of reset, -5
[00:00:10.410,000] <err> eth_adin2111: ADIN adin1110@0 is not ready, can't init port 0 iface


How can I properly use the adin1110 driver for cn0575 using the nucleo board?

Thread Notes

Parents
  • Hi  ,

    Thank you for your inquiry. We’re currently looking into the issue and will get back to you as soon as we have more information.

    Appreciate your patience.

    Julious

    • on Aug 23, 2025 2:50 AM in reply to jnb22 Contains AI Generated Content
      +1

      Hi  ,

      I finally managed to resolve my issues and now I can run adin1110 driver on Nucleo_L4RZI.

      I had to use these in prj.conf file:

      CONFIG_SPI_STM32_DMA=y
      CONFIG_MDIO=y
      CONFIG_MDIO_INIT_PRIORITY=81
      CONFIG_NET_L2_ETHERNET=y
      CONFIG_ETH_DRIVER=y
      CONFIG_NET_L2_ETHERNET=y
      CONFIG_PHY_INIT_PRIORITY=82
      CONFIG_NETWORKING=y
      CONFIG_ETH_ADIN2111=y
      CONFIG_ETH_ADIN2111_SPI_CFG0=n
      # # Enable Heap memory allocation (required for k_malloc and k_free)
      CONFIG_HEAP_MEM_POOL_SIZE=4096
      CONFIG_MAIN_STACK_SIZE=4096
      CONFIG_SYSTEM_WORKQUEUE_STACK_SIZE=4096
      These four are very important:
      CONFIG_MDIO_INIT_PRIORITY=81
      CONFIG_PHY_INIT_PRIORITY=82
      CONFIG_ETH_ADIN2111_SPI_CFG0=n
      CONFIG_SYSTEM_WORKQUEUE_STACK_SIZE=4096
      And also I used these in app.overlay:
      / {
              aliases {
                      adin1110 = &adin1110;
              };
      };

      &iwdg {
              status = "okay";
      };

      &rng {
             status = "okay";
      };

      &dma1 {
            status = "okay";
      };

      &dmamux1 {
            status = "okay";
      };

      &spi2 {
            pinctrl-0 = <&spi2_sck_pb13 &spi2_miso_pb14 &spi2_mosi_pb15>;
            pinctrl-names = "default";
            cs-gpios = <&gpiob 12 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)>;
            dmas = <&dmamux1 2 13 (STM32_DMA_MEMORY_TO_PERIPH | STM32_DMA_MEM_INC |
                                                        STM32_DMA_MEM_8BITS | STM32_DMA_PERIPH_8BITS)>,
                         <&dmamux1 3 12 (STM32_DMA_PERIPH_TO_MEMORY | STM32_DMA_MEM_INC |
                                                        STM32_DMA_MEM_8BITS | STM32_DMA_PERIPH_8BITS)>;
            dma-names = "tx", "rx";
            status = "okay";

            adin1110: adin1110@0 {
                      compatible = "adi,adin1110";
                      reg = <0x0>;
                      spi-max-frequency = <25000000>;
                      int-gpios = <&gpiob 11 GPIO_ACTIVE_LOW>;
                      reset-gpios = <&gpioc 7 GPIO_ACTIVE_LOW>;
                      status = "okay";
                      //spi-oa;
                      //spi-oa-protection;

                      port1 {
                                local-mac-address = [ 00 E0 22 FE DA 30 ];
                      };
                      mdio {
                               compatible = "adi,adin2111-mdio";
                               #address-cells = <1>;
                               #size-cells = <0>;

                               ethernet-phy@1 {
                                        reg = <0x1>;
                                        compatible = "adi,adin2111-phy";
                                        led0-en;
                              };
                     };
            };
      };
      The default config of CN0575 are:
      Generic SPI
      CRC Disabled
      So I needed to make spi-oa and spi-oa-protection commented in app.overlay and CONFIG_ETH_ADIN2111_SPI_CFG0=n in prj.conf
      Also If CONFIG_SYSTEM_WORKQUEUE_STACK_SIZE is set as default value, the program crashes when we request a ping from local host.
      Regards,
      Ali
    • Hi  ,

      That's great!

      Thanks for documenting the resolution! This will guide others on what to be mindful of when working with a similar setup.

      Julious

    Reply Children
    No Data