cancel
Showing results for 
Search instead for 
Did you mean: 

STM32H753XI LWIP + MDMA

AShel.1
Associate III

Hello,

we're using STM32H753XI in our custom board wherein we've ADIN1200 LAN driver, W25Q flash on QUADSPI. we've configured the memory regions for Ethernet Rx, TX DMAs and pool memory like this

 

 

 

 RW_DMARxDscrTab 0x30040000 0x60 {

 *(.RxDecripSection)

 }

 RW_DMATxDscrTab 0x30040060 0x140 {

 *(.TxDecripSection)

 }

 memory_RX_POOL_base 0x30040200 0x12676 {

 *(.Rx_PoolSection)

 }

 

 

 

 

 

we've assigned some memory from address location 0x30000000 for other purpose

 

 

 

 

RW___SRAM1_Buf 0x30000000 0x14000 {

 *(.SRAM1_Buf)

 }

 RW___SRAM1    0x30014000 0xC000 {

 *(.SRAM1_data)

 }

 

 

 

 

MPU Config is initialized like this,

 

 

 

 

/* MPU Configuration */



void MPU_Config(void)

{

 MPU_Region_InitTypeDef MPU_InitStruct = {0};



 /* Disables the MPU */

 HAL_MPU_Disable();



 /** Initializes and configures the Region and the memory to be protected

 */

 MPU_InitStruct.Enable = MPU_REGION_ENABLE;

 MPU_InitStruct.Number = MPU_REGION_NUMBER0;

 MPU_InitStruct.BaseAddress = 0x30040000;

 MPU_InitStruct.Size = MPU_REGION_SIZE_32KB;

 MPU_InitStruct.SubRegionDisable = 0x0;

 MPU_InitStruct.TypeExtField = MPU_TEX_LEVEL1;

 MPU_InitStruct.AccessPermission = MPU_REGION_FULL_ACCESS;

 MPU_InitStruct.DisableExec = MPU_INSTRUCTION_ACCESS_ENABLE;

 MPU_InitStruct.IsShareable = MPU_ACCESS_NOT_SHAREABLE;

 MPU_InitStruct.IsCacheable = MPU_ACCESS_NOT_CACHEABLE;

 MPU_InitStruct.IsBufferable = MPU_ACCESS_NOT_BUFFERABLE;



 HAL_MPU_ConfigRegion(&MPU_InitStruct);



 /** Initializes and configures the Region and the memory to be protected

 */

 MPU_InitStruct.Number = MPU_REGION_NUMBER1;

 MPU_InitStruct.Size = MPU_REGION_SIZE_256B;

 MPU_InitStruct.TypeExtField = MPU_TEX_LEVEL0;

 MPU_InitStruct.DisableExec = MPU_INSTRUCTION_ACCESS_DISABLE;

 MPU_InitStruct.IsShareable = MPU_ACCESS_SHAREABLE;

 MPU_InitStruct.IsBufferable = MPU_ACCESS_BUFFERABLE;



 HAL_MPU_ConfigRegion(&MPU_InitStruct);



 /** Initializes and configures the Region and the memory to be protected

 */

 MPU_InitStruct.Number = MPU_REGION_NUMBER2;

 MPU_InitStruct.BaseAddress = 0x30000000;

 MPU_InitStruct.Size = MPU_REGION_SIZE_128KB;

 MPU_InitStruct.TypeExtField = MPU_TEX_LEVEL1;

 MPU_InitStruct.IsShareable = MPU_ACCESS_NOT_SHAREABLE;

 MPU_InitStruct.IsBufferable = MPU_ACCESS_NOT_BUFFERABLE;



 HAL_MPU_ConfigRegion(&MPU_InitStruct);

 /* Enables the MPU */

 HAL_MPU_Enable(MPU_PRIVILEGED_DEFAULT);



}

 

 

 

 

we've configured LWIP in DHCP mode and have modified the webserver link for customized use. please note that as of now we're testing ethernet port with ping command only.

we've QUADSPI enabled with MDMA however, LWIP will not initialize properly when MDMA is enabled. so, we've disabled MDMA and check if LWIP works ok for ping command, seems like it works for some time.

 

Que: is there any issue in CubeH7 V1.11.0 to use MDMA and LWIP together on STM32H753XI?

4 REPLIES 4
KDJEM.1
ST Employee

Hello @AShel.1 ,

Could you please check if the QSPI transmit MDMA works well when you disabled the LWIP. 

Maybe this post can help you.

Thank you.

Kaouthar

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.

QSPI with MDMA works fine

