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

主机怎么不发INQUIRY命令请求?

楼主#
更多 发布于:2004-06-09 10:28
bus hound中的数据:
CTL 80 06 00 01 - 00 00 12 00
DI 12 01 10 01 - 00 00 00 10 - 71 04 88 08 - 00 01 00 00
00 01
CTL 80 06 00 02 - 00 00 09 00
DI 09 02 2e 00 - 01 01 00 40 - 32
CTL 80 06 00 02 - 00 00 2e 00
DI 09 02 2e 00 - 01 01 00 40 - 32 09 04 00 - 00 04 dc a0
b0 00 07 05 - 81 03 10 00 - 0a 07 05 01 - 03 10 00 0a
CTL 00 09 01 00 - 00 00 00 00
到这一步主机好像就不发命令请求了,
为什么没有
CDB 12 00 00 00 20 00 20 00  INQUIRY
如果我用usbdebug发送数据bushound接着显示:
DO aa aa aa aa - aa aa aa aa - aa aa aa aa - aa
aa是发送的数据。
这是怎么回事?
我的descriptor为:
USB_DEVICE_DESCRIPTOR DeviceDescr =
{
sizeof(USB_DEVICE_DESCRIPTOR),
           0x01,
0x0110,// 协议版本, 0x00,
           0, // 设备子类
0,// 设备协议
0x10,// 端点0最大数据
0x0471,// PHILIPS公司的设备ID
0x0888,// 设备制造商定的产品ID
0x0100,// 设备系列号
0,// iManufacturer
0,// iProduct
0,// iSerialNumber
1
};

USB_CONFIGURATION_DESCRIPTOR ConfigDescr =
{
sizeof(USB_CONFIGURATION_DESCRIPTOR),
0x02,
0x2e,
1,// 只支持1个接口
1,// 配置值
0,// 字符串描述符指针(无)
0x40,// 自供电
0x32// 最大功耗(100mA)
};
USB_INTERFACE_DESCRIPTOR InterfaceDescr =
{
sizeof(USB_INTERFACE_DESCRIPTOR), 0x04,
0,// 接口数,只有1个
0,// 可选配置,只有1个
0x04,
0x08,
0x04,
0x50,
0// 字符串描述符指针(无)
};
//端点1发送描述
USB_ENDPOINT_DESCRIPTOR EP1_TXDescr =
{
sizeof(USB_ENDPOINT_DESCRIPTOR),
0x05
0x81,// 端点1IN
USB_ENDPOINT_TYPE_INTERRUPT,// 中断传输,=0x03
0x10
10// 传输间隔时间,=10ms
};

//端点1接收描述符
USB_ENDPOINT_DESCRIPTOR EP1_RXDescr =
{
sizeof(USB_ENDPOINT_DESCRIPTOR),
0x05    
0x01,// 端点1OUT                      
USB_ENDPOINT_TYPE_INTERRUPT,// 中断传输,=0x03    
0x10,    
10// 传输间隔时间,=10ms    
};
flyhye
驱动小牛
驱动小牛
  • 注册日期2003-07-01
  • 最后登录2012-01-11
  • 粉丝0
  • 关注0
  • 积分10分
  • 威望2点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2004-06-09 10:40
你把它改成下面这个:

USB_INTERFACE_DESCRIPTOR InterfaceDescr =
{
sizeof(USB_INTERFACE_DESCRIPTOR), 0x04,
0,// 接口数,只有1个
0,// 可选配置,只有1个
//0x04,
0x08,//应该为08表示storage设备
0x08,
0x04,
0x50,
0// 字符串描述符指针(无)
};
千载奇逢,无如好书良友 一生清福,只在碗茗炉烟
kevin_yin
驱动牛犊
驱动牛犊
  • 注册日期2004-05-31
  • 最后登录2004-07-08
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2004-06-09 14:04
你把它改成下面这个:

USB_INTERFACE_DESCRIPTOR InterfaceDescr =
{
sizeof(USB_INTERFACE_DESCRIPTOR), 0x04,
0,// 接口数,只有1个
0,// 可选配置,只有1个
//0x04,
0x08,//应该为08表示storage设备
0x08,
0x04,
0x50,
0// 字符串描述符指针(无)
};
 

