cancel
Showing results for 
Search instead for 
Did you mean: 

Unable to ping Ethernet on custom STM32H723VGT6 board

GraysonA
Associate

Hello everyone,

I am working on a custom board with STM32H723VGT6 and LAN8742A but after much troubleshooting, pinging has remained unsuccessful. I am trying to use LwIP without RTOS. I have a NUCLEO-H723ZG that I have been able to successfully ping without RTOS, but when I use the same CubeMX configurations (except the RMII pinout) on my custom board, it does not work. I tried to very closely follow the Ethernet schematic for the NUCLEO-H723ZG, the only main changes I made were the pinout (since I am using VG instead of ZG) and using two ESD protection diodes instead of one for ease of routing. The RMII pinout follows what is presented in CubeMX. 

Here are the following code modifications I have made, based on the H723ZG example in this repo https://github.com/stm32-hotspot/STM32H7-LwIP-Examples.git:

Added to STM32H723VGTX_FLASH.ld:

  .lwip_sec (NOLOAD) :
  {
    . = ABSOLUTE(0x30000000);
    *(.RxDecripSection) 
    
    . = ABSOLUTE(0x30000100);
    *(.TxDecripSection)
    
  } >RAM_D2
  /* Uninitialized data section */
  . = ALIGN(4);
  .bss (NOLOAD) :
  {
    /* This is used by the startup in order to initialize the .bss section */
    _sbss = .;         /* define a global symbol at bss start */
    __bss_start__ = _sbss;
    *(.bss)
    *(.bss*)
    *(COMMON)

    /* ETH_CODE: add placement of RX buffer. STM32H72x/H73x has small D2 RAM, so we need to put it there.
     * (NOLOAD) attribute used for .bss section to avoid linker warning (.bss initialized by startup code)
     */
    . = ALIGN(32);
    *(.Rx_PoolSection)
    . = ALIGN(4);
    _ebss = .;         /* define a global symbol at bss end */
    __bss_end__ = _ebss;
  } >RAM_D1

Added to ethernetif.c:

#if defined ( __ICCARM__ ) /*!< IAR Compiler */
#pragma location = 0x30000200
extern u8_t memp_memory_RX_POOL_base[];

#elif defined ( __CC_ARM )  /* MDK ARM Compiler */
__attribute__((at(0x30000200)) extern u8_t memp_memory_RX_POOL_base[];

#elif defined ( __GNUC__ ) /* GNU Compiler */
__attribute__((section(".Rx_PoolSection"))) extern u8_t memp_memory_RX_POOL_base[];
#endif

Added to lwipopts.h:

#undef LWIP_PROVIDE_ERRNO
#define LWIP_ERRNO_STDINCLUDE
#define LWIPERF_CHECK_RX_DATA 1

And in main.c:

  /* USER CODE BEGIN WHILE */
  while (1)
  {
    /* USER CODE END WHILE */

    /* USER CODE BEGIN 3 */
	  MX_LWIP_Process();
  }

 

Observed Behavior:

I have LEDs connected to LED1 and LED2 of the PHY, which LED2 lights up and stays solid when I connect the Ethernet cable to my laptop (running Ubuntu 22.04). My laptop says it is connected at 10 Mb/s when it should be 100. LED1 flashes and eventually turns solid. I do not get any errors, however, I am still unable to ping the custom board.

Please let me know if I am overlooking anything that is causing this to not work or any noticeable improvements I can make, since this is my first time designing a board like this and I am fairly new to STM32. I am unsure if it is a hardware or software problem, or both, and I have not seen any examples specifically using the H723VG, so I do not know if there are any configuration settings I am missing.

Schematic:

Screenshot from 2025-08-25 10-23-04.png

Screenshot from 2025-08-25 10-23-46.png

 

CORTEX_M7:

Screenshot from 2025-08-25 10-24-56.pngScreenshot from 2025-08-25 10-25-17.png

ETH:

Screenshot from 2025-08-25 10-25-56.png

LWIP:

Screenshot from 2025-08-25 13-21-35.pngScreenshot from 2025-08-25 13-21-54.png

Clock Configuration:

Screenshot from 2025-08-25 13-23-06.png

Pinout:

Screenshot from 2025-08-25 13-23-41.png

Network Configuration (Ubuntu 22.04):

Screenshot from 2025-08-25 13-24-19.png

1 ACCEPTED SOLUTION

Accepted Solutions
GraysonA
Associate

Hello @STackPointer64,

Good news, I actually was able to figure out the problem, so I will share what I found in case others run into the same issue. 

LED2 was missing a pull down resistor. Once I added a 10k pull down resistor, my laptop started showing 100 Mb/s and I was able to properly communicate with the PHY, since that pull down sets REF_CLK OUT. My LEDs are also mislabeled, LED2 should be SPEED and LED1 is ACT. All the other software modifications I made mentioned above were able to setup Ethernet properly, although the modification to lwipopts.h wasn't necessary. I will share my .ioc for anyone also looking to configure Ethernet for STM32H723VGT6.

View solution in original post

2 REPLIES 2
STackPointer64
ST Employee

Hello @GraysonA and welcome to ST community!

I suggest you read this article and check the registers mentioned so we can determine whether the issue is software- or hardware-related. I will be awaiting your updates.

Best regards,

To improve visibility of answered topics, please click 'Accept as Solution' on the reply that resolved your issue or answered your question.
GraysonA
Associate

Hello @STackPointer64,

Good news, I actually was able to figure out the problem, so I will share what I found in case others run into the same issue. 

LED2 was missing a pull down resistor. Once I added a 10k pull down resistor, my laptop started showing 100 Mb/s and I was able to properly communicate with the PHY, since that pull down sets REF_CLK OUT. My LEDs are also mislabeled, LED2 should be SPEED and LED1 is ACT. All the other software modifications I made mentioned above were able to setup Ethernet properly, although the modification to lwipopts.h wasn't necessary. I will share my .ioc for anyone also looking to configure Ethernet for STM32H723VGT6.