TI中文支持网
TI专业的中文技术问题搜集分享网站

C674+ DSP EDMA3 搬移数据,会不会引起数据总线冲突

Hello,

利用DM8148评估板,在DSP C674+端开发了图像处理算法。在DSP端单独运行DSP算法,算法能正常工作。

然后将算法lib加载评估板提供的代码中,算法也能正常工作,整个系统能够正常运行。

然而,为了提高算法计算速度,将子图像提取用EDMA代替(EDMA3的源地址和目标地址都在DDR3),在DSP端代码单独测试,DSP也能正常工作。

然而,将该带有EDMA3的lib,重新添加到评估板系统的代码中,整个系统崩溃,算法不能正常运行。

EDMA的应用会不会,引起数据总线冲突,从而导致系统崩溃。

当EDMA将数据从DDR3源地址搬移到DDR3的目标地址时,会不会引起DDR3总线,或者其它总线冲突(源数据端,数据仍然在更新中,ping-pong buffer)?

什么因素能导致该问题产生?

请高手指导!

非常感谢!

Tony Tang:

可能是DSP用的EDMA通道与ARM端用的EDMA通道重复了吧,跟你下面说的DDR3总线没有关系的。

Lingcon Meng:

回复 Tony Tang:

Hello Tang,

非常感谢您的回复。

我也考虑过,EDMA3 通道系统别的资源所占用。

因此我加了测试代码,在没有EDMA3实现子帧抽取且能正常工作的算法代码中molloc了两段DDR3内存,每段400K,然后这两段用同样的EDMA函数搬移(一个作为源地址,一个作为目标地址),这两段内存中的数据只是为了测试,该数据不参与算法运算。

结果算法库在DM8148平台上能正常运行。

因此证明了该EDMA channel 能正常运行,在系统运行中并没有被其他资源所占用。

我刚刚问了下做系统端的同事,实际上,在系统端,它们并没有用ping-pong buffer。

仅仅用了一个buffer。

这样的话,会不会,外设正在该buffer写数据,我同时用EDMA去同时读该buffer数据内容,

会不会因为同一地址,同时读写使系统崩溃?

如果这样,将该数据缓冲的单一buffer,改成ping-pong buffer,是否可以避免此问题的出现?

EDMA读ping buffer时,外设写pong buffer。外设写完pong-buffer,EDMA读pong buffer,外设在ping buffer中填充数据,如此循环。

非常感谢!

BRS,

Meng

Tony Tang:

回复 Lingcon Meng:

只用一个buffer产生的冲突也并不会导致系统崩溃,不同的master读同一个地址跟读不同地址是一回事,因为DDR总线在一个时间点只能处理一个访问请求,不同的master发起的访问都是在排队的。

所以我认为改成ping-pong也没用。

另外,崩溃后,ARM端还能正常运行吗?如果仅仅是DSP出了问题(如果不是跑飞了),不会影响ARM端的。

我更多的觉得还是程序有问题,或者DDR不稳定。

Lingcon Meng:

回复 Tony Tang:

Hello Tony,

非常感谢您的恢复,目前还不确定,到底是哪儿出了问题。

但是代码在DSP端,单独运行,或者没有添加EDMA3,代码能正常工作。

明天不行换块板子再试试。

再次感谢!

BRS,

Meng

赞(0)
未经允许不得转载:TI中文支持网 » C674+ DSP EDMA3 搬移数据,会不会引起数据总线冲突
分享到: 更多 (0)