把0x04改成0x08只是改的端点数啊,我原来的interface descriptor
设置是:
bLength             0x09;
bDescriptorType     0x04;
bInterfaceNumber    0;
bAlternateSeting     0;
bNumEndpoints        0x04;
bInterfaceClass      0x80;
bInterfaceSubClass   0x04;
bInterfaceProtcol    0x50;
iInterface           0;
flyhye
驱动小牛
驱动小牛
  • 注册日期2003-07-01
  • 最后登录2012-01-11
  • 粉丝0
  • 关注0
  • 积分10分
  • 威望2点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地板#
发布于:2004-06-09 14:25
说错了:),你把bInterfaceClass      0x80;
改为0x08

[quote把0x04改成0x08只是改的端点数啊,我原来的interface descriptor
设置是:
bLength             0x09;
bDescriptorType     0x04;
bInterfaceNumber    0;
bAlternateSeting     0;
bNumEndpoints        0x04;
bInterfaceClass      0x80;
bInterfaceSubClass   0x04;
bInterfaceProtcol    0x50;
iInterface           0; [/quote]
千载奇逢,无如好书良友 一生清福,只在碗茗炉烟
flyhye
驱动小牛
驱动小牛
  • 注册日期2003-07-01
  • 最后登录2012-01-11
  • 粉丝0
  • 关注0
  • 积分10分
  • 威望2点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2004-06-09 14:28
另外看你bus hound中的数据:

CTL 80 06 00 02 - 00 00 2e 00
DI 09 02 2e 00 - 01 01 00 40 - 32 09 04 00 - 00 04 dc a0
b0 00 07 05 - 81 03 10 00 - 0a 07 05 01 - 03 10 00 0a
CTL 00 09 01 00 - 00 00 00 00

这个跟你给出来的描述符信息内容不一致呀!
千载奇逢,无如好书良友 一生清福,只在碗茗炉烟
metalwing
驱动中牛
驱动中牛
  • 注册日期2003-10-13
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分178分
  • 威望58点
  • 贡献值0点
  • 好评度17点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2004-06-09 14:30
USB一接上,设备枚举,返回DEVICE DESCRIPTOR,可我的不返回,
请问大概是什么问题?
谢谢
新手上路,请多关照.
kevin_yin
驱动牛犊
驱动牛犊
  • 注册日期2004-05-31
  • 最后登录2004-07-08
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2004-06-09 14:36
说错了:),你把bInterfaceClass      0x80;
改为0x08

[quote把0x04改成0x08只是改的端点数啊,我原来的interface descriptor
设置是:
bLength             0x09;
bDescriptorType     0x04;
bInterfaceNumber    0;
bAlternateSeting     0;
bNumEndpoints        0x04;
bInterfaceClass      0x80;
bInterfaceSubClass   0x04;
bInterfaceProtcol    0x50;
iInterface           0;
[/quote]

我打错了
我原来的initerface descriptor中bInterfaceClass 就是 0x08;
kevin_yin
驱动牛犊
驱动牛犊
  • 注册日期2004-05-31
  • 最后登录2004-07-08
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
7楼#
发布于:2004-06-09 14:44
另外看你bus hound中的数据:

CTL 80 06 00 02 - 00 00 2e 00
DI 09 02 2e 00 - 01 01 00 40 - 32 09 04 00 - 00 04 dc a0
b0 00 07 05 - 81 03 10 00 - 0a 07 05 01 - 03 10 00 0a
CTL 00 09 01 00 - 00 00 00 00

这个跟你给出来的描述符信息内容不一致呀!


你是不是说 dc a0 b0这三个数应该为08 04 50 ?
flyhye
驱动小牛
驱动小牛
  • 注册日期2003-07-01
  • 最后登录2012-01-11
  • 粉丝0
  • 关注0
  • 积分10分
  • 威望2点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
8楼#
发布于:2004-06-09 14:46
对,就这个:)

你是不是说 dc a0 b0这三个数应该为08 04 50 ?
千载奇逢,无如好书良友 一生清福,只在碗茗炉烟
kevin_yin
驱动牛犊
驱动牛犊
  • 注册日期2004-05-31
  • 最后登录2004-07-08
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
9楼#
发布于:2004-06-09 15:17
我该了但还不行啊
接口插上bus hound数据:
CTL 80 06 00 01 - 00 00 12 00
DI 12 01 10 01 - 00 00 00 10 - 71 04 88 08 - 00 01 00 00
00 01
CTL 80 06 00 02 - 00 00 09 00
DI 09 02 2e 00 - 01 01 00 40 - 32
CTL 80 06 00 02 - 00 00 2e 00
DI 09 02 2e 00 - 01 01 00 40 - 32 09 04 00 - 00 04 08 04
50 00 07 05 - 81 03 10 00 - 0a 07 05 01 - 03 10 00 0a
CTL 00 09 01 00 - 00 00 00 00
到这儿就不动了。

