jinghuiren
驱动巨牛
驱动巨牛
  • 注册日期2002-06-01
  • 最后登录2008-10-27
  • 粉丝0
  • 关注0
  • 积分291分
  • 威望460点
  • 贡献值0点
  • 好评度428点
  • 原创分0分
  • 专家分0分
阅读:1983回复:14

我的枚举中为什么没有80 06 00 02 00 00 09 00?

楼主#
更多 发布于:2003-02-16 15:50
一般的枚举应该是:
(1)80 06 00 01 00 00 40 00  GET DESCR
(2)00 05 02 00 00 00 00 00  SET ADDRESS
(3)80 06 00 01 00 00 12 00  GET DESCR
(4)80 06 00 02 00 00 09 00  GET DESCR(CONFIG)
(5)80 06 00 02 00 00 FF 00  GET DESCR(CONFIG)
然后是提示载入驱动硬件驱动。

可是我的为什么在第(3)步80 06 00 01 00 00 12 00之后就直接来了第(5)步80 06 00 02 00 00 ff 00,为什么没有(4)呢?
而且我返回全部的配置描述符后,会有发现新硬件,提示载入驱动的提示!有那位大侠遇到过这种情况,这种情况是否正常呢?

最新喜欢:

jxchen045jxchen...
yalong
驱动牛犊
驱动牛犊
  • 注册日期2001-08-27
  • 最后登录2011-07-24
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望2点
  • 贡献值0点
  • 好评度2点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2003-02-16 20:39
没有问题!在USB1。1调试时,我就跟踪发现(4)是可以没有的!只要你的描述符都正确地给回主机了,它就会给你提示加载新硬件的驱动程序!
jinghuiren
驱动巨牛
驱动巨牛
  • 注册日期2002-06-01
  • 最后登录2008-10-27
  • 粉丝0
  • 关注0
  • 积分291分
  • 威望460点
  • 贡献值0点
  • 好评度428点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2003-02-16 21:39
没错,(5)发过去之后就提示我载入新硬件的驱动,那这样的话就是说第(4)步没有也行,呵呵,那我下面就要搞上层的驱动了,多谢多谢,送50分! :)
zyz1974
驱动小牛
驱动小牛
  • 注册日期2002-11-06
  • 最后登录2005-06-20
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地板#
发布于:2003-02-17 13:29
jinnghuiren
你好,我也在搞usb开发,68013,想向你请教问题,可以吗?
我的qq 107947912
jinghuiren
驱动巨牛
驱动巨牛
  • 注册日期2002-06-01
  • 最后登录2008-10-27
  • 粉丝0
  • 关注0
  • 积分291分
  • 威望460点
  • 贡献值0点
  • 好评度428点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2003-02-18 17:24
调2.0的时候没有出现09 00这个命令,但是调1.1的时候出现了,我的描述符如下:
0x09, // 配置描述表长度
0x02, // 配置描述表类型
0x20,0x00, // 配置描述表及附带表长度
0x01, // 接口配置数
0x01, // 配置描述表标识
0x00, // 配置描述表字符串描述表索引
0xc0, // 自供电
0x32 // 总线供电最大值(*2mA)


可是总是不能通过,不知道是那里出了问题?
puppypyb
驱动牛犊
驱动牛犊
  • 注册日期2003-01-14
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分52分
  • 威望10点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2003-02-18 17:36
你的东西很深奥,我不懂,但我有麻烦你的问题 :D

枚举的顺序为什么是那样的?
是在上层驱动中规定的吗? 还是协议规定的,总之应该是在哪儿规定的吧!  请指教! 麻烦了又!
iamchine
驱动小牛
驱动小牛
  • 注册日期2002-11-18
  • 最后登录2005-11-23
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2003-02-18 17:39
我感觉仍是你的配置描述符出了问题,你把你所有配置描述符表贴出来看看
jinghuiren
驱动巨牛
驱动巨牛
  • 注册日期2002-06-01
  • 最后登录2008-10-27
  • 粉丝0
  • 关注0
  • 积分291分
  • 威望460点
  • 贡献值0点
  • 好评度428点
  • 原创分0分
  • 专家分0分
7楼#
发布于:2003-02-18 17:53
主机并没有让我返回全部的描述符呀,我用的是16位的mcu,所以一次可以写2个字节。用的是2.0的控制器,所以端点0是64个字节的。下面是全部的配置描述符
typedef struct _USB_CONFIGURATION_DESCRIPTOR {
unsigned char bLength;
unsigned char bDescriptorType;
unsigned short wTotalLength;
unsigned char bNumInterfaces;
unsigned char bConfigurationValue;
unsigned char iConfiguration;
unsigned char bmAttributes;
unsigned char MaxPower;
} USB_CONFIGURATION_DESCRIPTOR, *PUSB_CONFIGURATION_DESCRIPTOR;

typedef struct _USB_INTERFACE_DESCRIPTOR {
    unsigned char bLength;
    unsigned char bDescriptorType;
    unsigned char bInterfaceNumber;
unsigned char bAlternateSetting;
unsigned char bNumEndpoints;
unsigned char bInterfaceClass;
unsigned char bInterfaceSubClass;
unsigned char bInterfaceProtocol;
unsigned char iInterface;
} USB_INTERFACE_DESCRIPTOR, *PUSB_INTERFACE_DESCRIPTOR;

typedef struct _USB_ENDPOINT_DESCRIPTOR {
    unsigned char bLength;
    unsigned char bDescriptorType;
unsigned char bEndpointAddress;
unsigned char bmAttributes;
unsigned short wMaxPacketSize;
    unsigned char bInterval;
} USB_ENDPOINT_DESCRIPTOR, *PUSB_ENDPOINT_DESCRIPTOR;

