Skip to main content
jumman_JHINGA
Senior III
June 13, 2026
Solved

STM32MP257F-DK - Using USB Type-C Ethernet as Second RJ45 Port for Ring Topology

  • June 13, 2026
  • 3 replies
  • 84 views

Hello,

I am working on the STM32MP257F-DK board and would like to use two Ethernet interfaces simultaneously for industrial network communication.

The board provides:

  • One onboard RJ45 Ethernet connector.
  • One USB Type-C connector that, according to the documentation, can also provide Ethernet connectivity.

My objective is to establish a network ring topology, where both Ethernet interfaces are connected to external devices using RJ45 Ethernet cables.

I would like to understand:

  1. How can the USB Type-C Ethernet interface be converted to a standard RJ45 Ethernet connection?
  2. Does the USB Type-C port support Ethernet through a USB-to-Ethernet adapter (USB Ethernet dongle)?
  3. If yes, are there any ST-recommended USB-to-RJ45 adapters that have been validated with STM32MP257F-DK?
  4. Under Linux/OpenSTLinux, will the onboard RJ45 and the USB Ethernet adapter appear as two independent network interfaces (for example eth0 and eth1)?
  5. Has anyone implemented Ethernet ring topologies such as MRP, RSTP, PRP, or custom ring communication using STM32MP257 devices?

My final goal is to have two RJ45 Ethernet ports connected simultaneously and use them for ring-network communication.

Any guidance, reference designs, device tree configurations, or example projects would be greatly appreciated.

Thank you.

Best answer by Bernard PUEL

HEllo,

To complete above ref.

IF you take a starter package on your DK board, by default usb0 is mounted as a network interface on the USB DRD type C port (CN15):

# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host noprefixroute 
       valid_lft forever preferred_lft forever
2: end0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc mq state DOWN group default qlen 1000
    link/ether 10:e7:7a:e3:c3:51 brd ff:ff:ff:ff:ff:ff
    altname ethernet0
    altname ethernet0.eth1
3: wlan0: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN group default qlen 1000
    link/ether 50:26:ef:af:11:f0 brd ff:ff:ff:ff:ff:ff
4: usb0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc fq_codel state DOWN group default qlen 1000
    link/ether 46:c0:e2:68:fc:c5 brd ff:ff:ff:ff:ff:ff
 

By plugging most of USB C to ETH device, you will get a RJ45 interface on this port (here D-Link M520:

# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host noprefixroute 
       valid_lft forever preferred_lft forever
2: end0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc mq state DOWN group default qlen 1000
    link/ether 10:e7:7a:e3:c3:51 brd ff:ff:ff:ff:ff:ff
    altname ethernet0
    altname ethernet0.eth1
3: wlan0: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN group default qlen 1000
    link/ether 50:26:ef:af:11:f0 brd ff:ff:ff:ff:ff:ff
5: enu1u4: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
    link/ether a4:2a:95:76:02:ad brd ff:ff:ff:ff:ff:ff
    inet 10.48.108.73/23 metric 10 brd 10.48.109.255 scope global dynamic enu1u4
       valid_lft 3597sec preferred_lft 3597sec
    inet6 fe80::a62a:95ff:fe76:2ad/64 scope link proto kernel_ll 
       valid_lft forever preferred_lft forever
 

From here, you will get a second ETH port RJ45 (enu1u4 in this ex) on top of end0 existing one.

You can then create a bridge between both ports or whatever you like in term of networking with standard linux commands (like ref by PAtrick above).

Have fun !

3 replies

PatrickF
ST Employee
June 15, 2026

HI ​@jumman_JHINGA 

I cannot answer for SW point of view, but Linux running on the board could be tailored to your need (if this is supported by Linux).

For HW, I encourage you to prototype your future board using  STM32MP257F-EV1 which provide much more handy Ethernet connectivity (2 x RJ45 with embedded switch + 1 x RJ45).

 

see also 

https://wiki.st.com/stm32mpu/wiki/Getting_started/STM32MP2_boards/STM32MP257x-EV1/Let%27s_start/Unpack_the_STM32MP257x-EV1_board

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

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

https://wiki.st.com/stm32mpu/wiki/How_to_create_a_bridge_between_ETH1,_ETH2,_ETH3

 

 

Regards.

In order to give better visibility on the answered topics, please click on 'Best Answer' on the reply which solved your issue or answered your question.Tip of the day: Try Sidekick STM32 AI agent
Bernard PUEL
Bernard PUELBest answer
ST Technical Moderator
June 17, 2026

HEllo,

To complete above ref.

IF you take a starter package on your DK board, by default usb0 is mounted as a network interface on the USB DRD type C port (CN15):

# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host noprefixroute 
       valid_lft forever preferred_lft forever
2: end0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc mq state DOWN group default qlen 1000
    link/ether 10:e7:7a:e3:c3:51 brd ff:ff:ff:ff:ff:ff
    altname ethernet0
    altname ethernet0.eth1
3: wlan0: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN group default qlen 1000
    link/ether 50:26:ef:af:11:f0 brd ff:ff:ff:ff:ff:ff
4: usb0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc fq_codel state DOWN group default qlen 1000
    link/ether 46:c0:e2:68:fc:c5 brd ff:ff:ff:ff:ff:ff
 

By plugging most of USB C to ETH device, you will get a RJ45 interface on this port (here D-Link M520:

# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host noprefixroute 
       valid_lft forever preferred_lft forever
2: end0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc mq state DOWN group default qlen 1000
    link/ether 10:e7:7a:e3:c3:51 brd ff:ff:ff:ff:ff:ff
    altname ethernet0
    altname ethernet0.eth1
3: wlan0: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN group default qlen 1000
    link/ether 50:26:ef:af:11:f0 brd ff:ff:ff:ff:ff:ff
5: enu1u4: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
    link/ether a4:2a:95:76:02:ad brd ff:ff:ff:ff:ff:ff
    inet 10.48.108.73/23 metric 10 brd 10.48.109.255 scope global dynamic enu1u4
       valid_lft 3597sec preferred_lft 3597sec
    inet6 fe80::a62a:95ff:fe76:2ad/64 scope link proto kernel_ll 
       valid_lft forever preferred_lft forever
 

From here, you will get a second ETH port RJ45 (enu1u4 in this ex) on top of end0 existing one.

You can then create a bridge between both ports or whatever you like in term of networking with standard linux commands (like ref by PAtrick above).

Have fun !

Bernard PUEL
ST Technical Moderator
June 17, 2026

Also note in term of Performance:

  • usb0 is about 900Mbps to 1Gbps interface in that context.
  • If you bridge end0 to usb0, you will get some penalty due to the conversion between usb payload and eth payload (compared to a full eth to eth bridge in Linux)
  • MP2 embeds a HW bridge you can use for better perf (but only available on EV board) and to get up to 3 eth native port