Hello,
利用DM8148评估板,在DSP C674+端开发了图像处理算法。在DSP端单独运行DSP算法,算法能正常工作。
然后将算法lib加载评估板提供的代码中,算法也能正常工作,整个系统能够正常运行。
然而,为了提高算法计算速度,将子图像提取用EDMA代替(EDMA3的源地址和目标地址都在DDR3),在DSP端代码单独测试,DSP也能正常工作。
然而,将该带有EDMA3的lib,重新添加到评估板系统的代码中,整个系统崩溃,算法不能正常运行。
EDMA的应用会不会,引起数据总线冲突,从而导致系统崩溃。
当EDMA将数据从DDR3源地址搬移到DDR3的目标地址时,会不会引起DDR3总线,或者其它总线冲突(源数据端,数据仍然在更新中,ping-pong buffer)?
什么因素能导致该问题产生?
请高手指导!
非常感谢!
Chris Meng:
Lingcon,
“EDMA的应用会不会,引起数据总线冲突,从而导致系统崩溃。 当EDMA将数据从DDR3源地址搬移到DDR3的目标地址时,会不会引起DDR3总线,或者其它总线冲突(源数据端,数据仍然在更新中,ping-pong buffer)?”
【Chris】EDMA访问DDR的请求最终会有DDR控制来处理,所以即使有两个master要访问同一个DDR地址,到了DDR控制器侧也会是顺序执行。
会不会是你使用的EDMA通道中系统软件里面已经有其他地方已经使用了?
Lingcon Meng:
回复 Chris Meng:
Hello Chris,
非常感谢您的回复。
我也考虑过,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
Chris Meng:
回复 Lingcon Meng:
Lingcon,
会不会,外设正在该buffer写数据,我同时用EDMA去同时读该buffer数据内容,
会不会因为同一地址,同时读写使系统崩溃?
我在前一个帖子已经回复如下,不会出现你说的情况。
【Chris】EDMA访问DDR的请求最终会有DDR控制来处理,所以即使有两个master要访问同一个DDR地址,到了DDR控制器侧也会是顺序执行。
还请你在代码里面添加一些打印,具体定位一下问题出现的代码位置,是否是启动EDMA。相关EDMA的参数也请打印出来检查是否有异常。