maggie_zhy
驱动牛犊
驱动牛犊
  • 注册日期2008-06-23
  • 最后登录2008-09-10
  • 粉丝1
  • 关注0
  • 积分2分
  • 威望25点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:1334回复:4

大侠们帮我看看,是哪个环节出错了

楼主#
更多 发布于:2008-07-17 10:22
我在做一个USB的仿真卡驱动,最近几天出现这样的问题:

PC端插上USB仿真卡可以识别,如果不做任何操作,正常卸载后再插上,还是可以识别。但是,如果插上后运行一下应用程序(只含有open,close两个操作了),卸载后再插上,PC就识别不出设备VID,PID了,然后再插其它的USB设备(比如U盘)也都不能识别,只能把机器重启了。

PC有两个USB端口,一个端口出错后,插在另外一个USB端口上还是正常的。但同样运行一下应用程序,卸载后就再不能识别了。
 

下面是存在的各个环节:
1.仿真卡硬件问题
      同样的仿真卡+同样的驱动程序,在别人机器上好用的。插上->运行程序->卸载->再插上都是可以的。
      换另外一块仿真卡在我的电脑上,也存在同样的奇怪问题。
 
2.仿真卡驱动和应用程序问题
      在ddk的示例代码bulkusb基础上,只修改了guid829.h中的guid。而且这个代码在我之前使用时一直是好用的。
      而且这个驱动换别的机器上也没问题啊。
 
3.windows操作系统问题
      如果是操作系统记录了VID_0471_PID_0668这个设备有什么问题,那么我修改为PID_0669就应该好了啊,可还是不行。而且,在主板的一个USB端口出问题以后,在另外一个USB端口仍然能够识别。
 
4.PC主板硬件问题
      系统重启后,就又好用了,不像是主板问题啊。而且U盘插上后,读写数据,然后卸载再插上,还是可以用的,似乎只是跟这块仿真卡有关。


这个问题卡了好几天了,一直分析不出到底哪个环节出了问题:(,大侠们帮忙分析下吧~~~
maggie_zhy
驱动牛犊
驱动牛犊
  • 注册日期2008-06-23
  • 最后登录2008-09-10
  • 粉丝1
  • 关注0
  • 积分2分
  • 威望25点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2008-07-18 09:21
昨天测下来,发现在卸载后拔掉数据线,会抓到这样的数据,似乎不太正常。谁能告诉我是什么意思?

   9.0  CTL    a3 00 00 00  01 00 04 00  GET STATUS               6.1.0        
   9.0  DI     04 01 00 00               ....                     6.2.0        
   9.0  CTL    a3 00 00 00  02 00 04 00  GET STATUS               7.1.0        
   9.0  DI     00 01 00 00               ....                     7.2.0        
   9.0  CTL    a3 00 00 00  01 00 04 00  GET STATUS               8.1.0        
   9.0  DI     04 01 00 00               ....                     8.2.0        
   9.0  CTL    a3 00 00 00  02 00 04 00  GET STATUS               9.1.0        
   9.0  DI     00 01 00 00               ....                     9.2.0  

如果四个DI 都是 00开头的,下一次插上USB都能正常识别,如果像上述的有04开头的,下一次就不能识别了。这是哪里出了问题啊?
maggie_zhy
驱动牛犊
驱动牛犊
  • 注册日期2008-06-23
  • 最后登录2008-09-10
  • 粉丝1
  • 关注0
  • 积分2分
  • 威望25点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2008-07-21 11:14
自己顶下,谁能告诉我GET STATUS的响应帧是什么含义?
jinghuiren
驱动巨牛
驱动巨牛
  • 注册日期2002-06-01
  • 最后登录2008-10-27
  • 粉丝0
  • 关注0
  • 积分291分
  • 威望460点
  • 贡献值0点
  • 好评度428点
  • 原创分0分
  • 专家分0分
地板#
发布于:2008-08-18 11:35
你是否在打开了设备的句柄后没有关闭?
另外你的驱动中是否有对突然拔出设备后作系统清理工作,比如释放一些占用的内存,释放接口等等?
按例说就算你的设备出了问题,拔掉USB线后系统应该自动卸载你的驱动。
flycatjp
驱动牛犊
驱动牛犊
  • 注册日期2007-11-21
  • 最后登录2020-08-18
  • 粉丝0
  • 关注0
  • 积分7分
  • 威望8点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2008-08-20 00:06
引用第3楼jinghuiren于2008-08-18 11:35发表的  :
你是否在打开了设备的句柄后没有关闭?
另外你的驱动中是否有对突然拔出设备后作系统清理工作,比如释放一些占用的内存,释放接口等等?
按例说就算你的设备出了问题,拔掉USB线后系统应该自动卸载你的驱动。

如果有句柄打开没有关闭,系统就不会发REMOVE_DEVICE的请求,应该就不会自动卸载这个驱动!
但我有一个疑问,如果是USB鼠标设备(但非HID),系统会在启动时自动打开该设备的一个句柄,但我突然拔出时,系统并没有自动关闭该句柄,导致驱动不能顺利卸载,不知道是什么原因?还请各位帮忙看看!
游客

返回顶部