duanjong
驱动中牛
驱动中牛
  • 注册日期2003-03-10
  • 最后登录2006-01-18
  • 粉丝0
  • 关注0
  • 积分31分
  • 威望5点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
阅读:4557回复:16

我的USB设备在枚举时,主机可以发现设备,但用BUSHOUND看到的描述符都是错的,为什么?BUSHOUND 里的数据如何才算对的,希望各位高手帮帮小弟,我已经调试了2个周了,但毫无进展,谢谢

楼主#
更多 发布于:2003-04-17 15:04
我的USB设备在枚举时,主机可以发现设备,但用BUSHOUND看到的描述符都是错的,为什么?BUSHOUND 里的数据如何才算对的,希望各位高手帮帮小弟,我已经调试了2个周了,但毫无进展,谢谢!!!!

最新喜欢:

idlemanidlema...
double
论坛版主
论坛版主
  • 注册日期2002-03-30
  • 最后登录2015-05-05
  • 粉丝0
  • 关注0
  • 积分24分
  • 威望4点
  • 贡献值0点
  • 好评度2点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2003-04-17 23:28
能把情况说的具体些吗,例如说,你做的是什么设备,使用的是什么设备,开发用的软件是什么。这样说起来可能大家就更有针对性了。
轻轻的我来了 带给你欢乐 悄悄的我走了 带走你忧愁
duanjong
驱动中牛
驱动中牛
  • 注册日期2003-03-10
  • 最后登录2006-01-18
  • 粉丝0
  • 关注0
  • 积分31分
  • 威望5点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2003-04-18 21:54
我做的 是usb数据采集系统,使用的PDIUSBD12,开发软件用的是INSIGHT-52P的编译环境,请问有什么高建???谢谢 !!!
Li Li
驱动牛犊
驱动牛犊
  • 注册日期2002-11-14
  • 最后登录2003-05-09
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地板#
发布于:2003-04-21 09:50
首先建议你可以把bushound截下来的数据附上
djsnake
驱动牛犊
驱动牛犊
  • 注册日期2002-10-29
  • 最后登录2003-07-12
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2003-04-21 10:28
 2.0  CTL    a3 00 00 00 - 02 00 04 00                              CLASS             3.0sc         1.1.0        
   2    STAK   0f 00 00 e0 - 30 af 6c c1                              INTERNAL IOCTL     26us         1.2.0        
   2.0  DI     00 01 03 00                                            ....               25us         1.3.0        
   2    URB    50 00 08 00 - 00 00 00 00                              CONTROL TRANSFER    7us         1.4.0        
   2    CTL    a3 00 00 00 - 02 00 04 00                              CLASS              47us         2.1.0        
   2    STAK   0f 00 00 e0 - f4 8a 4d c1                              INTERNAL IOCTL     11us         2.2.0        
   2.0  DI     00 01 03 00                                            ....               17us         2.3.0        
   2    URB    50 00 08 00 - 00 00 00 00                              CONTROL TRANSFER    7us         2.4.0        
   2.0  CTL    23 01 10 00 - 02 00 00 00                              CLASS              24us         3.1.0        
   2    STAK   0f 00 00 e0 - d0 88 db d5                              INTERNAL IOCTL     13us         3.2.0        
   2    URB    50 00 08 00 - 00 00 00 00                              CONTROL TRANSFER   13us         3.3.0        
   2    STAK   0f 00 00 e0 - 30 af 6c c1                              INTERNAL IOCTL     29us         4.1.0        
   2.0  CTL    a3 00 00 00 - 01 00 04 00                              CLASS             854us         5.1.0        
   2    STAK   0f 00 00 e0 - f4 8a 4d c1                              INTERNAL IOCTL     20us         5.2.0        
   2.0  DI     00 01 00 00                                            ....               21us         5.3.0        
   2    URB    50 00 08 00 - 00 00 00 00                              CONTROL TRANSFER    7us         5.4.0        
   2.0  CTL    a3 00 00 00 - 02 00 04 00                              CLASS              25us         6.1.0        
   2    STAK   0f 00 00 e0 - f4 8a 4d c1                              INTERNAL IOCTL     13us         6.2.0        
   2.0  DI     00 01 02 00                                            ....               12us         6.3.0        
   2    URB    50 00 08 00 - 00 00 00 00                              CONTROL TRANSFER    7us         6.4.0        
   2.1  DI     04                                                     .                 101ms         4.2.0        
   2    URB    48 00 09 00 - 00 00 00 00                              BULK/INT XFER      13us         4.3.0        
   2    CTL    a3 00 00 00 - 02 00 04 00                              CLASS              23us         7.1.0        
   2    STAK   0f 00 00 e0 - 30 af 6c c1                              INTERNAL IOCTL     15us         7.2.0        
   2.0  DI     00 01 02 00                                            ....               24us         7.3.0        
   2    URB    50 00 08 00 - 00 00 00 00                              CONTROL TRANSFER    7us         7.4.0        
   2    CTL    a3 00 00 00 - 02 00 04 00                              CLASS             105us         8.1.0        
   2    STAK   0f 00 00 e0 - 44 2c e5 d5                              INTERNAL IOCTL     12us         8.2.0        
   2.0  DI     00 01 02 00                                            ....               16us         8.3.0        
   2    URB    50 00 08 00 - 00 00 00 00                              CONTROL TRANSFER    7us         8.4.0        
   2.0  CTL    23 01 11 00 - 02 00 00 00                              CLASS              28us         9.1.0  
