阅读:2202回复:13
100分――USB枚举问题!
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!我的程序会在什么地方有问题? |
|
最新喜欢:jipeif...
|
沙发#
发布于:2002-10-23 12:56
这问题太高深了,高手快快回答,俺也听听。
|
|
板凳#
发布于:2002-10-23 13:00
在第一次送描述符时,主机只需要读取8B即可,之后开始状态阶段,状态阶段之后要重启设备,注意这里要重启,因为按照协议不需重启,但不重启容易出问题。 你可以试一试。
|
|
|
地板#
发布于:2002-10-23 18:01
读取中断寄存器的值如下:0xC0,0x80,0xC0,0x02,0x01,0x01,0x01,0x02,0x01,0x02
|
|
|
地下室#
发布于:2002-10-24 08:52
我昨天遇到了和你相同的问题,用usbview看也是到了那就不动了
不过我的问题是固件的问题,而且是与描述符有关的,改了描述符就好了 |
|
5楼#
发布于:2002-10-24 09:43
可能是Configure Descriptor有问题。
|
|
|
6楼#
发布于:2002-10-26 13:45
楼上的那位,可以问你一些有关USB的问题吗?
|
|
7楼#
发布于:2005-05-17 20:19
newdm
发表于: 2002/10/24 - 08:52 我昨天遇到了和你相同的问题,用usbview看也是到了那就不动了 不过我的问题是固件的问题,而且是与描述符有关的,改了描述符就好了 是device的那个描述符出错了,我也是遇到了这个问题,郁闷了n天了。 |
|
8楼#
发布于:2005-05-18 15:15
把设备类型的那3个FF改成00试一试
|
|
|
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设备。 |
|
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(); } } |
|
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字节 就一定能通过。 |
|
12楼#
发布于:2005-05-19 08:07
对阿,流程是这样.我的前两个8字节都送出去了,应该是中断没问题的.可是到了剩下地2个字节,却不知道为什么跳不出上边地循环了,按道理应该是(18-8-8)<8,会跳出循环地啊,可是程序就是不动了,是不是我上边地描述符错了啊?
|
|
13楼#
发布于:2005-05-24 10:16
09 02 00 2e - 01 01 04 c0 (设备给主机的值)
00 我分析了一下,虽然你的设备是自供电的,但你也不致于把最大总线供电流设成 00 吧 ! |
|