阅读:1406回复:19
有没有人遇到D12枚举重复好几次而失败的情况?
我自己参照D12 smart board的demo程序写的firmware程序,发现枚举还没成功时就又重新开始枚举了,有人也遇到这样的问题吗?各位大侠帮忙看看,是什么步骤有错啊?
Device Phase Data Description ------ ----- ----------- ---------------- 1.1 DI 04 . 1.0 CTL a3 00 00 00 GET STATUS 02 00 04 00 1.0 DI 01 01 01 00 .... 1.0 CTL 23 01 10 00 CLEAR FEATURE 02 00 00 00 1.0 CTL a3 00 00 00 GET STATUS 01 00 04 00 1.0 DI 00 01 00 00 .... 1.0 CTL a3 00 00 00 GET STATUS 02 00 04 00 1.0 DI 01 01 00 00 .... 1.0 CTL 23 03 04 00 SET FEATURE 02 00 00 00 1.1 DI 04 . 1.0 CTL a3 00 00 00 GET STATUS 02 00 04 00 1.0 DI 03 01 10 00 .... 1.0 CTL 23 01 14 00 CLEAR FEATURE 02 00 00 00 1.0 CTL a3 00 00 00 GET STATUS 02 00 04 00 1.0 DI 03 01 00 00 .... 1.0 CTL 80 06 00 01 GET DESCRIPTOR 00 00 40 00 1.0 DI 12 01 00 01 .... dc 00 00 10 .... 71 04 66 06 q.f. 00 01 00 00 .... 1.0 CTL 23 03 04 00 SET FEATURE 02 00 00 00 1.1 DI 04 . 1.0 CTL a3 00 00 00 GET STATUS 02 00 04 00 1.0 DI 03 01 10 00 .... 1.0 CTL 23 01 14 00 CLEAR FEATURE 02 00 00 00 1.0 CTL 00 05 02 00 SET ADDRESS 00 00 00 00 1.0 CTL 80 06 00 01 GET DESCRIPTOR 00 00 12 00 1.0 DI 12 01 00 01 .... dc 00 00 10 .... 71 04 66 06 q.f. 00 01 00 00 .... 00 19 .. 1.0 CTL 80 06 00 02 GET DESCRIPTOR 00 00 09 00 1.0 DI 09 02 2e 00 .... 01 01 00 60 ...` 01 . 1.1 DI 04 ;重新开始了 1.0 CTL a3 00 00 00 GET STATUS 02 00 04 00 1.0 DI 01 01 01 00 .... 1.0 CTL 23 01 10 00 CLEAR FEATURE 02 00 00 00 1.0 CTL a3 00 00 00 GET STATUS 01 00 04 00 1.0 DI 00 01 00 00 .... 1.0 CTL a3 00 00 00 GET STATUS 02 00 04 00 1.0 DI 01 01 00 00 .... 1.0 CTL 23 03 04 00 SET FEATURE 02 00 00 00 1.1 DI 04 . 1.0 CTL a3 00 00 00 GET STATUS 02 00 04 00 1.0 DI 03 01 10 00 .... 1.0 CTL 23 01 14 00 CLEAR FEATURE 02 00 00 00 1.0 CTL a3 00 00 00 GET STATUS 02 00 04 00 1.0 DI 03 01 00 00 .... 1.0 CTL 80 06 00 01 GET DESCRIPTOR 00 00 40 00 1.0 DI 12 01 00 01 .... dc 00 00 10 .... 71 04 66 06 q.f. 00 01 00 00 .... 1.0 CTL 23 03 04 00 SET FEATURE 02 00 00 00 1.1 DI 04 . 1.0 CTL a3 00 00 00 GET STATUS 02 00 04 00 1.0 DI 03 01 10 00 .... 1.0 CTL 23 01 14 00 CLEAR FEATURE 02 00 00 00 1.0 CTL 00 05 02 00 SET ADDRESS 00 00 00 00 总是在第二次发送设备描述符和配置描述符后重新开始枚举,如此重复多次,未果,枚举失败! [编辑 - 5/17/04 by martinqk] [编辑 - 5/17/04 by martinqk] [编辑 - 5/17/04 by martinqk] |
|
沙发#
发布于:2004-05-17 20:22
即使一个好的USB设备也可能出现多次枚举,这是由于干扰等原因导致数据传输出错等。当如果像你所说的不断枚举最后枚举失败就不正常了,这种情况应该是枚举三次然后报告枚举失败
|
|
|
板凳#
发布于:2004-05-17 21:37
那么,按照我的数据,是固件程序哪里有问题呢?设备描述符和配置描述符都发出去了,应该是成功的,对吧,可是看不到Set Configuration与Get Configuration。
|
|
地板#
发布于:2004-05-18 08:54
看一下你的配置描述符对不对,我也遇到过这样的问题,最后发现是传递的描述符指针类型不对
|
|
|
地下室#
发布于:2004-05-18 09:03
这种重复枚举不成功的例子,一般都是描述符不对,或没有发送对。
看你的问题好像是配置描述符的问题。 用bushound抓一下,看发的数据和定义的是否一样。 |
|
5楼#
发布于:2004-05-18 09:29
同意bbiliu和hoverfei的观点,应该是描述符错误!而且应该是比较明显的错误!
|
|
|
6楼#
发布于:2004-05-18 09:29
12 01 00 01 dc 00 00 10 71 04 66 06 00 01 00 00 00 19 设备描述符
09 02 2e 00 01 01 00 60 01 配置描述符 我能抓到的包就是这两个, 都没发错啊! 有没有可能是程序跑飞了? [编辑 - 5/18/04 by martinqk] |
|
7楼#
发布于:2004-05-18 10:40
你用bus hound抓一个u盘的枚举过程分析一下,会有帮助的。
|
|
8楼#
发布于:2004-05-18 10:41
设备描述符中的dc字段表示什么?在设备描述符中,这个字段应该为0x00啊(class),另外如果用usb1.1的话,
字段应该如下: 12 01 10 01 00 00 00 10 71 04 66 06 00 01 00 00 00 19? 上面的19表示什么啊?有19个配置吗,没有那么多吧,改为01试试。 最后如下: 12 01 10 01 00 00 00 10 71 04 66 06 00 01 00 00 00 01 配置描述符基本上正确,长度2E应该是你的配置描述符的正确长度。 如果都正确了,下一步应该会取全部的2E长度的配置描述符。 |
|
9楼#
发布于:2004-05-18 10:50
bbiliu:
麻烦指点! 为什么我的d12固件程序用仿真器运行时能够正确的完成枚举并且能够能够正确的响应主机pc端的厂商请求,可是将程序烧到片子中却连正确的枚举都不能进行,mcu根本不送描述府,连第一步的设备描述符的请求都没有响应。 |
|
10楼#
发布于:2004-05-18 10:55
不清楚,你烧写入的代码,有没有改为rom运行版本的啊。
在仿真器下运行的程序是不能直接烧入rom的。 [编辑 - 5/18/04 by bbiliu] |
|
11楼#
发布于:2004-05-18 11:04
bbiliu:
你怎么就不睬我呢? |
|
12楼#
发布于:2004-05-18 11:07
rom运行版本?
什么意思,我就是直接把编译生成的目标文件*.hex烧进去的。 这样不行吗? 请详细说明! 谢谢! |
|
13楼#
发布于:2004-05-18 11:15
bbiliu:
可是,我用d12 smart board demo程序抓到的正确枚举的设备描述符和配置描述符也是这样的。 12 01 00 01 dc 00 00 10 71 04 66 06 00 01 00 00 00 19 设备描述符 09 02 2e 00 01 01 00 60 01 配置描述符 |
|
14楼#
发布于:2004-05-18 11:18
在编译器的链接设置里应该有这方面的设置。
不知道你用的是什么编译器.看看帮助文档里有没有说明。 其实我对单片机不熟悉的,我是做ARM开发的。不过我想这些编译器应该原理上都差不多的。 |
|
15楼#
发布于:2004-05-18 11:24
我用的是伟福的仿真器,就是按他的要求进行的设置。仿真时可以响应主机的标准请求,可是烧进去之后只是led闪三次,用bus hound所抓数据看不到mcu回送的数据。
真急人呀!怎么办? |
|
16楼#
发布于:2004-05-18 11:34
如果你可以控制到led灯的话,用点灯的方式查看一下程序在什么地方出问题了。
否则的话就只有详细的分析代码,和阅读文档,看有没有启发了。 如果代码烧写正确的话,那你要看看数据区的位置对不对了。 我没用过伟福的仿真器,所以不能给你具体的建议。 你用的MCU是什么型号的?单片机系统吗? |
|
17楼#
发布于:2004-05-18 11:38
我用的mcu是AT89C2051,用它来控制d12的
|
|
18楼#
发布于:2004-05-18 14:16
bbiliu:
可是,我用d12 smart board demo程序抓到的正确枚举的设备描述符和配置描述符也是这样的。表明我现在的描述符没有写错啊! 12 01 00 01 dc 00 00 10 71 04 66 06 00 01 00 00 00 19 设备描述符 09 02 2e 00 01 01 00 60 01 配置描述符 |
|
19楼#
发布于:2004-05-18 17:11
chenzhen,我和你出现一样的问题了。哪为高手指教一下呗
|
|