Receive data from cortex M7

Hello everyone!

I’m currently working with the Verdin iMX8M Plus, aiming to run a DSP firmware (based on FreeRTOS) in C on the separate Cortex-M7 core and utilize the processed data on the Cortex-A side. Since I’m new to this topic, I’d greatly appreciate some advice on efficiently receiving signal data blocks from an external sensor on the Cortex-M7 side.

The data is being received from a USB source, and to my knowledge, direct USB access from the Cortex-M7 core isn’t feasible. Thus, our current approach involves utilizing libusb to develop a data “driver” from the Cortex-A side. We plan to then utilize shared memory to transmit the data blocks to the Cortex-M7 core, and send the results back. Are there alternative solutions that might offer better performance or simplicity?

Additionally, any documentation or resources on this topic would be immensely valuable to me. Thank you all for your assistance!

To provide some solution, we need more information about your requirements, such as the source of the data, the volume of data you’re receiving, the data rate, among other details.
Please note that the iMX8M Plus features a separate Cadence® Tensilica® HiFi 4 DSP core operating at 800 MHz.

Regarding resources:

Thank you for sharing these resources.

Regarding the source of the data, it’s generated from a custom sensor that is designed to capture LTE signal and streams data through USB. Since it’s a high data rate, utilizing UART communication (up to 5Mbps, if I’m not mistaken) isn’t feasible for our requirements. We want receive data from the iMX8M board and processed using the Cortex-M capabilities.

I was wondering if direct access to USB peripherals is available from Cortex-M without using the Yavia USB-UART converter. If such access is feasible, we could receive and process the signal directly from the M7 core. However, if not, I am considering the approach outlined below:

  1. Receive the stream from /dev/ttyUSB* on the Torizon OS.
  2. Read data using libUSB and transmit the data blocks via rpmsg.
  3. Receive the data block within the Cortex-M7 FreeRTOS app.
  4. Execute DSP operations on the M7 core and transmit the parsed information back through rpmsg.

Sorry if I didn’t provide an exact answer to your questions regarding the size of data for example, there are still some unknown aspects, but we’ll define them in the coming days.

I would appreciate any further advice you can provide on this matter.
Thank you

Hello @crivi,

It is possible to use a USB Host interface in the Cortex-M7 core of the Verdin iMX8MP.
However, this is likely not a simple process, as there is no FreeRTOS driver available for it.

Also note that if the USB interface is used on the Cortex-M core, it cannot be used on the Cortex-A cores.


This approach would likely be simpler and require less development effort than developing a USB driver for FreeRTOS.

Best Regards,
Bruno