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

EDMA速率问题

我用的芯片是AM1808,最近采用了EDMA实现了从DDR往EMIF接口传数据。在对EDMA做传输压力测试后发现,EDMA在传92K数据时,速率只能达到2.4MB/s。但传32MB数据时,速率能达到320MB/s。EDMA速率真是这样吗,在传几十K数据的时候速率比较慢?  

Tony Tang:

我有点怀疑上面得到的结果,因为EMIF的速度最高100MHz, 最高也就100/3 *2byte,DDR往EMIF的瓶颈在EMIF,所以不可能达到320Mbyte/S的.

Yingjie Shen:

回复 Tony Tang:

    Tony,你好。后来我又去测了一下,发现是我测试的问题。32MB数据情况下,传输速率大概9.7MB/s。但传输92K时传输速率还是比较低只有2MB/s的样子(我大概需要4MB/s 的速率)。我做了一份试验报告,里面包括了我测试代码、试验硬件环境以及示波器测试结果。Tony你的邮箱是什么?

   对了,有什么EDMA和EMIF的 例子吗?

 

Tony Tang:

回复 Yingjie Shen:

92K的块也不少了,怎么也比EDMA的最小可配burst size大多了,所以其实际传输速度是一样的,区别在于额外的开销也是一样的,所以计算下来的平均速度就下来的。这个额外开销指的是软件的干预:配置EDMA参数等。

EMIFA的速度取决于3点:

#1. 时序参数的配置:CEnCFG,里的读写setup, strobe, hold,这几个参数要根据其外接的芯片的电气时序要求计算配置,做为简单测试,都设为0试一下,即每个阶段一个cycle(100MHz EMIFA时钟下,即为10ns,一般也够了),保险的做法,还是对照一下外接设备的手册.

#2. EMIFA接口时钟:PLL0_SYSCLK3,或者PLL0 Multiplier Out。

#3. 既然用到EDMA,则还跟EDMA burst size有点关系:CFGCHIP0/1

再有跟DDR相关的就只一个寄存器:PBBPR,自己看一下说明配置吧。

Yingjie Shen:

回复 Tony Tang:

Tony,我去设置了一下EMIF口setup、strobe、hold这几个参数,确实从CS波形上看速率变快了(CS有效时间变短,大概10ns左右),第三个建议无有效作用。但我发现每次EMIF操作之间的时间还是有点长。这里我需要说一下我的EDMA操作是每一次传2个byte的字节给EMIF16位数据总线,然后以链式传输实现92K数据的传输。下面图一是对EMIF的setup等三个参数没有进行修改EMIF的CS的时序情况,图二是对EMIF的setup等三个参数进行修改后EMIF的CS情况。

                             图一:时间轴坐标为每个放个250ns

                                                图2 时间轴横坐标为250ns

从图一上看CS低电平之间的高电平持续时间为500ns左右,从图二看cs低电平之间的高电平持续时间为300ns左右。

问题:

     1、cs低电平之间的高电平主要是EDMA链式传输所需要的时间吗。

     2    怎么把这段高电平的时间再减少。

Tony Tang:

回复 Yingjie Shen:

#1. 为什么要用这种2byte一次的传输方式?是应用上有这种特殊要求?这样下来还不如CPU直接读写来的快。因为在不断的切换EDMA的parameter set,这是要时间的,而且总线上不能pipe line起来,完全体现不了EDMA在速度上的优势了。

#2. 没有办法,如果是ACNT大于2byte,CS之间都不会有高电平。只会在burst size为边界时出现一次CS高电平。

Yingjie Shen:

回复 Tony Tang:

Tony,是这样。我这边是把DDR里面一整块数据传到与EMIF口相连的一块芯片里面的一个寄存器。寄存器为16bit,这个寄存器映射到EMIF的一个地址。这就要求在EDMA传输中目标地址不能变,而且一直保持同一个地址。我想问一下能以一次A传输把这么大一块数据传到一个寄存器里面吗。

Yingjie Shen:

回复 Tony Tang:

Tony,你的上一个回答很好解决了我的问题,太感谢了。另外我这里还有一个问题。

  是这样的我发现启动EDMA的过程有点慢。我的代码如下:

   (*((volatile unsigned int *)(0x01E26060)))=0x00;  // 把一个GPIO口置为低电平

    (*((volatile unsigned int *)(0x01C02010))) | =(0x01<<25);  // 启动EDMA,EDMA的配置在之前的其他地方已设置完成

    另外在EDMA的中断子程序里面把上面拉低的GPIO口拉高为高电平。然后用示波器显示GPIO口和EMIF的CS引脚电平变化情况。试验结果如下(图中黄线是GPIO口电平,青线是CS的情况):

 从图中看出GPIO口变为低电平后需要一段比较长的时间CS引脚电平才反应过来。

 问题:

       1 为什么会产生这种现象,能有什么方法来减小这个时间吗?

       2 link的ping-pong传输能克服这种EDMA启动延时吗

   

Tony Tang:

回复 Yingjie Shen:

#1.  这是EDMA的overhead额外开销,可以看一下EDMA3 Transfer Controller (EDMA3TC)这一节,EDMA在收到触发事件后到发起传输,还有一连串的动作要完成。

下面贴子也是讨论EDMA的overhead的。

http://e2e.ti.com/support/dsp/c6000_multi-core_dsps/f/639/p/442085/1618143?keyMatch=edma%20overhead&tisearch=Search-EN-Everything

#2. 还是会有overhead的。因为EDMA接到触发事件才会将parameter分解为TR命令。所以EDMA对越大的数据传输效率越高。

其实上面你得出的就是这个芯片在这种情况下的EDMA overhead.

Yingjie Shen:

回复 Tony Tang:

Tony,看了你推荐的文章。从文章上看overhead是芯片硬件的基本特性,难道 overhead latency 就不能减小了吗?

赞(0)
未经允许不得转载:TI中文支持网 » EDMA速率问题
分享到: 更多 (0)