STM32H753 Ethernet TX corruption
- April 28, 2026
- 3 replies
- 296 views
Hello,
I am currently experiencing some unusual Ethernet transmission (STM to PC) issues with a few of our custom PCBs. We use the STM32H753II chip and the KSZ8081RNB. The KSZ8081RNB is connected to the MCO2 and the RMII-interface of the STM.
The IP/TCP/UDP checksum check primarily fails due to corrupted payloads ranging in size from 1 to 20 bytes, or, more rarely, due to corrupted protocols. It doesn't happen regularly, but it happens too often.
This means that, for TCP, two or more retransmissions are sometimes needed.
udp bad:

udp good:

Sometimes, packets with complete defects are sent. These defects are not sent by the application. Even, when I paused the application, I could still see these packets.

For tests the PCB and the PC are directly connected. Using different cables does not solve the issue; only using different PCBs does.
I set up the LwIP example project in CubeIDE 1.19, as described in Github STM32H7-LwIP-Examples#how-to-create-project-from-scratch.
This project's firmware was used to create the traffic shown in the pictures. After increasing the payload size from 20 to 620 bytes, I noticed the issue occuring more frequently.
The DBGMCU->IDCODE register shows the STM revision 0x2003 ("V") and the device ID 0x450 for all our PCBs.
The following points are things that I tried that didn't make a difference:
- disable or enable D-/I-Cache
- ethernet buffers (normal, non-cachable) and descriptors (strongly-ordered) in AXI-SRAM or in D2-SRAM with configured MPUs
- different frequencies for SYSClocks (480MHz, 400MHz, 240MHz)
- force address-aligned beats / transmit-store-forward-mode for ethernet DMA
- enabled error ethernet IRQ, but I received none
- disable checksum offloading
- output ethernet data via another interface (in my case, UART) before HAL_ETH_Transmit. The UART data always looks fine, but the Ethernet data does not.
Thoughts:
The correct payload is used to compute the IP/TCP/UDP checksum. Additionally, the ethernet frame has its own checksum. This checksum is not displayed in Wireshark. If it fails, the packet will be dropped before Wireshark. These checksums are computed in the STM-MAC.
If the packet becomes corrupted during transfer (e.g. from the MAC to the PHY), the Ethernet frame checksum check should at least fail. However, this does not happen. So something is happening in the MAC.
I am 90% sure that the issue is not software-related, but rather an STM problem.
However, I don't know how to investigate it any further.
I would be very grateful for any additional information or hints.
Maybe related to stm32h743-ethernet-tx-corruption