我找了一个爱国者的u盘,用hound抓了数据是:
CTL  80 06 00 02 00 00 20 00
DI   09 02 20 00 01 01 00 80 32 09 04 00 00 02 08 06  
    50 00 07 05 - 01 02 40 00 - 00 07 05 82 - 02 40 00 00
CTL    00 09 01 00 - 00 00 00 00
CTL    01 0b 00 00 - 00 00 00 00
CTL    a1 fe 00 00 - 00 00 01 00      
USTS   04 00 00 80
CTL    02 01 00 00 - 00 00 00 00
CTL    a1 fe 00 00 - 00 00 01 00
USTS   04 00 00 80
CTL    02 01 00 00 - 00 00 00 00
CTL    a1 fe 00 00 - 00 00 01 00
USTS   04 00 00 80
CTL    02 01 00 00 - 00 00 00 00
DO     55 53 42 43 - 68 ee aa ff - 24 00 00 00 - 80 00 06 12
       00 00 00 24 - 00 00 00 00 - 00 00 00 00 - 00 00 00
DI     00 00 02 02 - 1f 00 00 00 - 4d 69 6e 69 - 4b 69 6e 67
       20 20 20 20 - 20 20 20 20 - 20 20 20 20 - 20 20 20 20

我把我的descriptor改成和他的一样

CTL    80 06 00 02 - 00 00 2e 00
DI     09 02 2e 00 - 01 01 00 40 - 32 09 04 00 - 00 04 08 06
       50 00 07 05 - 81 02 10 00 - 0a 07 05 01 - 02 10 00 0a
CTL    00 09 01 00 - 00 00 00 00
但到这儿还是不动了,
不像爱国者的u盘一样接着有
CTL    01 0b 00 00 - 00 00 00 00
CTL    a1 fe 00 00 - 00 00 01 00
.....
怎么回事啊?
flyhye
驱动小牛
驱动小牛
  • 注册日期2003-07-01
  • 最后登录2012-01-11
  • 粉丝0
  • 关注0
  • 积分10分
  • 威望2点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
10楼#
发布于:2004-06-09 15:32
仔细看了一下,感觉应该是长度不对,
80 06 00 02 - 00 00 2e 00
要求的2eh,你给的数据是:

DI 09 02 2e 00 - 01 01 00 40 - 32 09 04 00 - 00 04 08 04
   50 00 07 05 - 81 03 10 00 - 0a 07 05 01 - 03 10 00 0a

才20h,这是第一个。

另外,爱国者的端点是bulk传输,而你的两端点是interrupt,没bulk端点。


我该了但还不行啊
接口插上bus hound数据:
CTL 80 06 00 01 - 00 00 12 00
DI 12 01 10 01 - 00 00 00 10 - 71 04 88 08 - 00 01 00 00
00 01
CTL 80 06 00 02 - 00 00 09 00
DI 09 02 2e 00 - 01 01 00 40 - 32
CTL 80 06 00 02 - 00 00 2e 00
DI 09 02 2e 00 - 01 01 00 40 - 32 09 04 00 - 00 04 08 04
50 00 07 05 - 81 03 10 00 - 0a 07 05 01 - 03 10 00 0a
CTL 00 09 01 00 - 00 00 00 00
到这儿就不动了。

我找了一个爱国者的u盘,用hound抓了数据是:
CTL  80 06 00 02 00 00 20 00
DI   09 02 20 00 01 01 00 80 32 09 04 00 00 02 08 06  
    50 00 07 05 - 01 02 40 00 - 00 07 05 82 - 02 40 00 00
CTL    00 09 01 00 - 00 00 00 00
CTL    01 0b 00 00 - 00 00 00 00
CTL    a1 fe 00 00 - 00 00 01 00      
USTS   04 00 00 80
CTL    02 01 00 00 - 00 00 00 00
CTL    a1 fe 00 00 - 00 00 01 00
USTS   04 00 00 80
CTL    02 01 00 00 - 00 00 00 00
CTL    a1 fe 00 00 - 00 00 01 00
USTS   04 00 00 80
CTL    02 01 00 00 - 00 00 00 00
DO     55 53 42 43 - 68 ee aa ff - 24 00 00 00 - 80 00 06 12
       00 00 00 24 - 00 00 00 00 - 00 00 00 00 - 00 00 00
