CObject
驱动大牛
驱动大牛
  • 注册日期2002-08-18
  • 最后登录2017-07-22
  • 粉丝0
  • 关注0
  • 积分14分
  • 威望106点
  • 贡献值0点
  • 好评度2点
  • 原创分0分
  • 专家分0分
  • 社区居民
阅读:2202回复:13

100分――USB枚举问题!

楼主#
更多 发布于:2002-10-23 11:47
80 06 00 01 - 00 00 40 00            GET DESCRIPTR
12 01 10 01 - ff ff ff 10            (设备给主机的值)
03 06 03 18 - 10 00 01 02

00 05 02 00 - 00 00 00 00            SET ADDRESS

80 06 00 01 - 00 00 12 00            GET DESCRIPTR
12 01 10 01 - ff ff ff 10            (设备给主机的值)
03 06 03 18 - 10 00 01 02
03 01

80 06 00 02 - 00 00 09 00            GET DESCRIPTR
09 02 00 2e - 01 01 04 c0            (设备给主机的值)
00

重复三次以上过程,计算机发现Unknown device!我的程序会在什么地方有问题?

最新喜欢:

jipeifengjipeif...
[img=501x116]http://www.driverdevelop.com/forum//upload/CObject/2004-01-13_2.jpg[/img]
chengjian_hui
驱动小牛
驱动小牛
  • 注册日期2002-09-29
  • 最后登录2003-09-16
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2002-10-23 12:56
这问题太高深了,高手快快回答,俺也听听。
double
论坛版主
论坛版主
  • 注册日期2002-03-30
  • 最后登录2015-05-05
  • 粉丝0
  • 关注0
  • 积分24分
  • 威望4点
  • 贡献值0点
  • 好评度2点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2002-10-23 13:00
在第一次送描述符时,主机只需要读取8B即可,之后开始状态阶段,状态阶段之后要重启设备,注意这里要重启,因为按照协议不需重启,但不重启容易出问题。 你可以试一试。
轻轻的我来了 带给你欢乐 悄悄的我走了 带走你忧愁
CObject
驱动大牛
驱动大牛
  • 注册日期2002-08-18
  • 最后登录2017-07-22
  • 粉丝0
  • 关注0
  • 积分14分
  • 威望106点
  • 贡献值0点
  • 好评度2点
  • 原创分0分
  • 专家分0分
  • 社区居民
地板#
发布于:2002-10-23 18:01
读取中断寄存器的值如下:0xC0,0x80,0xC0,0x02,0x01,0x01,0x01,0x02,0x01,0x02
[img=501x116]http://www.driverdevelop.com/forum//upload/CObject/2004-01-13_2.jpg[/img]
newdm
驱动牛犊
驱动牛犊
  • 注册日期2002-07-23
  • 最后登录2004-04-14
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2002-10-24 08:52
我昨天遇到了和你相同的问题,用usbview看也是到了那就不动了
不过我的问题是固件的问题,而且是与描述符有关的,改了描述符就好了
rayyang2000
管理员
管理员
  • 注册日期2001-03-23
  • 最后登录2012-09-13
  • 粉丝3
  • 关注0
  • 积分1036分
  • 威望925点
  • 贡献值3点
  • 好评度823点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2002-10-24 09:43
可能是Configure Descriptor有问题。
天天coding-debugging中----超稀饭memory dump file ======================================================== [b]Windows Device Driver Development and Consulting Service[/b] [color=blue][url]http://www.ybwork.com[/url][/color] ========================================================
txzb1103
驱动牛犊
驱动牛犊
  • 注册日期2002-10-09
  • 最后登录2003-02-21
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2002-10-26 13:45
楼上的那位,可以问你一些有关USB的问题吗?
wwyhw_sir
驱动牛犊
驱动牛犊
  • 注册日期2004-08-24
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
7楼#
发布于:2005-05-17 20:19
newdm

 发表于: 2002/10/24 - 08:52
