This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

EDMA 添加到系统不能正常工作,会不会引起数据总线竞争?



Hello,

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

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

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

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

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

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

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

请高手指导!

非常感谢!

 

 

 

  • Lingcon,

    “EDMA的应用会不会,引起数据总线冲突,从而导致系统崩溃。 当EDMA将数据从DDR3源地址搬移到DDR3的目标地址时,会不会引起DDR3总线,或者其它总线冲突(源数据端,数据仍然在更新中,ping-pong buffer)?”

    【Chris】EDMA访问DDR的请求最终会有DDR控制来处理,所以即使有两个master要访问同一个DDR地址,到了DDR控制器侧也会是顺序执行。

    会不会是你使用的EDMA通道中系统软件里面已经有其他地方已经使用了?

  • 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

     

     

     

     

     

     

     

     

  • Lingcon,

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

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

    我在前一个帖子已经回复如下,不会出现你说的情况。

    【Chris】EDMA访问DDR的请求最终会有DDR控制来处理,所以即使有两个master要访问同一个DDR地址,到了DDR控制器侧也会是顺序执行。

    还请你在代码里面添加一些打印,具体定位一下问题出现的代码位置,是否是启动EDMA。相关EDMA的参数也请打印出来检查是否有异常。