嵌入式开发者社区

标题: c6748 usb_dev_bulk传输很耗性能 [打印本页]

作者: silent123    时间: 2015-6-29 23:46
标题: c6748 usb_dev_bulk传输很耗性能
我的系统由arm和c6748组成,arm端使用usb把声音数据传输给6748,再由c6748对声音进行编码或者解码(g729、g723、ilbc等算法)后通过usb把数据传给arm端,c6748使用的usb驱动是startware里面的usb_dev_bulk。

问题是,当传输的数据量较大时(arm端每30ms向c6748写17k的数据),c6748光传输数据就耗掉了40%的cpu。请问要怎么解决这个问题?在usb_dev_bulk驱动中加入cppidma的使用?使用其他类型的usb传输???还是其他办法,求走过路过的大神给点提示,不胜受恩感激!!!

作者: 希望缄默    时间: 2015-6-30 11:21
USB BULK 是 PIO 模式当然占用 CPU 资源
默认情况下 StarterWare USB 库只在 USB DEV MSC / USB HOST MSC 模式提供 CPPIDMA 支持

http://processors.wiki.ti.com/index.php/StarterWare_USB
[attach]337[/attach]

之前我们有在 BULK 模式使能 CPPI DMA 但是速度提升不明显 如果有需要可以邮件联系技术支持获取

作者: silent123    时间: 2015-6-30 14:07
希望缄默 发表于 2015-6-30 11:21
USB BULK 是 PIO 模式当然占用 CPU 资源
默认情况下 StarterWare USB 库只在 USB DEV MSC / USB HOST MSC  ...

非常感谢您耐心的解答!我又用usb_dev_msc试了一下(去掉了源码中ramdisk的读写),arm端也是每隔30ms向c6748发送17k的数据,这时CPU使用率竟然飙到了90%,比没有使用cppidma的usb_dev_bulk还高,这是为什么呢?理论上usb_dev_msc使用了dma不是应该省一些性能的吗?
作者: 希望缄默    时间: 2015-6-30 20:09
不会吧 你是怎样统计 cpu 占有率的?
作者: silent123    时间: 2015-7-1 08:40
希望缄默 发表于 2015-6-30 20:09
不会吧 你是怎样统计 cpu 占有率的?

用Load_getCPULoad()函数获得的
作者: 希望缄默    时间: 2015-7-1 09:11
silent123 发表于 2015-7-1 08:40
用Load_getCPULoad()函数获得的

移植到 SYS/BIOS 下了?
作者: silent123    时间: 2015-7-1 14:15
希望缄默 发表于 2015-7-1 09:11
移植到 SYS/BIOS 下了?

1、是的,移植到sysbios下了。程序运行起来后,在主机下有节点/dev/sda,我使用open函数打开设备,然后调用write和read函数进行数据的读写的。数据能够进行读写,就是传输较大数据时cpu使用率很高!

2、请问如果我把cppidma移植到usb_dev_bulk中,这时进行数据的传输是不是会减少cpu资源的使用,效果明显吗?比如说,我现在主机每30ms向c6748写17K的数据,c6748会耗掉40%左右的性能,如果引入cppidma的使用能否降到10%左右呢?

谢谢!
作者: 希望缄默    时间: 2015-7-1 19:40
理论上是这样的  但是我觉得很奇怪 msc 方式不应该占用率这么高 目前我也没有做过响应测试 可能帮不上你了
作者: silent123    时间: 2015-7-1 22:55
希望缄默 发表于 2015-7-1 19:40
理论上是这样的  但是我觉得很奇怪 msc 方式不应该占用率这么高 目前我也没有做过响应测试 可能帮不上你了  ...

对您耐心的帮助表示由衷的感谢!

我想把cppidma用到usb_dev_bulk试试,学着usb_dev_msc里面弄了一下,但是不能工作。感觉对cppidma的工作原理还是很模糊,看了几遍datasheet里面的介绍也没看懂,您能提供给我一些cppidma的学习资料吗?最好是中文的,谢谢!
作者: 希望缄默    时间: 2015-7-2 10:45
silent123 发表于 2015-7-1 22:55
对您耐心的帮助表示由衷的感谢!

我想把cppidma用到usb_dev_bulk试试,学着usb_dev_msc里面弄了一下,但 ...

我们有使能 CPPI DMA USB BULK 的例程 你可以发邮件索取的
作者: silent123    时间: 2015-7-3 14:02
希望缄默 发表于 2015-7-2 10:45
我们有使能 CPPI DMA USB BULK 的例程 你可以发邮件索取的

谢谢,我自己弄了一下,遇到了一些问题,希望您帮忙解答一下。
1、CPPIDMA接受到数据后产生的中断是不是就是USB的那个中断(SYS_INT_USB0)?
2、我现在调用dmaRxCompletion函数已经可以正确获取主机发送过来的数据了,但是主机发送一段时间的数据后就发送不过去了,一直阻塞在usb_bulk_write()函数,可能是c6748这边哪里没有处理好,请问您遇到过相同的问题吗?

谢谢
作者: silent123    时间: 2015-7-3 17:55
希望缄默 发表于 2015-7-2 10:45
我们有使能 CPPI DMA USB BULK 的例程 你可以发邮件索取的

谢谢,我自己弄了一下,但是遇到了一些问题,想向您请教一下:
1、cppidma接受到数据后产生的中断是不是就是usb的那个中断(SYS_INT_USB0)?
2、现在我使用dmaRxCompletion()函数已经可以从队列中读出主机发送过来的数据,但是主机使用usb_bulk_write函数发送数据一段时间后就阻塞住了,不能再发送数据了。请问您遇到过相同的问题吗?

谢谢!
作者: xtong533    时间: 2016-12-29 20:01
希望缄默 发表于 2015-7-2 10:45
我们有使能 CPPI DMA USB BULK 的例程 你可以发邮件索取的

我也遇到了CPPI DMA USB 的问题,请问,怎样发邮件索取
作者: xtong533    时间: 2016-12-29 20:13
silent123 发表于 2015-7-1 14:15
1、是的,移植到sysbios下了。程序运行起来后,在主机下有节点/dev/sda,我使用open函数打开设备,然后调 ...

请问 CCPI DMA 该怎样配置寄存器。能把代码贴出来吗
作者: xtong533    时间: 2016-12-30 00:40
xtong533 发表于 2016-12-29 20:01
我也遇到了CPPI DMA USB 的问题,请问,怎样发邮件索取

请问,c6748 usb_dev_bulk在没有CPPI DMA的情况下速度达到了多少?
加了CPPI DMA的情况下速度达到了多少?




欢迎光临 嵌入式开发者社区 (https://51ele.net/) Powered by Discuz! X3.4