Skip to main content
Graduate II
February 18, 2025
Question

STM32H747 + LwIP reassembly timed out

  • February 18, 2025
  • 0 replies
  • 456 views

Hi all,

I am using a STM32H747XIH6 MCU.

I developed an application using LwIP library.

When I connect my circuit directly to the computer, the application works stably. But when I connect the circuit to the LAN network, the application encounters a hardfault interrupt. Before the interrupt occurs, the application sends the message 'LWIP_DEBUGF(IP_REASS_DEBUG, ("ip_reass_tmr: timer timed out\n"));' in the ip_reass_tmr() function at the file ip4_frag.c.

 

void
ip_reass_tmr(void)
{
 struct ip_reassdata *r, *prev = NULL;

 r = reassdatagrams;
 while (r != NULL) {
 /* Decrement the timer. Once it reaches 0,
 * clean up the incomplete fragment assembly */
 if (r->timer > 0) {
 r->timer--;
 LWIP_DEBUGF(IP_REASS_DEBUG, ("ip_reass_tmr: timer dec %"U16_F"\n", (u16_t)r->timer));
 prev = r;
 r = r->next;
 } else {
 /* reassembly timed out */
 struct ip_reassdata *tmp;
 LWIP_DEBUGF(IP_REASS_DEBUG, ("ip_reass_tmr: timer timed out\n"));
 tmp = r;
 /* get the next pointer before freeing */
 r = r->next;
 /* free the helper struct and all enqueued pbufs */
 ip_reass_free_complete_datagram(tmp, prev);
 }
 }
}

 

 

What is particularly unique in my LAN network is that there are many devices sending broadcast messages continuously. This is the ethernet configuration in my application:

 

#if defined ( __ICCARM__ ) /*!< IAR Compiler */

#pragma location=0x30000000
ETH_DMADescTypeDef DMARxDscrTab[ETH_RX_DESC_CNT]; /* Ethernet Rx DMA Descriptors */
#pragma location=0x30000060
ETH_DMADescTypeDef DMATxDscrTab[ETH_TX_DESC_CNT]; /* Ethernet Tx DMA Descriptors */
#pragma location=0x30000200
uint8_t Rx_Buff[ETH_RX_DESC_CNT][ETH_RX_BUFFER_SIZE]; /* Ethernet Receive Buffers */

#elif defined ( __CC_ARM ) /* MDK ARM Compiler */

__attribute__((at(0x30000000))) ETH_DMADescTypeDef DMARxDscrTab[ETH_RX_DESC_CNT]; /* Ethernet Rx DMA Descriptors */
__attribute__((at(0x30000060))) ETH_DMADescTypeDef DMATxDscrTab[ETH_TX_DESC_CNT]; /* Ethernet Tx DMA Descriptors */
__attribute__((at(0x30000200))) uint8_t Rx_Buff[ETH_RX_DESC_CNT][ETH_RX_BUFFER_SIZE]; /* Ethernet Receive Buffer */

#elif defined ( __GNUC__ ) /* GNU Compiler */

ETH_DMADescTypeDef DMARxDscrTab[ETH_RX_DESC_CNT] __attribute__((section(".RxDecripSection"))); /* Ethernet Rx DMA Descriptors */
ETH_DMADescTypeDef DMATxDscrTab[ETH_TX_DESC_CNT] __attribute__((section(".TxDecripSection"))); /* Ethernet Tx DMA Descriptors */
uint8_t Rx_Buff[ETH_RX_DESC_CNT][ETH_RX_BUFFER_SIZE] __attribute__((section(".RxArraySection"))); /* Ethernet Receive Buffers */

 

 

 

/* ########################### Ethernet Configuration ######################### */
#define ETH_TX_DESC_CNT 4 /* number of Ethernet Tx DMA descriptors */
#define ETH_RX_DESC_CNT 4 /* number of Ethernet Rx DMA descriptors */

 

 

Any idea why this is happening?

 

    This topic has been closed for replies.