DI     00 00 02 02 - 1f 00 00 00 - 4d 69 6e 69 - 4b 69 6e 67
       20 20 20 20 - 20 20 20 20 - 20 20 20 20 - 20 20 20 20

我把我的descriptor改成和他的一样

CTL    80 06 00 02 - 00 00 2e 00
DI     09 02 2e 00 - 01 01 00 40 - 32 09 04 00 - 00 04 08 06
       50 00 07 05 - 81 02 10 00 - 0a 07 05 01 - 02 10 00 0a
CTL    00 09 01 00 - 00 00 00 00
但到这儿还是不动了,
不像爱国者的u盘一样接着有
CTL    01 0b 00 00 - 00 00 00 00
CTL    a1 fe 00 00 - 00 00 01 00
.....
怎么回事啊?
 
千载奇逢,无如好书良友 一生清福,只在碗茗炉烟
flyhye
驱动小牛
驱动小牛
  • 注册日期2003-07-01
  • 最后登录2012-01-11
  • 粉丝0
  • 关注0
  • 积分10分
  • 威望2点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
11楼#
发布于:2004-06-09 15:39
另外,奉劝一句,多看看usb协议吧,还有mass storage协议
千载奇逢,无如好书良友 一生清福,只在碗茗炉烟
kevin_yin
驱动牛犊
驱动牛犊
  • 注册日期2004-05-31
  • 最后登录2004-07-08
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
12楼#
发布于:2004-06-09 16:08
谢谢flyhye回答
我用的是4个endpoint,分别是ep1 IN  ,ep1 OUT,ep2 IN , ep2  OUT所以长度就是2e了。
我又找了一个纽曼的U盘抓了一下数据是:
CTL    80 06 00 02 - 00 00 27 00
DI  09 02 27 00 - 01 01 00 80 - 32 09 04 00 - 00 03 08 06
    50 00 07 05 - 81 02 40 00 - 00 07 05 02 - 02 40 00 00  
CTL    80 06 00 03 - 00 00 02 00
DI     04 03
CTL    80 06 00 03 - 00 00 04 00
DI     04 03 09 04
CTL    80 06 03 03 - 09 04 02 00
DI     22 03
CTL    80 06 03 03 - 09 04 22 00
DI     22 03 33 00 - 31 00 35 00 - 43 00 31 00 - 37 00 30 00
       43 00 34 00 - 30 00 33 00 - 41 00 41 00 - 41 00 44 00
CTL    00 09 01 00 - 00 00 00 00
CTL    00 09 01 00 - 00 00 00 00
可以看到这种U盘有3个endpoint,不过在到
CTL    00 09 01 00 - 00 00 00 00之前比我的有多了一段数据
CTL    80 06 00 03 - 00 00 02 00这个命令是表示设备类型是string型的

我已把我的端点改为BULK了

但还是老问题啊?

  
 
kevin_yin
驱动牛犊
驱动牛犊
  • 注册日期2004-05-31
  • 最后登录2004-07-08
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
13楼#
发布于:2004-06-09 16:11
usb协议和mass storage协议我已经看过了,现在也是在一边拿着协议,一边在改我的程序,但感觉真的到实际中时,还是有很多困难。
flyhye
驱动小牛
驱动小牛
  • 注册日期2003-07-01
  • 最后登录2012-01-11
  • 粉丝0
  • 关注0
  • 积分10分
  • 威望2点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
14楼#
发布于:2004-06-09 16:19
奇怪,为什么你抓到的数据怎么都不能超过20h???
明明是27,回应是20;明明是22,也回应只有20

用的是bushound吧,你bushound设置是不是限制了?
你把buffersize和maxphase设大点。


我又找了一个纽曼的U盘抓了一下数据是:
CTL    80 06 00 02 - 00 00 27 00
DI  09 02 27 00 - 01 01 00 80 - 32 09 04 00 - 00 03 08 06
    50 00 07 05 - 81 02 40 00 - 00 07 05 02 - 02 40 00 00  
