阅读:1861回复:5
PDIUSBD12枚举过程遇到的问题,清高手指点一下,不胜感激!!!
我的也有问题有点迷惑了
收到的数据如下: 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>-------------------------------------------------- } } 因为是在嵌入式系统,所以加了延时; 大家有兴趣的帮帮忙, |
|
最新喜欢:![]() |
沙发#
发布于:2003-01-08 10:41
我的USB有进展了一步,用USBView可以看到我的设备信息了。并且已经要求安装驱动程序了,问题出在发送第二个Get_Descriptor(Configuration)-0xff时要保证传送的信息务必正确。
问一下大侠们,从本站下载的WinDriver5.22的crack怎么不好用啊, 装完后重新启动Win2000就废了.我该咋办呢???? |
|
板凳#
发布于:2003-01-14 16:20
我更改了一下设备描述符,以及接口描述符的配置,Win2000能识别出我的设备为海量存储设备并且自动安装了驱动,但是用USBview观察发现打开的管道为零,不可用。改成其他类型安装驱动后是正常的,正在迷惑中
|
|
地板#
发布于:2003-01-14 16:45
在发送第二个Get_Descriptor(Configuration)-0xff时要保证传送的信息务必正确。 请问一下..这个\"必须保证传送的信息务必正确\"什么意思啊??我也是做到这一步,然后安装驱动后有叹号,显示\"安装驱动失败\"....我用USBVIEW观察,Current Config Value=0x00.....我觉得步骤肯定有问题,但不知是哪里的问题.... |
|
地下室#
发布于:2003-01-15 09:55
意思是把配置描述符+接口描述符+端点描述符传输正确,ok
|
|
5楼#
发布于:2003-01-15 11:59
改成其他类型安装驱动后是正常的 怎么改啊..改完了用USBVIEW就可以观察发现打开的管道不为零了么?? |
|