How can I make use of DMA for data transfer on external memory bus


I have an FPGA interfaced to my iMX7 Colibri module over the external memory bus, 16 bit address-data multiplexed.

I need to transfer large chunks of data to the FPGA. I have done this before by mapping the external memory locations in the device drivers memory space and performing memory writes or using the memcpy() function.
So this data transfer was firmware driven.

Is there a way that I can make use of the DMA on the iMX7 to take care of this transfer independently with limited assistance from the firmware?

If yes, can you guide me to suitable documentation that I can make use of to make it happen.

Dear @kapeed

Theoretically it is possible to use the SDMA engine for that purpose, but is could be a hard way to get there.
The SDMA itself is more like an individual CPU which needs a dedicated firmware to do the job. NXP requests that they should be contacted to write these SDMA scripts for any particular application. Unfortunately we don’t have any information at Toradex to support you about the details.

In addition such a script needs to be compatible with the stuff we use so far, otherwise features like audio might not work anymore.

Another option you might consider is using the additional M4 core instead of the SDMA engine.

Regards, Andy