Skip to main content
Visitor II
May 10, 2019
Solved

What is the maximum transmission interprocessor bandwidth on STM32MP1?

  • May 10, 2019
  • 2 replies
  • 2829 views

I am interested in the maximum transmission bandwidth between the A7 core and M4 core on the STM32MP1.

I did some test using RPMsg framewirk and sent messages with length 496 Byte from the A7 core to the M4 core. Therefore I modified the OpenAMP_raw example. I measured the time which it takes to receive 2300 messages on the M4 side using HAL_getTick(). I measured an average time of 132 ms, which would result in a transmission bandwidth of just 8,64 MB/s, which seems pretty slow to me.

Has anyone made some experience with it or did some similar evaluation? Maybe me measurement method isnt optimal? I am thankful for evey opinion.

    This topic has been closed for replies.
    Best answer by Olivier GALLIEN

    Hi @robsen223​ 

    Could you please confirm data you provided ?

    Computing given data we found 8,6MB/s ( 2300*496/0.132)

    For your information, in an dedicated optimized environment we achieved 15.4MB/s (512 Bytes buffer size).

    But this is really dependent of context on both cores and application.

    Else generally speaking bandwidth can be enhanced :

    • by increasing RPMSG Buffer size, but till a reasonable limit (eg 2048) since RPMSG is designed for message (control ) and not data.
    • by using a shared memory ( rpmsg used for pointers exchange between cores)

    BR,

    Olivier

    2 replies

    Technical Moderator
    May 10, 2019

    Hi @robsen223​ 

    Could you please confirm data you provided ?

    Computing given data we found 8,6MB/s ( 2300*496/0.132)

    For your information, in an dedicated optimized environment we achieved 15.4MB/s (512 Bytes buffer size).

    But this is really dependent of context on both cores and application.

    Else generally speaking bandwidth can be enhanced :

    • by increasing RPMSG Buffer size, but till a reasonable limit (eg 2048) since RPMSG is designed for message (control ) and not data.
    • by using a shared memory ( rpmsg used for pointers exchange between cores)

    BR,

    Olivier

    robsen223Author
    Visitor II
    May 14, 2019

    Hi @Community member​ 

    you are absolutely right with 8,6MB/s. I mixed up my notes.

    Thank you for your comments. It gave my the right food of thought and helped me to finish my work. Especially I thought that RPMsg is the only option for data transmisson. I really like the idea of sending just pointer through RPMsg.

    Visitor II
    May 14, 2019

    Hi robsen223,

    I am trying to write similar user application on linux for Inter core communication, could you clarify on how to write text via rpmsg on linux.

    Thank you

    Technical Moderator
    May 23, 2019

    Hi @USama​ 

    I suggest you to have a look to sample application "OpenAMP_TTY_Echo" installed on Starter Package and source available in STM32MP1 Cube Package.

    https://wiki.st.com/stm32mpu/wiki/STM32CubeMP1_Package#Getting_started_with_STM32CubeMP1_Package

    Hope it help,

    Olivier