shangbo.bowen
驱动牛犊
驱动牛犊
  • 注册日期2009-11-19
  • 最后登录2009-12-08
  • 粉丝0
  • 关注0
  • 积分5分
  • 威望41点
  • 贡献值1点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:1765回复:6

请教牛牛们PC机VC实现USB块传输速度慢的问题!!

楼主#
更多 发布于:2009-11-19 13:14

VC关键代码如下:
BULK_TRANSFER_CONTROL bulkControl;

bulkControl.pipeNum =0;
nBytes=0;
BOOL bResult= FALSE;
DWORD ioctl_val = IOCTL_EZUSB_BULK_WRITE;//预设CTL_CODE参数为写,就是向设备写数据

bResult = DeviceIoControl (m_hDevice,//著名的ioctl函数
    ioctl_val,//CTL_CODE参数,标志你是从设备读数据还是向设备写数据
    &bulkControl,//传入参数,此处传入要使用的端点号
    sizeof (BULK_TRANSFER_CONTROL),//传入参数的大小
    aa,//读写数据的缓冲区
    512,//读写数据的长度
    (unsigned long *)&nBytes,//驱动实际返回的数据长度
    NULL);

//解释:
unsigned char aa[512];
//固体的配置如下:
Interface Size 116
Pipe:  0   Type: BLK Endpoint:  2 OUT  MaxPktSize: 0x200
Pipe:  1   Type: INT Endpoint:  1 OUT  MaxPktSize: 0x40
Pipe:  2   Type: INT Endpoint:  1 IN   MaxPktSize: 0x40
Pipe:  3   Type: CTL Endpoint:  0 OUT  MaxPktSize: 0x40
Pipe:  4   Type: CTL Endpoint:  0 IN   MaxPktSize: 0x40

我通过DeviceIoControl 发送27M的东西需要17秒左右,这样的速度离USB2.0的高速差的太多,而且27M的数据我已经在调用这些函数时是已经打包好的,数据格式是512的正倍数,不存在数据耗时的问题。
请教各位高手,这是什么原因呢??
shangbo.bowen
驱动牛犊
驱动牛犊
  • 注册日期2009-11-19
  • 最后登录2009-12-08
  • 粉丝0
  • 关注0
  • 积分5分
  • 威望41点
  • 贡献值1点
  • 好评度0点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2009-11-19 16:12
USB固体是固定的,就只能接收512byte,但是相同的固体环境使用以前的软件版本,传输就可快,具体不能定位问题所在,望各位高手给你指点迷津。
wwm_820924
驱动牛犊
驱动牛犊
  • 注册日期2004-07-04
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分21分
  • 威望169点
  • 贡献值1点
  • 好评度22点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2009-11-23 08:59
如果驱动是自己写的话,可以改用创建内核模式线程轮询的方式,每个URB包缓冲区设大点,我用的256*1024,速度能上23MB/s。我的理解,固件512一个包,是协议层上的一个包大小,应用层缓冲区可以更大,总线驱动会按协议自己分包。

我也有点困惑,速度就是上不了30MB/s?
wwm_820924
驱动牛犊
驱动牛犊
  • 注册日期2004-07-04
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分21分
  • 威望169点
  • 贡献值1点
  • 好评度22点
  • 原创分0分
  • 专家分0分
地板#
发布于:2009-11-23 09:01
Sorry!我看成IN操作了,估计OUT操作原理也查不多。
usbwolf
驱动牛犊
驱动牛犊
  • 注册日期2009-10-27
  • 最后登录2010-01-18
  • 粉丝0
  • 关注0
  • 积分25分
  • 威望231点
  • 贡献值1点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2009-11-24 15:51
你在测试的应用程序中如果用一个线程不停的读取数据的话,cpu会不会一直占用100%呢?
shangbo.bowen
驱动牛犊
驱动牛犊
  • 注册日期2009-11-19
  • 最后登录2009-12-08
  • 粉丝0
  • 关注0
  • 积分5分
  • 威望41点
  • 贡献值1点
  • 好评度0点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2009-12-02 10:16
首先:先谢谢各位了!
问题已经找到并解决了,问题出在DeviceIoControl函数调用那里,已经需改传输32M的数据只要45ms,达到公司的要求了!嘿嘿
wolfgang
驱动牛犊
驱动牛犊
  • 注册日期2009-08-22
  • 最后登录2010-10-20
  • 粉丝0
  • 关注0
  • 积分32分
  • 威望291点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2009-12-02 13:29
你这速度也太快了吧,都超过usb的理论传输速度了
游客

返回顶部