lifekill
驱动牛犊
驱动牛犊
  • 注册日期2002-08-22
  • 最后登录2005-07-25
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:1861回复:5

PDIUSBD12枚举过程遇到的问题,清高手指点一下,不胜感激!!!

楼主#
更多 发布于:2003-01-07 17:55
我的也有问题有点迷惑了
收到的数据如下:
0x80 06 00 01 00 00 40 00 Get_Descriptor : device
0x00 00 00 01 00 00 40 00 不知是何东西
0x00 05 02 00 00 00 00 00 Set_Address
0x80 06 00 01 00 00 12 00 Get_Descriptor : device
0x00 00 00 01 00 00 12 00 不知是何东西
0x80 06 00 02 00 00 09 00 Get_Descriptor : configuration
0x00 00 00 02 00 00 09 00 不知是何东西
0x80 06 00 02 00 00 ff 00 Get_Descriptor : configuration
0x00 00 00 02 00 00 ff 00 不知是何东西

重复了几次之后就结束了,枚举不成功

这是我通过存储信息的得到的
void D12_int() 我的主循环处理过程
{
    unsigned char i;
    unsigned char cIntEot;
    XmtBuff.pNum = 16;

    D12_COMMAND = 0xf4;   // Read Interrupt regcIntStatuser
    delay(2);
    cIntStatus = D12_DATA;
    delay(2);
    cIntEot = D12_DATA;
    delay(2);

    if(cIntStatus != 0)
    {
    // <1>--------------------------------------------------

         // --------------------------
         // D12_INT_BUSRESET BUS reset
         // --------------------------
         if(cIntStatus & 0x40)        
{
   bus_reset();
}
else
         {  
         // <2>---------------------------------------------
             // D12_INT_EOT DMA operation end
             // -----------------------------
             if(cIntEot & 0x01)    
   {
       dma_eot();
   }
        
             // ---------------------------------
             // D12_INT_SUSPENDCHANGE D12 Suspend
             // ---------------------------------
             if(cIntStatus & 0x80)            
             {
                 D12_COMMAND = 0xf6;  //Send Resume command
  }
   
             // ---------------------------------
             // ENDP0_OUT
             // ---------------------------------
             if(cIntStatus & 0x01)                    
   {
       XmtBuff.out = 0;
       XmtBuff.in  = 1;

       D12_COMMAND = 0x40;
                 // Read OUT Finally Status
                 delay(2);
       cIntStatus= D12_DATA;
                 delay(2);

                 if (cIntStatus & 0x20)  
                 // Reciever SETUP packet
       {
           Setup_read();
           Setup_control();
       }
       else
       {
           Setup_read();
       }
   }

             // ---------------------------------
             // ENDP0_IN
             // ---------------------------------
   if(cIntStatus & 0x02)        
   {
       XmtBuff.in  = 1;
 
                 D12_COMMAND = 0x41;    
                 // Read in Finally Status
                 delay(2);
       cIntStatus = D12_DATA;
                 delay(2);

                 USB_submit();
   }

             // ---------------------------------
             // ENDP1_OUT
             // ---------------------------------
   if(cIntStatus & 0x04)          
   {
       XmtBuff.out = 2;
       XmtBuff.in  = 3;

       D12_COMMAND = 0x42;
                 // Read out Finally Status
                 delay(2);
                 cIntStatus = D12_DATA;
                 delay(2);

                 read_out();
       }
     }

             // ---------------------------------
             // ENDP1_IN
             // ---------------------------------
   if(cIntStatus & 0x08)        
   {
       XmtBuff.in  = 3;
       //ppp=&ramm;

       D12_COMMAND = 0x43;    
                 // Read in Finally Status
                 delay(2);
       cIntStatus = D12_DATA;
                 delay(2);

     for(i=0;i<8;i++)
                     XmtBuff.b = i;
                 XmtBuff.wrLength = 8;
                 XmtBuff.p = XmtBuff.b;

       USB_send();
             }

             // ---------------------------------
             // ENDP2_OUT
             // ---------------------------------
   if(cIntStatus & 0x10)        
   {
       XmtBuff.pNum=64;
       XmtBuff.out = 4;
       XmtBuff.in  = 5;

       D12_COMMAND = 0x44;
                 // Read out Finally status
                 delay(2);
                 cIntStatus = D12_DATA;
                 delay(2);

                 read_out();
   }

             // ---------------------------------
             // ENDP2_IN
             // ---------------------------------
   if(cIntStatus & 0x20)        
   {
       XmtBuff.pNum=64;
       XmtBuff.in  = 5;

       D12_COMMAND = 0x45;    
                 // Read in finally status
                 delay(2);
       cIntStatus = D12_DATA;
                 delay(2);

                 XmtBuff.wrLength = 64;
                 XmtBuff.p = XmtBuff.b;
       add++;
       USB_send2();
   }
        // <2>----------------------------------------------
        }
    // <1>--------------------------------------------------
    }
}
因为是在嵌入式系统,所以加了延时;

大家有兴趣的帮帮忙,

最新喜欢:

lhaihlhaih
lifekill
驱动牛犊
驱动牛犊
  • 注册日期2002-08-22
  • 最后登录2005-07-25
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2003-01-08 10:41
我的USB有进展了一步,用USBView可以看到我的设备信息了。并且已经要求安装驱动程序了,问题出在发送第二个Get_Descriptor(Configuration)-0xff时要保证传送的信息务必正确。

问一下大侠们,从本站下载的WinDriver5.22的crack怎么不好用啊,
装完后重新启动Win2000就废了.我该咋办呢????

lifekill
驱动牛犊
驱动牛犊
  • 注册日期2002-08-22
  • 最后登录2005-07-25
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2003-01-14 16:20
我更改了一下设备描述符,以及接口描述符的配置,Win2000能识别出我的设备为海量存储设备并且自动安装了驱动,但是用USBview观察发现打开的管道为零,不可用。改成其他类型安装驱动后是正常的,正在迷惑中
dacongtou
驱动中牛
驱动中牛
  • 注册日期2002-11-11
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地板#
发布于:2003-01-14 16:45
在发送第二个Get_Descriptor(Configuration)-0xff时要保证传送的信息务必正确。

 


请问一下..这个\"必须保证传送的信息务必正确\"什么意思啊??我也是做到这一步,然后安装驱动后有叹号,显示\"安装驱动失败\"....我用USBVIEW观察,Current Config Value=0x00.....我觉得步骤肯定有问题,但不知是哪里的问题....
lifekill
驱动牛犊
驱动牛犊
  • 注册日期2002-08-22
  • 最后登录2005-07-25
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2003-01-15 09:55
意思是把配置描述符+接口描述符+端点描述符传输正确,ok
dacongtou
驱动中牛
驱动中牛
  • 注册日期2002-11-11
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2003-01-15 11:59
改成其他类型安装驱动后是正常的



怎么改啊..改完了用USBVIEW就可以观察发现打开的管道不为零了么??
游客

返回顶部