阅读:2769回复:17
Windows 2000为什么不认我的U盘?(老大帮帮忙)
我用link up公司的Arm7210芯片实现了一个U盘。但是插入Windows 2000系统后,系统找不到驱动程序。于是我把设备的Pid和Vid设置为一个买来的U盘的Pid和Vid。装入买来的U盘的驱动,我做的U盘就可以工作了。但是我不想在使用前总要安装驱动。(在Windows2000下因该可以不需要安装驱动的)请问各位大侠:怎样才可以不需要安装驱动,正常的工作?
|
|
最新喜欢:![]() |
沙发#
发布于:2003-07-09 08:19
你的 U盘的驱动程序必须得是2000的驱动库里有的,所以你需要以用其他厂商的VID和PID,你如果直接把你的U盘编一个驱动,是2000认识的驱动就可以了。
|
|
板凳#
发布于:2003-07-09 10:17
有可能是你的u盘的某些设置有问题!而你设为其他的pidvid,以前有安装过驱动了!
|
|
地板#
发布于:2003-07-09 13:09
NewTech:
你好! 你的意思是说Windows2000选择一个设备的驱动是有根据的。 但是这些根据是什么呢? 我曾经看过FreeBSD的usb驱动代码。 在FreeBsd上他们是这么做的: 首先根据设备的Pid和Vid选择驱动; 如果没有找到驱动,则读取设备的接口信息,用它来选择驱动; 如果还不行,则FreeBSD给这个usb设备一个usb的通用驱动(什么功能都没有,只是表明它是个usb设备)。 我现在觉得Windows也一定有这样的一些选择驱动的优先级和条件, 但是现在我不知道windows选择驱动的根据是什么,请大家帮帮忙。 |
|
地下室#
发布于:2003-07-09 15:33
你的设备可能有问题.你这种情况根据的是设备类.
|
|
|
5楼#
发布于:2003-07-09 18:19
下面是我的设备描述符和配置描述符,
请大家指点一下,哪里导致了windows不认为这是个使用BulkOnly协议和rbc命令协议的U盘的。(芯片是linkup arm 7210) const BYTE uDeviceDesc[0x12]= { // standard device descriptor 0x12, // bLength 0x01, // bDescriptorType 0x10, 0x01, // bcdUSB (USB specification release number) 0x00, // bDeviceClass (0xFF = Vendor Specific) // Class is specified in the interface descriptor. 0x00, // bDeviceSubClass // DeviceSubClass is specified in the interface descriptor. 0x00, // bDeviceProtocol // DeviceProtocol is specified in the interface descriptor. 0x8, // bMaxPacketSize0 0xff, 0xff, // idVendor 0x00, 0x00, // idProduct 0, 1, // bcdDevice 0, // iManufacturer - index of Manf String Descriptor 0, // iProduct - index of Product String Descriptor 0, // iSerialNumber - Index of Serial Number String 1 // bNumConfigurations }; UINT fullBound = 0; // standard configuration descriptor const BYTE uConfigDesc[0x20]= { 9, // bLength 0x02, // bDescriptorType 0x20,0x00, // wTotalLength 1, // bNumInterfaces 1, // bConfigurationValue 0, // iConfiguration 0xc0, // bmAttributes (Self-powered) 0, // MaxPower (x2 mA) // standard interface descriptor 9, // bLength 0x04, // bDescriptorType 0, // bInterfaceNumber 0, // bAlternateSetting 2, // bNumEndpoints (number endpoints used, excluding EP0) 0x08, // bInterfaceClass (Mass storage) 0x01, // bInterfaceSubClass (Reduced Block command) 0x50, // bInterfaceProtocol (Bulk only) 0, // ilInterface (Index of this interface string desc.) // endpoint1 - Out 7, // bLength 0x05, // bDescriptorType 0x01, // bEndpointAddress (EP 1, OUT) 2, // bmAttributes (0010 = Bulk) 0x20, 0, // wMaxPacketSize 0, // bInterval (ignored for Bulk) // endpoint2 - In 7, // bLength 0x05, // bDescriptorType 0x82, // bEndpointAddress (EP 2, IN) 2, // bmAttributes (0010 = Bulk) 0x20, 0, // wMaxPacketSize 0, // bInterval (ignored for Bulk) }; |
|
6楼#
发布于:2003-07-10 01:14
0x08, // bInterfaceClass (Mass storage)
0x01, // bInterfaceSubClass (Reduced Block command) here is error! it is must be 0x06! please try it! |
|
7楼#
发布于:2003-07-10 01:18
// endpoint1 - Out
7, // bLength 0x05, // bDescriptorType 0x01, // bEndpointAddress (EP 1, OUT) 2, // bmAttributes (0010 = Bulk) 0x20, 0, // wMaxPacketSize <-- here too small, do u can change it to 0x40 0, // bInterval (ignored for Bulk) // endpoint2 - In 7, // bLength 0x05, // bDescriptorType 0x82, // bEndpointAddress (EP 2, IN) 2, // bmAttributes (0010 = Bulk) 0x20, 0, // wMaxPacketSize <-- here too small, do u can change it to 0x40 0, // bInterval (ignored for Bulk |
|
8楼#
发布于:2003-07-10 11:39
用户被禁言,该主题自动屏蔽! |
|
9楼#
发布于:2003-07-10 14:16
论坛的数据好像不统一呀!
我通过论坛首页看到的页面是 http://211.156.161.209/forum/html_45843.html?1057818019 通过论坛发来的信中的链接看到的页面是 http://www.driverdevelop.com/forum/html_45843.html?1057817233 无论如何,这里向NewTech说一声:谢谢! 非常感谢你,我的U盘,windows可以认了。 我的U盘的问题出在命令协议不对,我使用的是RBC协议, 但是Windows只支持SCSI协议,所以只要修改了描述符中的协议字节就可以了。 非常感谢NewTech。 |
|
10楼#
发布于:2003-07-10 14:23
NewTech:
ARM 7210的databook上写了那两个bulk端口的数据缓冲寄存器只有32个字节,所以不能修改那两个数据。 |
|
11楼#
发布于:2003-07-10 14:30
用户被禁言,该主题自动屏蔽! |
|
12楼#
发布于:2003-07-10 15:39
可能是因为你已经安装过驱动了。
Windows首先按照vid和pid寻找驱动,它不管协议是Scsi或者rbc。 但是我的没有驱动,windows根据vid和pid找不到驱动,就只好找协议相同的驱动了,而Windows2000也只支持Scsi了。(在置顶的文章《U盘开发成功,问题和心得》中有提到。“3 协议。。。。我发现2000下似乎只支持SCSI Transparent,”) 顺便再请教大家一个问题SCSi协议中命令字=0x23的命令是什么命令?在那个文档(spc?)中可以找到它的具体说明? |
|
13楼#
发布于:2003-07-10 15:55
用户被禁言,该主题自动屏蔽! |
|
14楼#
发布于:2003-07-10 16:56
可能因为你曾经使用scsi在机器上用过你的u盘,所以windows记住了你的pid和vid,你也可以试一试把pid改改,然后再使用rbc命令协议,看windows还能认识否?
|
|
15楼#
发布于:2003-07-11 01:02
NewTech: 那你的bulk in/out的程序就要麻烦一点了! :) |
|
16楼#
发布于:2003-07-13 22:32
那你的bulk in/out的程序就要麻烦一点了! :) 为什么会麻烦一点呢? bulk only的CBW正好31个字节,不够32,当作一个短包,正好是一次传输。怎么会麻烦呢? |
|
17楼#
发布于:2003-07-14 11:11
我是指回送一些数据或者结果,超过32byte的时候!
|
|