我昨天遇到了和你相同的问题,用usbview看也是到了那就不动了
不过我的问题是固件的问题,而且是与描述符有关的,改了描述符就好了

 
是device的那个描述符出错了,我也是遇到了这个问题,郁闷了n天了。
lejianz
驱动中牛
驱动中牛
  • 注册日期2003-03-05
  • 最后登录2023-11-15
  • 粉丝0
  • 关注0
  • 积分8分
  • 威望145点
  • 贡献值0点
  • 好评度116点
  • 原创分0分
  • 专家分0分
  • 社区居民
8楼#
发布于:2005-05-18 15:15
把设备类型的那3个FF改成00试一试
一起交流,共同提高!
wwyhw_sir
驱动牛犊
驱动牛犊
  • 注册日期2004-08-24
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
9楼#
发布于:2005-05-18 18:54
我的设备描述符是这样定义的:code struct usb_st_device_descriptor usb_device_descriptor =
  {
    0x12, 0x01, 0x1001, 0, 0, 0, 8
    VENDOR_ID, PRODUCT_ID, RELEASE_NUMBER, MAN_INDEX, PROD_INDEX, SN_INDEX, 1
  };
第一次读取device时,只读前八个字节,也就是:0x12, 0x01, 0x1001, 0, 0, 0, 8,这八个字节有什么问题吗?我用的usb是1.1版本的。全速usb设备。
wwyhw_sir
驱动牛犊
驱动牛犊
  • 注册日期2004-08-24
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
10楼#
发布于:2005-05-18 19:37
第一次读取device时,也就是前八个字节程序能通过,set_adress也通过了,可是第三步获取全部的设备描述符时,却过不去了。读取了两次8字节以后,也该还有两个字节没有读取。但是程序却死在这里过不去了。

while (data_to_transfer > 8)
  {
  
  ser_putch(data_to_transfer);
   pbuffer = send_ep0_packet(pbuffer, 8);//发送8个字节
  
    data_to_transfer-=8;
    
    
    while ((!(Usb_rx_complete())) && (!(Usb_tx_complete())));//等待接受或发送
    
     if ((Usb_rx_complete()))                
    {
 
 
      Usb_clear_tx_ready();
      Usb_clear_RXOUT();

      return;
    }
   if (Usb_tx_complete())
    {
 
      Usb_clear_TXCMPL();
    }
  
}
Descriptor
驱动牛犊
驱动牛犊
  • 注册日期2005-03-13
  • 最后登录2006-01-19
  • 粉丝0
  • 关注0
  • 积分2分
  • 威望1点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
11楼#
发布于:2005-05-19 00:59
wwyhw_sir说:
读取了两次8字节以后,也该还有两个字节没有读取。但是程序却死在这里过不去了。
--------------------------------------------------------
问一下你的流程,是否:
1. setup包中断(8字节,Get_Descriptor), 准备数据。
2. IN中断,发送n字节(0<=n<=8)
如果是的,那么应该:
第1次IN中断,发送8字节
第2次IN中断,发送8字节
第3次IN中断,发送2字节
就一定能通过。
wwyhw_sir
驱动牛犊
驱动牛犊
  • 注册日期2004-08-24
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
12楼#
发布于:2005-05-19 08:07
对阿,流程是这样.我的前两个8字节都送出去了,应该是中断没问题的.可是到了剩下地2个字节,却不知道为什么跳不出上边地循环了,按道理应该是(18-8-8)<8,会跳出循环地啊,可是程序就是不动了,是不是我上边地描述符错了啊?
wonder_2001
驱动小牛
驱动小牛
  • 注册日期2002-07-02
  • 最后登录2010-12-03
  • 粉丝0
  • 关注0
  • 积分452分
  • 威望96点
  • 贡献值0点
  • 好评度36点
  • 原创分0分
  • 专家分0分
13楼#
发布于:2005-05-24 10:16
09 02 00 2e - 01 01 04 c0 (设备给主机的值)
00
我分析了一下,虽然你的设备是自供电的,但你也不致于把最大总线供电流设成 00 吧 !
游客

返回顶部