xuxu13810754421
驱动牛犊
驱动牛犊
  • 注册日期2004-07-08
  • 最后登录2005-07-21
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:6808回复:18

为什么会有提示"超出了USB控制器带宽”的对话框?

楼主#
更多 发布于:2004-07-09 10:15
我自己编写的USB驱动安装之后,有时将设备与主机连接的USB拔下再插上之后,会弹出“超出了USB控制器带宽”的对话框,详细信息里面显示“控制器没有足够的带宽供设备使用,它要求有3025%的带宽”而且这个百分数不确定,一会是这个值,一会是别的值。哪位高手帮我指点一下迷津,在下不甚感激!
pengenwen
禁止发言
禁止发言
  • 注册日期2003-03-07
  • 最后登录2016-04-11
  • 粉丝0
  • 关注0
  • 积分1586分
  • 威望8380点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2004-07-09 10:17
用户被禁言,该主题自动屏蔽!
bobbysun2000
驱动小牛
驱动小牛
  • 注册日期2003-08-01
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分40分
  • 威望4点
  • 贡献值0点
  • 好评度4点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2004-07-09 10:26
应该是驱动有问题。我以前也遇到过这种问题,不但有是由这种提示,而且一使用WriteFile或ReadFile之类的语句就蓝屏重起。后来发现是端点设置有问题,还有在驱动种且记不可用new来申请内存。
jinghuiren
驱动巨牛
驱动巨牛
  • 注册日期2002-06-01
  • 最后登录2008-10-27
  • 粉丝0
  • 关注0
  • 积分291分
  • 威望460点
  • 贡献值0点
  • 好评度428点
  • 原创分0分
  • 专家分0分
地板#
发布于:2004-07-09 10:28
我遇到过这个问题,在98下总会出这个框,到现在也没有解决
在2k下偶尔会出,重新启动一下就好了,我觉得通常这个情况是因为枚举成全速了,不知道诸位有何看法。
bobbysun2000
驱动小牛
驱动小牛
  • 注册日期2003-08-01
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分40分
  • 威望4点
  • 贡献值0点
  • 好评度4点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2004-07-09 11:07
是吗?我觉得不会啊。我第一次用DS生成USB驱动时,把端点1和2都搞成BULK了,但实际在主机请求描述符时,我的控制器送过去的是端点1为中断,端点2为BULK,当驱动装上后,就有时出现这种情况。后来我在驱动中把这个改过来后,就没这样了
mirror
驱动牛犊
驱动牛犊
  • 注册日期2004-05-10
  • 最后登录2005-01-11
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2004-07-09 11:21
这个和端点设置有关系

尤其是在中断传输中,端点的轮寻时间,一般设为10MS一次比较可靠

还有每次中断传输的数据包的大小也有直接关系

jinghuiren
驱动巨牛
驱动巨牛
  • 注册日期2002-06-01
  • 最后登录2008-10-27
  • 粉丝0
  • 关注0
  • 积分291分
  • 威望460点
  • 贡献值0点
  • 好评度428点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2004-07-09 12:47
这个和端点设置有关系

尤其是在中断传输中,端点的轮寻时间,一般设为10MS一次比较可靠

还有每次中断传输的数据包的大小也有直接关系

 


楼上这位仁兄说的有道理,楼主可以试试,现在回想一下,我的当初也可能是设置中断端点是导致的,不过在有的机器上是不出问题的。
jiangyiyong
驱动大牛
驱动大牛
  • 注册日期2002-11-28
  • 最后登录2004-08-30
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
7楼#
发布于:2004-07-09 13:35
为什么不在驱动中控制一下带宽?
我来自中国 抵制日货
xuxu13810754421
驱动牛犊
驱动牛犊
  • 注册日期2004-07-08
  • 最后登录2005-07-21
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
8楼#
发布于:2004-07-09 15:00
除了默认的端点0外,我定义了五个端点,1、2做BULK,3、4做同步,5做中断,但事实上我只用了1和2端点。我的现象跟bobbysun2000兄弟的几乎一样,调用READFILE时,会一直不返回,而WRITEFILE会重启,而且,重启之后一般蓝屏。我检查了固件程序的,端点也是这么定义的呀,我想问的是用DS做驱动的时候会指定端点类型,是不是那个就对应传输方式?因为驱动中只能在READ和WRITE中只能看到BULK端点的影子。我的固件中中断的时间间隔值为1,mirror所说的是不是就应该是这里?我包,除了中断是1,其他的都是64。其实我的驱动是模仿别人的写的,几乎代码没有变化,但是别人的可以,我的就不行!
bobbysun2000
驱动小牛
驱动小牛
  • 注册日期2003-08-01
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分40分
  • 威望4点
  • 贡献值0点
  • 好评度4点
  • 原创分0分
  • 专家分0分
9楼#
发布于:2004-07-09 17:22
我在用DS做驱动时把端点1设置为中断方式、端点2为BULK方式,端点1作为命令通道,用DeviceIoControl读写,端点2用DS生成的Read、Write函数,总之一切按照固件给主机的配置信息设置(出了端点2
的最大传输包尺寸),就OK了,没有再蓝屏过,你可以用SoftIce跟踪进去看看你读写的数据是不是正确传送
metalwing
驱动中牛
驱动中牛
  • 注册日期2003-10-13
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分178分
  • 威望58点
  • 贡献值0点
  • 好评度17点
  • 原创分0分
  • 专家分0分