Li Li
驱动牛犊
驱动牛犊
  • 注册日期2002-11-14
  • 最后登录2003-05-09
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2003-04-21 12:18
建议你先按如下步骤用bushound截取usb设备的数据:
1 首先拔下usb设备后重置bushound的捕捉状态;
2 插上你的usb设备,此时usb host controller 会发出几个ctl 帧来询问设备的,第一个应该是 80 06 00 01 - ...我不清楚你截下来的是哪一段数据,因为我没有找到该帧(get device descriptor);
3 然后。。。再说啦
token
驱动牛犊
驱动牛犊
  • 注册日期2003-04-09
  • 最后登录2010-04-29
  • 粉丝0
  • 关注0
  • 积分1分
  • 威望1点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2003-04-21 12:54
你打开设备管理器看一下加载的是正确的驱动程序吗?如果不是那可能是固件响应host的取描述符请求例程有问题,否则不会把描述符弄错。
howard_leon
驱动牛犊
驱动牛犊
  • 注册日期2002-10-05
  • 最后登录2007-07-13
  • 粉丝0
  • 关注0
  • 积分25分
  • 威望3点
  • 贡献值0点
  • 好评度2点
  • 原创分0分
  • 专家分0分
7楼#
发布于:2003-04-25 00:33
正确的一个bushound过程如下:
 10.0  CTL    80 06 00 01 - 00 00 40 00  GET DESCRIPTR  256us        12.1.0        
  10.0  DI     12 01 00 01 - dc 00 00 10  ........       4.0ms        12.2.0        
               71 04 66 06 - 00 01 00 00  q.f.....                    12.2.8        
  10.0  CTL    a3 00 00 00 - 01 00 04 00  CLASS           26us        13.1.0        
  10.0  DI     03 01 00 00                ....             8us        13.2.0        
  10.0  CTL    23 03 04 00 - 01 00 00 00  CLASS           23us        14.1.0        
  10.1  DI     02                         .               75ms        15.1.0        
  10.0  CTL    a3 00 00 00 - 01 00 04 00  CLASS           24us        16.1.0        
  10.0  DI     03 01 10 00                ....            23us        16.2.0        
  10.0  CTL    23 01 14 00 - 01 00 00 00  CLASS            5us        17.1.0        
  10.0  CTL    00 05 02 00 - 00 00 00 00  SET ADDRESS     20ms        18.1.0        
  10.0  CTL    80 06 00 01 - 00 00 12 00  GET DESCRIPTR   13ms        19.1.0        
  10.0  DI     12 01 00 01 - dc 00 00 10  ........       4.8ms        19.2.0        
               71 04 66 06 - 00 01 00 00  q.f.....                    19.2.8        
               00 19                      ..                          19.2.16      
  10.0  CTL    80 06 00 02 - 00 00 09 00  GET DESCRIPTR   47us        20.1.0        
  10.0  DI     09 02 2e 00 - 01 01 00 60  .......`       3.9ms        20.2.0        
               01                         .                           20.2.8        
  10.0  CTL    a3 00 00 00 - 02 00 04 00  CLASS          6.0ms        21.1.0        
  10.0  DI     00 01 00 00                ....            14us        21.2.0        
  12.0  CTL    80 06 00 01 - 00 00 12 00  GET DESCRIPTR   14ms        22.1.0        
  12.0  DI     12 01 00 01 - dc 00 00 10  ........       4.6ms        22.2.0        
               71 04 66 06 - 00 01 00 00  q.f.....                    22.2.8        
               00 19                      ..                          22.2.16      
  12.0  CTL    80 06 00 02 - 00 00 00 04  GET DESCRIPTR   46us        23.1.0        
  12.0  DI     09 02 2e 00 - 01 01 00 60  .......`       5.9ms        23.2.0        
               01 09 04 00 - 00 04 dc a0  ........                    23.2.8        
               b0 00 07 05 - 81 03 04 00  ........                    23.2.16      
               0a 07 05 01 - 03 04 00 0a  ........                    23.2.24      
               07 05 82 02 - 40 00 0a 07  ....@...                    23.2.32      
               05 02 02 40 - 00 0a        ...@..                      23.2.40      
  12.0  CTL    00 09 01 00 - 00 00 00 00  SET CONFIG      64us        24.1.0        