CTL    80 06 00 03 - 00 00 02 00
DI     04 03
CTL    80 06 00 03 - 00 00 04 00
DI     04 03 09 04
CTL    80 06 03 03 - 09 04 02 00
DI     22 03
CTL    80 06 03 03 - 09 04 22 00
DI     22 03 33 00 - 31 00 35 00 - 43 00 31 00 - 37 00 30 00
       43 00 34 00 - 30 00 33 00 - 41 00 41 00 - 41 00 44 00
CTL    00 09 01 00 - 00 00 00 00
CTL    00 09 01 00 - 00 00 00 00
可以看到这种U盘有3个endpoint
  
千载奇逢,无如好书良友 一生清福,只在碗茗炉烟
kevin_yin
驱动牛犊
驱动牛犊
  • 注册日期2004-05-31
  • 最后登录2004-07-08
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
15楼#
发布于:2004-06-09 16:36
谢谢提醒
是bus hound 的问题 我把它调大点了这是抓的数据:
CTL    80 06 00 01 - 00 00 12 00
DI     12 01 10 01 - 00 00 00 10 - 71 04 88 08 - 00 01 00 00
       00 01
CTL    80 06 00 02 - 00 00 09 00
DI     09 02 2e 00 - 01 01 00 40 - 32
CTL    80 06 00 02 - 00 00 2e 00
DI     09 02 2e 00 - 01 01 00 40 -32 09 04 00 -00 04 08 06
       50 00 07 05 - 81 02 10 00 - 00 07 05 01 - 02 10 00 00
       07 05 82 02 - 40 00 00 07 - 05 02 02 40 - 00 00
CTL    00 09 01 00 - 00 00 00 00
就停在这了,不知怎么回事?
flyhye
驱动小牛
驱动小牛
  • 注册日期2003-07-01
  • 最后登录2012-01-11
  • 粉丝0
  • 关注0
  • 积分10分
  • 威望2点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
16楼#
发布于:2004-06-09 16:50
仔细看看端点描述符第4位,怎么可能都是02呢?
不说了,又烦又累!
:)

谢谢提醒
是bus hound 的问题 我把它调大点了这是抓的数据:
CTL    80 06 00 01 - 00 00 12 00
DI     12 01 10 01 - 00 00 00 10 - 71 04 88 08 - 00 01 00 00
       00 01
CTL    80 06 00 02 - 00 00 09 00
DI     09 02 2e 00 - 01 01 00 40 - 32
CTL    80 06 00 02 - 00 00 2e 00
DI     09 02 2e 00 - 01 01 00 40 -32 09 04 00 -00 04 08 06
       50 00 07 05 - 81 02 10 00 - 00 07 05 01 - 02 10 00 00
       07 05 82 02 - 40 00 00 07 - 05 02 02 40 - 00 00
CTL    00 09 01 00 - 00 00 00 00
就停在这了,不知怎么回事?
千载奇逢,无如好书良友 一生清福,只在碗茗炉烟
kevin_yin
驱动牛犊
驱动牛犊
  • 注册日期2004-05-31
  • 最后登录2004-07-08
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
17楼#
发布于:2004-06-09 17:36
4个端点原来都是interrupte类型的,但主机还是不发INQURY命令,
后来我看了爱国者的U盘它只用了2个端点,而且都是BULK类型的
所以我就把我的全都改成02了。但还是不行,那我这4个端点应该怎么设呢?
metalwing
驱动中牛
驱动中牛
  • 注册日期2003-10-13
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分178分
  • 威望58点
  • 贡献值0点
  • 好评度17点
  • 原创分0分
  • 专家分0分
18楼#
发布于:2004-06-09 18:12
CONFIG DESCRIPTOR 里的WTOTALLENGTH 不是等于
SIZEOF(CONFIG)+INTERFACENUM*SIZEOF(INTERFACE)
+ENDPTNUM*SIZEOF(ENDPT)吗?
但我看见有的把EPI IN和EPI OUT算为一个端点了,是这样吗?
新手上路,请多关照.
metalwing
驱动中牛
驱动中牛
  • 注册日期2003-10-13
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分178分
  • 威望58点
  • 贡献值0点
  • 好评度17点
  • 原创分0分
  • 专家分0分
19楼#
发布于:2004-06-09 18:18
他们的端点一个是EP1,一个是EP2,你的不是,你把2E改小一点试试看,不知成不。
新手上路,请多关照.
上一页
游客

返回顶部