dialog
驱动牛犊
驱动牛犊
  • 注册日期2003-02-17
  • 最后登录2003-09-24
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:2769回复:17

Windows 2000为什么不认我的U盘?(老大帮帮忙)

楼主#
更多 发布于:2003-07-08 19:58
我用link up公司的Arm7210芯片实现了一个U盘。但是插入Windows 2000系统后,系统找不到驱动程序。于是我把设备的Pid和Vid设置为一个买来的U盘的Pid和Vid。装入买来的U盘的驱动,我做的U盘就可以工作了。但是我不想在使用前总要安装驱动。(在Windows2000下因该可以不需要安装驱动的)请问各位大侠:怎样才可以不需要安装驱动,正常的工作?

最新喜欢:

hewxhewx
luckyjm
驱动中牛
驱动中牛
  • 注册日期2002-12-19
  • 最后登录2004-03-17
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2003-07-09 08:19
你的 U盘的驱动程序必须得是2000的驱动库里有的,所以你需要以用其他厂商的VID和PID,你如果直接把你的U盘编一个驱动,是2000认识的驱动就可以了。
NewTech
驱动大牛
驱动大牛
  • 注册日期2002-10-02
  • 最后登录2010-03-27
  • 粉丝0
  • 关注0
  • 积分16分
  • 威望263点
  • 贡献值0点
  • 好评度86点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2003-07-09 10:17
有可能是你的u盘的某些设置有问题!而你设为其他的pidvid,以前有安装过驱动了!
dialog
驱动牛犊
驱动牛犊
  • 注册日期2003-02-17
  • 最后登录2003-09-24
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地板#
发布于:2003-07-09 13:09
NewTech:
你好!
你的意思是说Windows2000选择一个设备的驱动是有根据的。
但是这些根据是什么呢?
我曾经看过FreeBSD的usb驱动代码。
在FreeBsd上他们是这么做的:
首先根据设备的Pid和Vid选择驱动;
如果没有找到驱动,则读取设备的接口信息,用它来选择驱动;
如果还不行,则FreeBSD给这个usb设备一个usb的通用驱动(什么功能都没有,只是表明它是个usb设备)。

我现在觉得Windows也一定有这样的一些选择驱动的优先级和条件,
但是现在我不知道windows选择驱动的根据是什么,请大家帮帮忙。
MacWin
驱动中牛
驱动中牛
  • 注册日期2002-12-16
  • 最后登录2009-05-27
  • 粉丝0
  • 关注0
  • 积分2分
  • 威望44点
  • 贡献值0点
  • 好评度29点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2003-07-09 15:33
你的设备可能有问题.你这种情况根据的是设备类.
Chen
dialog
驱动牛犊
驱动牛犊
  • 注册日期2003-02-17
  • 最后登录2003-09-24
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
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)
};
NewTech
驱动大牛
驱动大牛
  • 注册日期2002-10-02
  • 最后登录2010-03-27
  • 粉丝0
  • 关注0
  • 积分16分
  • 威望263点
  • 贡献值0点
  • 好评度86点
  • 原创分0分
  • 专家分0分
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!
NewTech
驱动大牛
驱动大牛
  • 注册日期2002-10-02
  • 最后登录2010-03-27
  • 粉丝0
  • 关注0
  • 积分16分
  • 威望263点
  • 贡献值0点
  • 好评度86点
  • 原创分0分
  • 专家分0分
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
wolfwoo22
禁止发言
禁止发言
  • 注册日期2003-03-11
  • 最后登录2016-04-11
  • 粉丝0
  • 关注0
  • 积分930分
  • 威望8970点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
8楼#
发布于:2003-07-10 11:39
用户被禁言,该主题自动屏蔽!
dialog
驱动牛犊
驱动牛犊
  • 注册日期2003-02-17
  • 最后登录2003-09-24
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
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。
dialog
驱动牛犊
驱动牛犊
  • 注册日期2003-02-17
  • 最后登录2003-09-24
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
10楼#
发布于:2003-07-10 14:23
NewTech:
ARM 7210的databook上写了那两个bulk端口的数据缓冲寄存器只有32个字节,所以不能修改那两个数据。
wolfwoo22
禁止发言
禁止发言
  • 注册日期2003-03-11
  • 最后登录2016-04-11
  • 粉丝0
  • 关注0
  • 积分930分
  • 威望8970点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
11楼#
发布于:2003-07-10 14:30
用户被禁言,该主题自动屏蔽!
dialog
驱动牛犊
驱动牛犊
  • 注册日期2003-02-17
  • 最后登录2003-09-24
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
12楼#
发布于:2003-07-10 15:39
可能是因为你已经安装过驱动了。
Windows首先按照vid和pid寻找驱动,它不管协议是Scsi或者rbc。
但是我的没有驱动,windows根据vid和pid找不到驱动,就只好找协议相同的驱动了,而Windows2000也只支持Scsi了。(在置顶的文章《U盘开发成功,问题和心得》中有提到。“3 协议。。。。我发现2000下似乎只支持SCSI Transparent,”)

顺便再请教大家一个问题SCSi协议中命令字=0x23的命令是什么命令?在那个文档(spc?)中可以找到它的具体说明?
wolfwoo22
禁止发言
禁止发言
  • 注册日期2003-03-11
  • 最后登录2016-04-11
  • 粉丝0
  • 关注0
  • 积分930分
  • 威望8970点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
13楼#
发布于:2003-07-10 15:55
用户被禁言,该主题自动屏蔽!
dialog
驱动牛犊
驱动牛犊
  • 注册日期2003-02-17
  • 最后登录2003-09-24
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
14楼#
发布于:2003-07-10 16:56
可能因为你曾经使用scsi在机器上用过你的u盘,所以windows记住了你的pid和vid,你也可以试一试把pid改改,然后再使用rbc命令协议,看windows还能认识否?
NewTech
驱动大牛
驱动大牛
  • 注册日期2002-10-02
  • 最后登录2010-03-27
  • 粉丝0
  • 关注0
  • 积分16分
  • 威望263点
  • 贡献值0点
  • 好评度86点
  • 原创分0分
  • 专家分0分
15楼#
发布于:2003-07-11 01:02
NewTech:
ARM 7210的databook上写了那两个bulk端口的数据缓冲寄存器只有32个字节,所以不能修改那两个数据。
 


那你的bulk in/out的程序就要麻烦一点了! :)
dialog
驱动牛犊
驱动牛犊
  • 注册日期2003-02-17
  • 最后登录2003-09-24
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
16楼#
发布于:2003-07-13 22:32
 
那你的bulk in/out的程序就要麻烦一点了! :)

为什么会麻烦一点呢?
bulk only的CBW正好31个字节,不够32,当作一个短包,正好是一次传输。怎么会麻烦呢?
NewTech
驱动大牛
驱动大牛
  • 注册日期2002-10-02
  • 最后登录2010-03-27
  • 粉丝0
  • 关注0
  • 积分16分
  • 威望263点
  • 贡献值0点
  • 好评度86点
  • 原创分0分
  • 专家分0分
17楼#
发布于:2003-07-14 11:11
我是指回送一些数据或者结果,超过32byte的时候!
游客

返回顶部