AnsweredAssumed Answered

关于内存DMA到内存

Question asked by 彦成 曹 on Mar 6, 2019
Latest reply on Mar 8, 2019 by jeremyzhou

最近有测试lpc43xx的DMA功能,使用的模式时M2M,我测试了两种情况:

1.片上内存dma片上内存。创建了两个数组,一个数组放源数据,另一个是目的数组。每次dma之前,我都会递增源数组里面的数据,这样DMA到目的数组的数据和源数组里的数据一样。这是成功的。

2.第二种测试的源数据地址为外部静态存储器的地址(0x1c000000),目的地址是片上的一个数组,外部静态存储器里面的数据是通过别的主机实时更新的。在这种情况下,循环dma,发现目的地址上的数据并不会实时更新,而是一直保持和第一次dma过来的数据一样。 

我思考了一下两种方式的区别,第一种方式实际存储源数据的物理空间是在片上,第二种方式实际存储源数据的物理空间是在片外。DMA是不是不会通过emc接口去片外将数据拉回片内?有了这个想法,我就有了下面验证,在dma之前,我自己手动先去片外将数据映射到lpc上,然后再dma。结果是成功的。目的地址的数据也和源地址的数据一样在实时更新。

具体操作如下:

;但是这样方式让我感觉使用dma有点鸡肋了,因为在dma之前需要执行一个循环,耗cpu时间,违背了我使用dma的初衷;

 

我想问下,nxp的技术支持, 片外的sram在作为源数据地址的时候,能否做到和片上的sram一样,在我调用dma之前,不需要执行那个循环。 还是说我使用的方式有问题? 还是说片外的sram就不支持dma?  另外nxp的操作手册上有提到sdram可以dma,那么sram呢???

Outcomes