cancel
Showing results for 
Search instead for 
Did you mean: 

What is the maximum transmission interprocessor bandwidth on STM32MP1?

robsen223
Associate II

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.

1 ACCEPTED SOLUTION

Accepted Solutions
Olivier GALLIEN
ST Employee

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

Olivier GALLIEN
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.

View solution in original post

5 REPLIES 5
Olivier GALLIEN
ST Employee

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

Olivier GALLIEN
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.

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.

USama1
Associate II

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

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

Olivier GALLIEN
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.

Hi @Community member​ !

I'm trying to understand how to use a shared memory.

Can you help me?

I think that the shared memory I should use is this:

sram: sram@10050000 {
		compatible = "mmio-sram";
		reg = <0x10050000 0x10000>;
		#address-cells = <1>;
		#size-cells = <1>;
		ranges = <0 0x10050000 0x10000>;
 
		dma_pool: dma_pool@0 {
			reg = <0x0 0x10000>;
			pool;
		};
	};

How can I access it? There is a specific driver (misc/sram)?

Thank you!

Lenon