By the way, the lwipopts.h from the STM32 example application appears to use the SRAM3 as the LWIP heap memory as well:
/* Relocate the LwIP RAM heap pointer */ #define LWIP_RAM_HEAP_POINTER (0x30044000) Might this be an issue? I'm also not sure whether any interrupts are configured .. but I think the Raw API is polling based.. Kind Regards Robin Müller On Thu, 28 Jan 2021 at 17:40, Robin Müller <robin.muelle...@gmail.com> wrote: > Okay, I managed to achieve the initialization process by adapting the BSP > to perform the descriptor list initialization. > Unfortunately, the program now appears to crash in the following polling > function, which is called every 100 ms: > > void ethernetif_input(struct netif *netif) > { > err_t err; > struct pbuf *p; > > /* move received packet into a new pbuf */ > p = low_level_input(netif); > > /* no packet could be read, silently ignore this */ > if (p == NULL) return; > > /* entry point to the LwIP stack */ > err = netif->input(p, netif); > > if (err != ERR_OK) > { > LWIP_DEBUGF(NETIF_DEBUG, ("ethernetif_input: IP input error\n")); > pbuf_free(p); > p = NULL; > } > > HAL_ETH_BuildRxDescriptors(&EthHandle); > } > > More specifically, it appears to crash in netif->input.. Is there someone > who has managed to make LwIP work on the STM32 with the Raw API? > > Kind Regards > Robin Müller > > On Thu, 28 Jan 2021 at 17:15, Robin Müller <robin.muelle...@gmail.com> > wrote: > >> Alright, I think these descriptors were not initialized inside the >> functions: >> ETH_DMATxDescListInit >> ETH_DMARxDescListInit >> >> because they are wrapped in preprocessor guards: >> >> static void ETH_DMATxDescListInit(ETH_HandleTypeDef *heth) >> { >> #ifndef __rtems__ >> ETH_DMADescTypeDef *dmatxdesc; >> uint32_t i; >> >> /* Fill each DMATxDesc descriptor with the right values */ >> for(i=0; i < (uint32_t)ETH_TX_DESC_CNT; i++) >> { >> dmatxdesc = heth->Init.TxDesc + i; >> >> WRITE_REG(dmatxdesc->DESC0, 0x0); >> WRITE_REG(dmatxdesc->DESC1, 0x0); >> WRITE_REG(dmatxdesc->DESC2, 0x0); >> WRITE_REG(dmatxdesc->DESC3, 0x0); >> >> WRITE_REG(heth->TxDescList.TxDesc[i], (uint32_t)dmatxdesc); >> } >> >> heth->TxDescList.CurTxDesc = 0; >> >> /* Set Transmit Descriptor Ring Length */ >> WRITE_REG(heth->Instance->DMACTDRLR, (ETH_TX_DESC_CNT -1)); >> >> /* Set Transmit Descriptor List Address */ >> WRITE_REG(heth->Instance->DMACTDLAR, (uint32_t) heth->Init.TxDesc); >> >> /* Set Transmit Descriptor Tail pointer */ >> WRITE_REG(heth->Instance->DMACTDTPR, (uint32_t) heth->Init.TxDesc); >> #endif /* __rtems__ */ >> } >> >> Is there a specific reason the function was excluded? >> >> Kind Regards >> Robin >> >> On Thu, 28 Jan 2021 at 16:47, Sebastian Huber < >> sebastian.hu...@embedded-brains.de> wrote: >> >>> On 28/01/2021 16:45, Robin Müller wrote: >>> >>> > *(SORT_BY_ALIGNMENT(SORT_BY_NAME(.bsp_nocache*))) >>> > .bsp_nocache 0x0000000030000000 0x18c0 >>> > >>> CMakeFiles/fsfw_example.dir/bsp_stm32_rtems/boardconfig/ethernetif.c.obj >>> > 0x0000000030000000 DMARxDscrTab >>> > 0x0000000030000060 DMATxDscrTab >>> > 0x00000000300000c0 Rx_Buff >>> > 0x00000000300018c0 bsp_section_nocache_end = . >>> > 0x00000000000018c0 bsp_section_nocache_size = >>> > (bsp_section_nocache_end - bsp_section_nocache_begin) >>> > >>> > But in the debugger, the descriptor entries are still zeroed out >>> > unfortunately.. >>> If you place them in BSP_NOCACHENOLOAD_SECTION or >>> BSP_NOCACHENOLOAD_SUBSECTION(), they are not loaded (zero initialized). >>> >>> -- >>> embedded brains GmbH >>> Herr Sebastian HUBER >>> Dornierstr. 4 >>> 82178 Puchheim >>> Germany >>> email: sebastian.hu...@embedded-brains.de >>> phone: +49-89-18 94 741 - 16 >>> fax: +49-89-18 94 741 - 08 >>> >>> Registergericht: Amtsgericht München >>> Registernummer: HRB 157899 >>> Vertretungsberechtigte Geschäftsführer: Peter Rasmussen, Thomas Dörfler >>> Unsere Datenschutzerklärung finden Sie hier: >>> https://embedded-brains.de/datenschutzerklaerung/ >>> >>>
_______________________________________________ users mailing list users@rtems.org http://lists.rtems.org/mailman/listinfo/users