IMX7D Torizon communication between A7 and M4

I would like to run the UI on the A7 and use the M4 to measure different things. But I have no idea how to transfer the data. I tried to use rpmsg but it seems not to be possible with Torizon. So, can I use rpmsg or is there any other possibility? If rpmsg is possible, how does it work? Are there any differences between the IMX7 and IMX7D? I used the IMX7 with Angstrom before and it worked but know after upgrading to the IMX7D it doesn’t work.

Greetings @PG03.

RPMsg is usually the way to go to achieve communication between the A7 and M4 cores. However, the mainline-based kernel we use on Torizon for the iMX6 and iMX7 modules does not support the particular NXP implementation of that (rpmsg-imx), since NXP did not mainline that driver.

For now, the only way to work with RPMsg would be using our BSPs based on downstream NXP kernels. These would be the Angstrom distro you worked with before (currently BSP 2.8.7) or our newer LTS BSP version 3.0.4.

Note that this is a planned feature for Torizon, but unfortunately we don’t have a timeline for that yet.

For your last question, the Colibri iMX7 comes in three variants: the Colibri iMX7S 256MB (single core A7 + M4 core, 256MB RAM, 512MB NAND flash), the Colibri iMX7D 512MB (dual core A7 + M4 core, 512MB RAM, 512MB NAND flash) and the Colibri iMX7D 1GB (dual core A7 + M4 core, 1GB RAM, 4GB eMMC flash, the only one that’s compatible with Torizon).

Thank you so far for the information.
How can I transmit data from the M4 to the A7 when rpmsg is not supported?


To transfer data from the M4 to the A7, you’ll necessarily need a driver on the Linux side. RPMsg is the “official” way to do this and is the only means supported by NXP.

However, you can still write a custom driver to access some shared memory between the cores. See the answer to this community post for some comments on this by a colleague.