cancel
Showing results for 
Search instead for 
Did you mean: 

Unable to ping Ethernet on custom STM32H723VGT6 board

GraysonA
Visitor

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

0 REPLIES 0