AShel.1
Associate III

Hello,

In STM32H753 can I use MDMA for QUADSPI and LWIP stack together? I've configured QUADSPI with MDMA channel 1 and Ethernet port in RMII mode. I'm using scatter file wherein SRAM locations are defined as below,

; *************************************************************
; *** Scatter-Loading Description File generated by uVision ***
; *************************************************************

LR_IROM1 0x08000000 0x00200000  {    ; load region size_region
  ER_IROM1 0x08000000 0x00200000  {  ; load address = execution address
   *.o (RESET, +First)
   *(InRoot$$Sections)
   .ANY (+RO)
  }
  RW_IRAM2 0x24000000 0x00080000  {  ; RW data
   .ANY (+RW +ZI)
  }
  RW___SRAM1_Msg 0x30000000 0x14000 {
  *(.SRAM1_msg)
  }
  RW___SRAM1        0x30014000 0xC000 {
  *(.SRAM1_data)
  }
  RW_DMARxDscrTab 0x30040000 0x60 {
  *(.RxDecripSection)
  }
  RW_DMATxDscrTab 0x30040060 0x140 {
  *(.TxDecripSection)
  }
  memory_RX_POOL_base 0x30040200 0x12676 {
  *(.Rx_PoolSection)
  }
}

MPU config is as below,

void MPU_Config(void)
{
  MPU_Region_InitTypeDef MPU_InitStruct = {0};

  /* Disables the MPU */
  HAL_MPU_Disable();

  /** Initializes and configures the Region and the memory to be protected
  */
  MPU_InitStruct.Enable = MPU_REGION_ENABLE;
  MPU_InitStruct.Number = MPU_REGION_NUMBER0;
  MPU_InitStruct.BaseAddress = 0x30040000;
  MPU_InitStruct.Size = MPU_REGION_SIZE_32KB;
  MPU_InitStruct.SubRegionDisable = 0x0;
  MPU_InitStruct.TypeExtField = MPU_TEX_LEVEL1;
  MPU_InitStruct.AccessPermission = MPU_REGION_FULL_ACCESS;
  MPU_InitStruct.DisableExec = MPU_INSTRUCTION_ACCESS_ENABLE;
  MPU_InitStruct.IsShareable = MPU_ACCESS_NOT_SHAREABLE;
  MPU_InitStruct.IsCacheable = MPU_ACCESS_NOT_CACHEABLE;
  MPU_InitStruct.IsBufferable = MPU_ACCESS_NOT_BUFFERABLE;

  HAL_MPU_ConfigRegion(&MPU_InitStruct);

  /** Initializes and configures the Region and the memory to be protected
  */
  MPU_InitStruct.Number = MPU_REGION_NUMBER1;
  MPU_InitStruct.Size = MPU_REGION_SIZE_256B;
  MPU_InitStruct.TypeExtField = MPU_TEX_LEVEL0;
  MPU_InitStruct.DisableExec = MPU_INSTRUCTION_ACCESS_DISABLE;
  MPU_InitStruct.IsShareable = MPU_ACCESS_SHAREABLE;
  MPU_InitStruct.IsBufferable = MPU_ACCESS_BUFFERABLE;

  HAL_MPU_ConfigRegion(&MPU_InitStruct);

  /** Initializes and configures the Region and the memory to be protected
  */
  MPU_InitStruct.Number = MPU_REGION_NUMBER2;
  MPU_InitStruct.BaseAddress = 0x30000000;
  MPU_InitStruct.Size = MPU_REGION_SIZE_128KB;
  MPU_InitStruct.TypeExtField = MPU_TEX_LEVEL1;
  MPU_InitStruct.IsShareable = MPU_ACCESS_NOT_SHAREABLE;
  MPU_InitStruct.IsBufferable = MPU_ACCESS_NOT_BUFFERABLE;

  HAL_MPU_ConfigRegion(&MPU_InitStruct);
  /* Enables the MPU */
  HAL_MPU_Enable(MPU_PRIVILEGED_DEFAULT);

}

is there any other settings req to use MDMA and LWIP together? 

KDJEM.1
ST Employee

Hi @AShel.1 ,

Thank you for updating post.

Is LWIP working properly without using QSPI and MDMA?

For LWIP issue, I recommend you to refer to this FAQ: How do I create a project for STM32H7 with Ethernet and LwIP stack working? and check the MPU configuration.

Also, I advise you to take a look at this  STM32H743_Nucleo_ETH example may help you.

I hope this help you to solve the issue.

Thank you.

Kaouthar

 

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.