打印

STR9 USB BULK速度怎样提高?

[复制链接]
5006|6
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
sparkman|  楼主 | 2007-1-7 11:52 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
USB, ST, DMA, DM, hz
我用STR9 USB HID DEMO修改成BULK传输程序后,已经能用了。可是速度只有130KB/S,离理论速度1.5M/s还差得远。
我已经尝试了很多办法,发现问题不在PC的驱动上,因为即使不用驱动,使用USB HOUND也达不到高速。另外,问题也不在MCU处理速度上,48MHz和96Mhz的主频下传输速度都一样。还有,单缓冲双缓冲也没有速度上的区别。DMA应该也不能解决问题,因为即使不更新缓冲区的内容(DMA就是自动干这个的),速度也一样。
另外,理论上说全速设备的端口描述的MaxPacket大小应该是64,32……,可是我把它设置到256还能用,这是速度明显比设置到64快得多(64的速度只有30KB/S)。但是不能设置成更大了,更大就会出错,不能正常传输。这一点我一直不理解。

特请教专家,USB BULK速度上不去会是什么原因?怎样解决?
谢谢!
沙发
starm| | 2007-1-7 14:15 | 只看该作者

关注这个问题, 期望专家释疑.

使用特权

评论回复
板凳
浪淘沙| | 2007-1-7 21:49 | 只看该作者

USB BULK的速度受多种因素影响

关于你的BULK传输慢的问题,我认为主要原因应在主机方面;通常若主机软件要求传输数据是较小的长度时,下层的USB驱动不能及时地发出数据包,造成大量的带宽损失。以发送1MB数据举例说明:

方法一:
for (i=0;i<16;i++)
  USB_Bulk_Send(Buffer, 65536); 一次发送调用发送64KB数据

方法二:
for (i=0;i<16384;i++)
  USB_Bulk_Send(Buffer, 64); 一次发送调用只发送64B数据

上述方法一比方法二快很多,你所得出的130KB/s估计是使用方法二,每次只发送64或128或256字节。

至于你把MaxPacket大小设为256也可以用,这绝对是主机USB驱动的BUG,这个问题是出在你的USB HOUND上面。

使用特权

评论回复
地板
pumac| | 2007-1-8 09:31 | 只看该作者

应该是pc端问题

上位机的数据buffer如果加到很大,比如32K,速度会有明显提高

使用特权

评论回复
5
ijk| | 2007-1-8 11:34 | 只看该作者

STR9 USB BULK速度最快

  STR9 USB BULK速度最快应该能达到500~600kB/s,或许还能更快些。STR7的demo板上用外部RAM模拟了1个U盘,大概就能达到上面的速度。
  130kB/s还有很多的提升空间。就看怎么想办法了

使用特权

评论回复
6
sparkman|  楼主 | 2007-1-8 13:45 | 只看该作者

510KB/s了

谢谢各位,我修改驱动,把BULKUSB_MAX_TRANSFER_SIZE  增加到1023,
同样固件的MaxPacket也加大到1023,速度就上去了。
不过我还不明白为什么。按理说全速的MaxPacket理论上不能超过64的。

使用特权

评论回复
7
浪淘沙| | 2007-1-8 22:00 | 只看该作者

全速的MaxPacket不能超过64,问题是你的驱动是否遵循这个原则

这绝对是主机驱动的问题!

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

8

主题

12

帖子

0

粉丝