@NeusAap, does UDP now run in both directions and with a high speed?
@NeusAap wrote:
I can’t seem to find much about how often the ETH_IRQHandler()
function needs to be called
An Ethernet IRQ handler normally has three reasons to be called:
- When a packet has been received
- When a packet has been sent
- When an error has occurred ( or a drop in the Link Status )
So you will get as many RX-interrupts as there are packets received. Looking at your earlier Wireshark_defunct_TCP_package.pcapng
, it seems to me that you do not have RX-interrupts.
You must have seen this declaration in NetworkInterface.c :
void ETH_IRQHandler( void )
{
HAL_ETH_IRQHandler( &xETH );
}
Do you have the following code somewhere?
void HAL_ETH_MspInit( ETH_HandleTypeDef* heth )
{
...
/* Enable the Ethernet global Interrupt */
HAL_NVIC_SetPriority(ETH_IRQn, 0x7, 0);
HAL_NVIC_EnableIRQ(ETH_IRQn);
...
}
Do you have a version of HAL_ETH_MspInit()
somewhere in the project?
You can find an example in this STM32F7 demo project.
Could you attach stm32f7xx_hal_conf.h
to your post?
ipconfigDRIVER_INCLUDED_RX_IP_CHECKSUM to either 1 or 0. But I believe the STM32F7 does have hardware IP checksum checking, so this should be set to a 1 value right (for optimal performance)?
Absolutely right.
Also check this, setting CRC offloading:
#if ( ipconfigDRIVER_INCLUDED_TX_IP_CHECKSUM != 0 )
/* using the ETH_CHECKSUM_BY_HARDWARE option:
* both the IP and the protocol checksums will be calculated
* by the peripheral. */
xETH.Init.ChecksumMode = ETH_CHECKSUM_BY_HARDWARE;
#else
xETH.Init.ChecksumMode = ETH_CHECKSUM_BY_SOFTWARE;
#endif
Your project sets them both in FreeRTOSIPConfig.h :
#define ipconfigDRIVER_INCLUDED_TX_IP_CHECKSUM 1
#define ipconfigDRIVER_INCLUDED_RX_IP_CHECKSUM 1
and that should work well.
Do you enable data caching by calling SCB_EnableDCache()
?
If so, have you put the DMA buffers in non-cached memory?
See this readme.md about non-cached memory.
Are you using BufferAllocation_1.c
or BufferAllocation_2.c
?