ruozhen
驱动牛犊
驱动牛犊
  • 注册日期2002-11-27
  • 最后登录2005-08-04
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:1572回复:8

我的usb设备连续插拔7,80次之后要让我重新装driver

楼主#
更多 发布于:2004-03-05 09:57
说找到新的usb 设备,让我重新安装driver
多次插拔中,以很小的概率出现这种情况。


这是什么原因造成的呢?
zmwk
驱动中牛
驱动中牛
  • 注册日期2001-05-15
  • 最后登录2009-04-05
  • 粉丝0
  • 关注0
  • 积分59分
  • 威望51点
  • 贡献值0点
  • 好评度2点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2004-03-05 10:07
多数情况是不能正确枚举。
因为PC发现USB的设备插入是因为端口的电平变化,如果你的板子上焊有上拉电阻的话,即使不插CPU也可以发现新硬件。极端地说,只要你在电脑USB座子的D+和VCC间加一个1.5k(但愿我没记错)的电阻,它就认为来了新硬件。
新硬件来了以后,它会进行枚举,这是PCI规范定义好的了,USB只是它的子规范。这一过程需要主机的设备管理器、总线驱动和设备固件共同完成。
这也就是说,如果你的设备插入了,PC肯定会发现它,但能不能识别它就看你的固件怎么回应它了。按照现在的状况,它认错了,但它会怪你没回应正确的。所以它把你的硬件当成全新的硬件了。
A strong man can save himself. A great man can save another.
ruozhen
驱动牛犊
驱动牛犊
  • 注册日期2002-11-27
  • 最后登录2005-08-04
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2004-03-05 10:32
但是在绝大部分情况下,我的设备能被识别,只有很小的概率提示我重新装driver,我实在搞不清楚到底什么原因。
dragon_hn
驱动中牛
驱动中牛
  • 注册日期2002-05-18
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分297分
  • 威望40点
  • 贡献值0点
  • 好评度32点
  • 原创分0分
  • 专家分0分
地板#
发布于:2004-03-05 14:09
根据你所说的情况,有可能是内存没有释放,导致多次插拔之后内存不足,驱动崩溃.不过我没遇到过这种情况,纯粹猜测而已.
www.dragon-2008.com 欢迎交流
yyouking
驱动老牛
驱动老牛
  • 注册日期2003-12-18
  • 最后登录2020-04-28
  • 粉丝0
  • 关注0
  • 积分967分
  • 威望114点
  • 贡献值1点
  • 好评度78点
  • 原创分0分
  • 专家分0分
  • 社区居民
地下室#
发布于:2004-03-05 14:31
这个应该是在发送设备描述副的时候出现差错,我也遇到过这种情况用USBVIEW查看是一个不同的PID和VID。
提供: AT89S52+D12开发套件 W78E54+Sl811HST单片机读写U盘套件 PL2303HX-串口转USB 网站http://www.devking.cn 联系 sl811hs@yahoo.com.cn QQ:14441292
ruozhen
驱动牛犊
驱动牛犊
  • 注册日期2002-11-27
  • 最后登录2005-08-04
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2004-03-05 14:52
这种bug能解决么?
zmwk
驱动中牛
驱动中牛
  • 注册日期2001-05-15
  • 最后登录2009-04-05
  • 粉丝0
  • 关注0
  • 积分59分
  • 威望51点
  • 贡献值0点
  • 好评度2点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2004-03-05 15:59
先在固件中作如下修改试一试:

D12_ReadEndpoint(0, 0, 0);
D12_ReadEndpoint(2, 0, 0);
D12_ReadEndpoint(4, 0, 0);

D12_WriteEndpoint(1, 0, 0);
D12_WriteEndpoint(3, 0, 0);
D12_WriteEndpoint(5, 0, 0);

加的位置应该是在connect_USB()之后立刻执行。
如果问题继续存在,则多数是上面Driver的事情了。

上面代码的任务是保证PC和Device的所有缓冲置空。
A strong man can save himself. A great man can save another.
pottern
驱动牛犊
驱动牛犊
  • 注册日期2003-10-01
  • 最后登录2004-03-05
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
7楼#
发布于:2004-03-05 17:10
先前我写KEYBOARD时也出现过这个问题,但最终的问题还是我的软体有问题,协议没通过,修改了协议后就没问题了!最好你要用分协议来做这件事了!!
duanjong
驱动中牛
驱动中牛
  • 注册日期2003-03-10
  • 最后登录2006-01-18
  • 粉丝0
  • 关注0
  • 积分31分
  • 威望5点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
8楼#
发布于:2004-03-06 17:28
枚举失败,可能是如下的原因:
1、其实一般D12的复位引脚应该接一个上电复位电路(用一个10K的电阻和4.7uf的电容),最好不用电阻分压构成复位电路;
2、在主程序的CONNECT()和RECONNECT()之间的延时有问题;
3、晶振有问题,选择一个频率比较大的晶振
游客

返回顶部