typedef struct _USB_ALL_CONFIGURATION_DESCRIPTOR
{
USB_CONFIGURATION_DESCRIPTOR  Config_Descr;
USB_INTERFACE_DESCRIPTOR      Interface_Descr;
USB_ENDPOINT_DESCRIPTOR       Ep_Descr1;
USB_ENDPOINT_DESCRIPTOR       Ep_Descr2;
} USB_CONFIGURATION_DESCRIPTOR_ALL, *PUSB_CONFIGURATION_DESCRIPTOR_ALL;

USB_CONFIGURATION_DESCRIPTOR_ALL  ConfigDescr_All =
{
{
0x09, /*Length of the configuration Descriptor*/
0x02, /*Configuration Descriptor              */
0x2000,   /*Total length of the configurations,interface and class/endpoint*/
0x01, /*No. of interface supported             */
0x01, /*Configuration Value                      */
0x00, /*Index of string descriptor                */
0xC0, /*Configurations Characteristic              */
0x32 /*Maximun Power                                */
},                                                                                    
{
0x09, /*Length of standard interface descriptor */
0x04, /*Standard Interface Type             */
0x00, /*No of Interface                      */
0x00, /*Alternate Setting Selector            */
0x02, /*No of Endpoints                       */
0x00, /*Interface Class                      */
0x00, /*ATAPI Interface Sub Class             */
0x00, /*Bulk Only Interface Protocol           */
0x00 /*Index of interface string desriptor     */
},
{
0x07, /*Length of Standard Endpoint Descriptor*/
0x05, /*Standard Endpoint Type   */
0x81, /*Set Bulk endpoint to 1 for ATAPI mode */
0x02, /*Endpoint Characteristic               */
0x0040, /*Endpoint Max Packet Size               */
0x00 /*Interval for Polling Endpoint for data transfer */
},
{
0x07, /*Length of Standard Endpoint Descriptor*/
0x05, /*Standard Endpoint Type   */
0x01, /*Set Bulk endpoint to 1 for ATAPI mode */
0x02, /*Endpoint Characteristic               */
0x0040, /*Endpoint Max Packet Size               */
0x00 /*Interval for Polling Endpoint for data transfer */
}
};
iamchine
驱动小牛
驱动小牛
  • 注册日期2002-11-18
  • 最后登录2005-11-23
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
8楼#
发布于:2003-02-18 18:05
你的接口描述符有点问题,接口类(mass storage是80h),子类(SCSI sub class是06h),协议类型(bulk only是50h)
jinghuiren
驱动巨牛
驱动巨牛
  • 注册日期2002-06-01
  • 最后登录2008-10-27
  • 粉丝0
  • 关注0
  • 积分291分
  • 威望460点
  • 贡献值0点
  • 好评度428点
  • 原创分0分
  • 专家分0分
9楼#
发布于:2003-02-18 20:10
改了之后还是不行,收到80 06 00 02 00 00 09 00后我发送09 02 20 00 01 01 00 c0 32(我的设备是自供电),就停止了,我觉得这个配置描述符没什么问题呀。
iamchine
驱动小牛
驱动小牛
  • 注册日期2002-11-18
  • 最后登录2005-11-23
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
10楼#
发布于:2003-02-19 08:37
此描述符是没什么问题,那会不会是出在操作系统上呢?你还是用的WIN98?主板带USB2.0接口?还是转换卡?你换W2K试试呢?
jinghuiren
驱动巨牛
驱动巨牛
  • 注册日期2002-06-01
  • 最后登录2008-10-27
  • 粉丝0
  • 关注0
  • 积分291分
  • 威望460点
  • 贡献值0点
  • 好评度428点
  • 原创分0分
  • 专家分0分
11楼#
发布于:2003-02-19 10:07
我用的是win98,但是是用的2。0的转换卡,说不定是操作系统的问题,这几天老是死机,我想老板申请一台新机器试试。先谢谢你了,等问题解决了另开贴送分给你 :)
wafer
驱动牛犊
驱动牛犊
  • 注册日期2003-02-13
  • 最后登录2003-03-25
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
12楼#
发布于:2003-02-24 20:44
我也是在收到80 06 00 02 00 00 09 00后返回配置描述符就停止了,,我觉得是最后两个c0,32有问题,不知道你是如何确定的?
jinghuiren
驱动巨牛
驱动巨牛
  • 注册日期2002-06-01
  • 最后登录2008-10-27
  • 粉丝0
  • 关注0
  • 积分291分
  • 威望460点
  • 贡献值0点
  • 好评度428点
  • 原创分0分
  • 专家分0分
13楼#
发布于:2003-02-25 11:42
根据协议规定,c0那个字节的b7位必须为1;b6位如果是自供电则为1,如果是总线供电则为0,我的是自供电,所以设为1;b5位表示设备是否支持远程唤醒,我的虽然支持但是我不准备使用,所以设为0,这样这个字节就是c0。

32那个字节的值乘于2表示电流的大小,我设置的是100mA,应该没有错吧。
jinghuiren
驱动巨牛
驱动巨牛
  • 注册日期2002-06-01
  • 最后登录2008-10-27
  • 粉丝0
  • 关注0
  • 积分291分
  • 威望460点
  • 贡献值0点
  • 好评度428点
  • 原创分0分
  • 专家分0分
14楼#
发布于:2003-07-30 22:43
总结一下:之所以我没有收到标题中的那个命令,可能是应为操作系统的原因,我在2k下收到了这个命令,但是由于我的微处理器是16位的,因此我每次发给主机的其实是10个字节,而不是9个字节,因此会出错,后来我通过设置datacount只发给主机9个字节数据,枚举就通过了。
游客

返回顶部