cancel
Showing results for 
Search instead for 
Did you mean: 

Problem in STM32F7 with ethernetif.c provided by STM32CubeIDE 1.7.0

SURLEAU.Frederic
Associate III

Hi,

Context : STM32F777, FreeRTOS, Cmsis V2, LWIP, Sockets, TCP, UDP

Only one task is used to open, listen, poll, accept, send, receive, and close sockets.

 

Since STM32CubeIDE 1.7.0 and the new version of ethernetif.c, modifying "low_level_output", we have a problem when sending packets of about 400 bytes or more.

In that case, the client will not receive all data.

 

The old version called HAL_ETH_Transmit_IT, and then waited for the semaphore from HAL_ETH_TxCpltCallback().

 

The new version calls HAL_ETH_Transmit_IT, and returns immediatly.

The next call will fail, waits for the semaphore, then releases the previous packet, then retries...

It works well for small packets, but fails with bigger ones for unknown reasons...

 

A modification that work for us, is to move the call to HAL_ETH_ReleaseTxPacket in HAL_ETH_TxCpltCallback.

With this modification, we never fall in HAL_ETH_ERROR_BUSY...

 

What do you think?

 

Regards,

Fred.

1 REPLY 1
STea
ST Employee

Hello @SURLEAU.Frederic ,

I don't see a particular reason for the newer version of call to fail with bigger packets, but I think that the modification that you did will only maybe impact memory management but not overall functionality.
It would be great if you can send a simple project in which you comment the part that you removed indicating the CubeFirmware version and CubdeIDE version for analysis to make sure there are no potential issues with this modification.
Regards 

In order to give better visibility on the answered topics, please click on Accept as Solution on the reply which solved your issue or answered your question.