你可以在看看硬件方面,应该还是硬件惹得祸。
leadphone
驱动牛犊
驱动牛犊
  • 注册日期2002-11-28
  • 最后登录2008-09-04
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
8楼#
发布于:2003-04-25 16:49
正确的一个bushound过程如下:
 。。。  14us        21.2.0        
  12.0  CTL    80 06 00 01 - 00 00 12 00  GET DESCRIPTR   14ms        22.1.0        
  12.0  DI     12 01 00 01 - dc 00 00 10  ........       4.6ms        22.2.0        
               71 04 66 06 - 00 01 00 00  q.f.....                    22.2.8        
               00 19                      ..                          22.2.16      
  12.0  CTL    80 06 00 02 - 00 00 00 04  GET DESCRIPTR   46us        23.1.0        
  12.0  DI     09 02 2e 00 - 01 01 00 60  .......`       5.9ms        23.2.0        
               01 09 04 00 - 00 04 dc a0  ........                    23.2.8        
               b0 00 07 05 - 81 03 04 00  ........                    23.2.16      
               0a 07 05 01 - 03 04 00 0a  ........                    23.2.24      
               07 05 82 02 - 40 00 0a 07  ....@...                    23.2.32      
               05 02 02 40 - 00 0a        ...@..                      23.2.40      
  12.0  CTL    00 09 01 00 - 00 00 00 00  SET CONFIG      64us        24.1.0        


你可以在看看硬件方面,应该还是硬件惹得祸。

楼上的大侠,请问你用的是什么版本的bus hound???怎么抓到的数据比我多多了?
我不明白host为什么又发了一次80 06 00 01 - 00 00 12 00和80 06 00 02 - 00 00 00 04????
另外请问80 06 00 02 - 00 00 00 04中的这个04是怎么回事???
iamchine
驱动小牛
驱动小牛
  • 注册日期2002-11-18
  • 最后登录2005-11-23
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
9楼#
发布于:2003-04-25 17:10
我想抓的数据多是因为在BusHound设备菜单里选择的获取数据设备多,还有设置菜单里的选项。
主机一般先以地址0发一遍GetDeviceDescriptor和GetConfigDescriptor,然后set Address之后再发一遍。
04是描述符长度中的高字节。
leadphone
驱动牛犊
驱动牛犊
  • 注册日期2002-11-28
  • 最后登录2008-09-04
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
10楼#
发布于:2003-04-25 17:38
我想抓的数据多是因为在BusHound设备菜单里选择的获取数据设备多,还有设置菜单里的选项。
主机一般先以地址0发一遍GetDeviceDescriptor和GetConfigDescriptor,然后set Address之后再发一遍。
04是描述符长度中的高字节。

呵呵,误会。

我不是说那些class什么的。。。
我说的捕捉的数据多主要是指set config之前多的最后两个get descriptor。我在firmware里可以用数组捉到,但是我的bus hound却没有,迷惑!!!!

djsnake
驱动牛犊
驱动牛犊
  • 注册日期2002-10-29
  • 最后登录2003-07-12
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
11楼#
发布于:2003-04-25 17:52
大家来看看我的原理图,我觉得没有什么错误,大家给点意见???谢谢!!!!!
NewTech
驱动大牛
驱动大牛
  • 注册日期2002-10-02
  • 最后登录2010-03-27
  • 粉丝0
  • 关注0
  • 积分16分
  • 威望263点
  • 贡献值0点
  • 好评度86点
  • 原创分0分
  • 专家分0分
12楼#
发布于:2003-04-28 11:14
一般来讲设备枚举跟外围硬件关系不大的!我看主要是你的接收子程序有错!
djsnake
驱动牛犊
驱动牛犊
  • 注册日期2002-10-29
  • 最后登录2003-07-12
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
13楼#
发布于:2003-04-29 12:22
没有错啊,不妨你来看看
void ep0_rxdone(void)
{
unsigned char ep_last, i;

ep_last = D12_ReadLastTransactionStatus(0); // Clear interrupt flag

if (ep_last & D12_SETUPPACKET)
        {

ControlData.wLength = 0;
ControlData.wCount = 0;
//判断端点是否满,如是,则取出
if( D12_ReadBuffer(0,(unsigned char *)(&(ControlData.DeviceRequest)),sizeof(ControlData.DeviceRequest)) != sizeof(DEVICE_REQUEST))
{

D12_SetEndpointStatus(0, 1);
D12_SetEndpointStatus(1, 1);
bEPPflags.bits.control_state = USB_IDLE;

return;
  }

ControlData.DeviceRequest.wValue = SWAP(ControlData.DeviceRequest.wValue);
ControlData.DeviceRequest.wIndex = SWAP(ControlData.DeviceRequest.wIndex);
ControlData.DeviceRequest.wLength = SWAP(ControlData.DeviceRequest.wLength);

// Acknowledge setup here to unlock in/out endp
//向控制输出端点发送应答建立命令以重新使能下一个建立阶段
D12_AcknowledgeEndpoint(0);
D12_AcknowledgeEndpoint(1);

ControlData.wLength = ControlData.DeviceRequest.wLength;
ControlData.wCount = 0;
//需要证实控制传输是控制读还是写,如果是读:
//如果控制传输是一个控制读类型那就是说器件需要在下一个数据阶段向
//主机发回数据包.MCU需要设置一个标志以指示USB 设备现在正处于传输
//模式即准备在主机发送请求时发送数据

if (ControlData.DeviceRequest.bmRequestType & (unsigned char)USB_ENDPOINT_DIRECTION_MASK)
       {
bEPPflags.bits.setup_packet = 1;
bEPPflags.bits.control_state = USB_TRANSMIT; /* get command */
}
//如果是写
else
{
if (ControlData.DeviceRequest.wLength == 0)
                {
bEPPflags.bits.setup_packet = 1;
bEPPflags.bits.control_state = USB_IDLE; /* set command */
}
else
{
if(ControlData.DeviceRequest.wLength > MAX_CONTROLDATA_SIZE)
{
bEPPflags.bits.control_state = USB_IDLE;
D12_SetEndpointStatus(0, 1);
D12_SetEndpointStatus(1, 1);
}
else
{
bEPPflags.bits.control_state = USB_RECEIVE; /* set command with OUT token */
}
} // set command with data
} // else set command
} // if setup packet

else if (bEPPflags.bits.control_state == USB_RECEIVE)
{
i =D12_ReadBuffer(0, ControlData.dataBuffer + ControlData.wCount,EP0_PACKET_SIZE);

ControlData.wCount += i;

if( i != EP0_PACKET_SIZE || ControlData.wCount >= ControlData.wLength)
{
bEPPflags.bits.setup_packet = 1;
bEPPflags.bits.control_state = USB_IDLE;
}
}

else
{
bEPPflags.bits.control_state = USB_IDLE;
}

}
NewTech
驱动大牛
驱动大牛
  • 注册日期2002-10-02
  • 最后登录2010-03-27
  • 粉丝0
  • 关注0
  • 积分16分
  • 威望263点
  • 贡献值0点
  • 好评度86点
  • 原创分0分
  • 专家分0分
14楼#
发布于:2003-04-29 19:39
建议你在RAM中或者通过RS232将收到的数据保存起来,看看到底收到些什么!
szzwm
驱动牛犊
驱动牛犊
  • 注册日期2003-06-12
  • 最后登录2005-05-06
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
15楼#
发布于:2003-06-26 17:31
首先:请检查BusHound有关设备选择菜单里是否选错了项目;
其次:说明目前的固件还不能适应U盘驱动程序;要另找驱动程序。
jinghuiren
驱动巨牛
驱动巨牛
  • 注册日期2002-06-01
  • 最后登录2008-10-27
  • 粉丝0
  • 关注0
  • 积分291分
  • 威望460点
  • 贡献值0点
  • 好评度428点
  • 原创分0分
  • 专家分0分
16楼#
发布于:2003-06-26 21:43
大家来看看我的原理图,我觉得没有什么错误,大家给点意见???谢谢!!!!!

把你的描述符贴出来看看
看你的源程序不好说。
游客

返回顶部