10楼#
发布于:2004-07-10 20:06
用DS中的Monitor看一下有没有pipe open failed这样的信息。如果是有,而你的驱动程序已经configure了所有的pipe,那可能是固件程序中你的Descriptor的大小设置错误致使的初始化错误。
新手上路,请多关照.
xuxu13810754421
驱动牛犊
驱动牛犊
  • 注册日期2004-07-08
  • 最后登录2005-07-21
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
11楼#
发布于:2004-07-12 09:15
固件肯定是没有问题的,因为已经有人编写这个的驱动,我只是模仿别人的,别人的可以,我的就会出现这种问题,问题肯定出在我的驱动里面。
metalwing
驱动中牛
驱动中牛
  • 注册日期2003-10-13
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分178分
  • 威望58点
  • 贡献值0点
  • 好评度17点
  • 原创分0分
  • 专家分0分
12楼#
发布于:2004-07-12 10:35
这个问题我也遇到过,现在解决了,不过怎么回事还不太清楚,
好象是固件方面的问题,特别是USB端口方面,建议你查一下
加载的设备端口分配是否是你想要在固件中定义的,可以通过
USBVIEW看,我的好象就是定义错误,导致带宽不够.
一点愚见,不知对否.
新手上路,请多关照.
xuniyiqi
驱动牛犊
驱动牛犊
  • 注册日期2003-08-28
  • 最后登录2005-05-12
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
13楼#
发布于:2004-07-12 12:41
张老大,我是小俞。你也到这里来取经了啊!!呵呵
我觉得你出现的问题在于:在用DS进行编写驱动时,不是要求配置端点吗?可能问题就出在这里,你仔细查查,你用DS进行配置的和固件中设置的一样否?
而且我也一直在想:根据我看的资料,传输数据是用DeviceIoControl来进行的,我也纳闷DeviceIoControl和WriteFile、readfile有什么不同??还是有点迷惑?

[编辑 -  7/12/04 by  xuniyiqi]
xuxu13810754421
驱动牛犊
驱动牛犊
  • 注册日期2004-07-08
  • 最后登录2005-07-21
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
14楼#
发布于:2004-07-12 12:54
端点我检查过了的,没什么问题,是匹配的。用DeviceIoControl时默认的是端点0,数据可以双向流动,而ReadFile和WriteFile是通过你指定的端点传输数据,我认为前者是控制传输,而后者则是跟你端点的类型有关。
bobbysun2000
驱动小牛
驱动小牛
  • 注册日期2003-08-01
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分40分
  • 威望4点
  • 贡献值0点
  • 好评度4点
  • 原创分0分
  • 专家分0分
15楼#
发布于:2004-07-12 13:10
deviceiocontrol默认端点0什么意思?在DeviceIoControl处理时根据CTRL_CODE有自己的处理程序,要自己添加的。在处理程序中,用什么端点传输数据,当然是用相应端点的构造URB的函数,比如我的使用端点1传命令,端点1为中断端点,就有:
pUrb=m_Endpoint1OUT.BuildInterruptTransfer(
                       &combuf,    //命令缓冲
  1,          //字节数
  TRUE,
  NULL,
  NULL,
  FALSE);
然后提交即可,为什么说是默认端点0?
xuxu13810754421
驱动牛犊
驱动牛犊
  • 注册日期2004-07-08
  • 最后登录2005-07-21
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
16楼#
发布于:2004-07-12 13:46
没错,是我搞错了,我在处理程序中是用向导定义的m_Lower发送的厂商请求,所以当然会通过端点0来传输。
xuniyiqi
驱动牛犊
驱动牛犊
  • 注册日期2003-08-28
  • 最后登录2005-05-12
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
17楼#
发布于:2004-07-12 16:35
没错,是我搞错了,我在处理程序中是用向导定义的m_Lower发送的厂商请求,所以当然会通过端点0来传输。


由0号端点构成的管道称为缺省管道,它是双向的。在USB设备连接、上电或者复位后,USB系统软件就可以使用该管道来和USB逻辑设备进行通信。就是任何USB设备都必须在其0号端点的缺省管道中支持控制传输。但除0号端点外,USB设备还可以拥有其他的控制端点。
xuxu13810754421
驱动牛犊
驱动牛犊
  • 注册日期2004-07-08
  • 最后登录2005-07-21
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
18楼#
发布于:2004-07-14 15:32
这个问题终于解决了!尽管我还是没有找到问题的根本之所在。我用BUS HOUND看到传递回来的端点描述符只有端点1和端点2(原因到现在也没想明白,因为用USB VIEW看到的确实是5个端点描述符,而且接口描述符中也是这么定义的),于是,我把设备驱动程序中的多余的另外三个端点删除掉,就从此没有出现那些奇形怪状的问题。现在反过来想,也许是因为只传递了两个端点描述符,可是接口描述符中也说是5个,于是把后面的一些数据当作端点描述符,因此就有可能最大包字段超出范围,出现这种提示!
游客

返回顶部