完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
本帖最后由 一只耳朵怪 于 2018-6-22 09:28 编辑
我用的芯片是AM1808,最近采用了EDMA实现了从DDR往EMIF接口传数据。在对EDMA做传输压力测试后发现,EDMA在传92K数据时,速率只能达到2.4MB/s。但传32MB数据时,速率能达到320MB/s。EDMA速率真是这样吗,在传几十K数据的时候速率比较慢? |
|
相关推荐
14个回答
|
|
我有点怀疑上面得到的结果,因为EMIF的速度最高100MHz, 最高也就100/3 *2byte,DDR往EMIF的瓶颈在EMIF,所以不可能达到320Mbyte/S的.
http://processors.wiki.ti.com/index.php/Main_Page Think Over Before Asking. http://www.catb.org/~esr/faqs/smart-questions.html#goal |
|
|
|
lifei639156 发表于 2018-6-21 07:18 Tony,你好。后来我又去测了一下,发现是我测试的问题。32MB数据情况下,传输速率大概9.7MB/s。但传输92K时传输速率还是比较低只有2MB/s的样子(我大概需要4MB/s 的速率)。我做了一份试验报告,里面包括了我测试代码、试验硬件环境以及示波器测试结果。Tony你的邮箱是什么? 对了,有什么EDMA和EMIF的 例子吗? |
|
|
|
wyfwer 发表于 2018-6-21 07:28 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,自己看一下说明配置吧。 http://processors.wiki.ti.com/index.php/Main_Page Think Over Before Asking. http://www.catb.org/~esr/faqs/smart-questions.html#goal |
|
|
|
lifei639156 发表于 2018-6-21 07:35 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 怎么把这段高电平的时间再减少。 |
|
|
|
wyfwer 发表于 2018-6-21 07:55 #1. 为什么要用这种2byte一次的传输方式?是应用上有这种特殊要求?这样下来还不如CPU直接读写来的快。因为在不断的切换EDMA的parameter set,这是要时间的,而且总线上不能pipe line起来,完全体现不了EDMA在速度上的优势了。 #2. 没有办法,如果是ACNT大于2byte,CS之间都不会有高电平。只会在burst size为边界时出现一次CS高电平。 http://processors.wiki.ti.com/index.php/Main_Page Think Over Before Asking. http://www.catb.org/~esr/faqs/smart-questions.html#goal |
|
|
|
lifei639156 发表于 2018-6-21 08:00 Tony,是这样。我这边是把DDR里面一整块数据传到与EMIF口相连的一块芯片里面的一个寄存器。寄存器为16bit,这个寄存器映射到EMIF的一个地址。这就要求在EDMA传输中目标地址不能变,而且一直保持同一个地址。我想问一下能以一次A传输把这么大一块数据传到一个寄存器里面吗。 |
|
|
|
wyfwer 发表于 2018-6-21 08:19 那边是一个FIFO吧?如果是FIFO就可以啊。目的地址index设为0就可以了。本身不管传多少数,在总线上都是一个一个传输的,你分开传,还是一起传,其实在总线上表现是一样的,只是CS间隔的区别而已。 http://processors.wiki.ti.com/index.php/Main_Page Think Over Before Asking. http://www.catb.org/~esr/faqs/smart-questions.html#goal |
|
|
|
lifei639156 发表于 2018-6-21 08:26 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启动延时吗 |
|
|
|
wyfwer 发表于 2018-6-21 08:43 #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. http://processors.wiki.ti.com/index.php/Main_Page Think Over Before Asking. http://www.catb.org/~esr/faqs/smart-questions.html#goal |
|
|
|
lifei639156 发表于 2018-6-21 09:01 Tony,看了你推荐的文章。从文章上看overhead是芯片硬件的基本特性,难道 overhead latency 就不能减小了吗? |
|
|
|
lifei639156 发表于 2018-6-21 09:01 Tony,就是这个Overhead是否还是跟什么因素有关系的,虽然不能抹去这段时间但至少可以减少这段时间? |
|
|
|
即然定义为overhead就是没办法减小了。 对于你目前的测试,并不存在与其它资源的冲突,比如有其它master在访问DDR或EMIF,互相之间不存在资源仲裁导致的延时,所以没有办法减少了。 所以EDMA用来传大数据效率才高,这样overhead平均到每个数就很少了。 不过这个速度应该足够你的应用需求了吧。 http://processors.wiki.ti.com/index.php/Main_Page Think Over Before Asking. http://www.catb.org/~esr/faqs/smart-questions.html#goal |
|
|
|
顺便请你帮个忙,精确量一下这个延时是多长。 补充一下,这个延时跟内部总线及EDMA模块的频率有关,CPU频率设定后,总线及EDMA的频率也就定了,所以CPU主频跑的越高,这个延时会少一些。这个你也可以帮忙验证一下,将CPU设成不同频率测量一下延时。 http://processors.wiki.ti.com/index.php/Main_Page Think Over Before Asking. http://www.catb.org/~esr/faqs/smart-questions.html#goal |
|
|
|
lifei639156 发表于 2018-6-21 09:48 Tony,你说的两个问题我都会去测一下,但可能需要到下周了。但是有一个问题我需要向你确认一下,就是如何测才是精确的。我这边使用GPIO口和EMIF的cs的电平变化来看这段时间。 |
|
|
|
只有小组成员才能发言,加入小组>>
336 浏览 1 评论
529 浏览 2 评论
NA555DR VCC最低电压需要在5V供电,为什么用3.3V供电搭了个单稳态触发器也使用正常?
774 浏览 3 评论
MSP430F249TPMR出现高温存储后失效了的情况,怎么解决?
651 浏览 1 评论
对于多级放大电路板,在PCB布局中,电源摆放的位置应该注意什么?
1130 浏览 1 评论
AT32F407在USART2 DMA发送数据时,接包接到了要发送的数据,程序还是处于等待传输完成的标识判断中,为什么?
56浏览 29评论
137浏览 23评论
请问下tpa3220实际测试引脚功能和官方资料不符,哪位大佬可以帮忙解答下
252浏览 20评论
请教下关于TAS5825PEVM评估模块原理图中不太明白的地方,寻求答疑
201浏览 14评论
两个TMP117传感器一个可以正常读取温度值,一个读取的值一直是0,为什么?
57浏览 13评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-23 06:28 , Processed in 1.015956 second(s), Total 73, Slave 67 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号