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 😎 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.