2020-09-24 05:10 AM
I assume a bug in the Nucleo firmware (MAC driver? PHY driver?) or even the hardware.
I have implemented ping.c (from Lwip) on top of the board's Webserver example (from the recent Firmware package), so that it can ping a computer.
When the board issues a ping (echo request, ICMP type 8) request to the computer, the ICMP checksum is 0x0000, although is was correctly calculated in the message buffer before, and put to DMA as such. I have tracked down the value until HAL_ETH.*** passes it to DMA.
I cannot track down further, so I assume that some lower instances do some calculations on their own. E.g., the IP packet checksum is calculated here as well - correctly.
Vice versa, when the board answers a ping request from the computer, the checksum is correct.
See a complete report attached.
Is there a quick solution?
Edits:
2022-04-14 07:03 PM
I've tested on STM32F469I-EVAL & NUCLEO-F429ZI and the result was the same as above.
ICMP checksum was in the packet buffer before HAL_ETH_Transmit function. But after DMA transmit,
Wireshark shows a loss of ICMP checksum.