阅读:1678回复:16
D12开发中碰到一问题,求解
第一次的设备描述符请求已经得到:80,06,00,01,00,00,40,00
向端点写入设备描述符后,PC发出设置地址请求:08,00,05,02,00,00,00,00,00;设置地址结束后又收到设备描述符请求,它的值和第一次收到的一样;又向端点写入设备描述符,接着又是设置地址请求……反复三次后PC放弃。 不知各位大虾以前是否遇到过这样的情况?我不知道哪里出问题了,请各位赐教。 |
|
沙发#
发布于:2004-04-02 14:40
没有人在枚举的时候碰到这个问题吗?晕~~~~~~我怎么就碰到这桩霉事……
|
|
板凳#
发布于:2004-04-02 17:07
楼上的大哥,我怎么连:08,00,05,02,00,00,00,00,00都收不到,请问你的大致流程,你是用汇编边的吗?
|
|
地板#
发布于:2004-04-02 17:14
用C编的,由于各种原因,还TMD用ZILOG的单片机,和51不一样,而且特麻烦,所以会碰到一堆问题,解决起来不方便。你收到第一次发的描述符请求了吗?
|
|
地下室#
发布于:2004-04-02 17:25
第一次的80,06,00,01,00,00,40,00收到了,我发送18个字符
返回,第二此就收不对了,能说一下大致流程吗? |
|
5楼#
发布于:2004-04-02 17:31
我不是特别清楚,但是如果你收到了,那可能就是你向端点写DATA的时候程序出错了。别忘了还有F1应答,读完后清缓冲区F2,写完后的FA
|
|
6楼#
发布于:2004-04-02 17:38
我作了都,我觉得我的描述符应该发出去了,因为我在端点0in中断后读41h,得到数为41h,说明发出去了,我用Bus Hound能在pc上看到吗?看到是什么样的?
|
|
7楼#
发布于:2004-04-02 17:54
好像枚举没有完成BUS HOUND是看不到的
|
|
|
8楼#
发布于:2004-04-02 17:56
是这样的,那你是怎么看到你的数据的
|
|
9楼#
发布于:2004-04-02 18:00
有可能会是以下原因:
1.字节颠倒问题.有些C编译器对16位整数为高字节在前低字节在后,而有些为低字节在前高字节在后. 2.结构体对齐问题.如果结构体不是按字节对齐,采用memcpy等的时候就会发生数据错位的情况 3.SETUP ACK问题. 对1,2可以对发送的数据通过逐个字节检查来发现. 做枚举过程最难的是第一步,第一步过了以后基本上就没什么困难了. |
|
|
10楼#
发布于:2004-04-02 18:03
谢了。在请教:在枚举过程中mcu有没有可能收到与5组描述符均相同的其他一组数据,我收到的好像就不是。
|
|
11楼#
发布于:2004-04-03 13:30
感谢大家的留言……
我做过实验,要是我第一步的描述符发得不对,那PC会发出3次描述符请求,不会发设置地址的请求。可我现在是收到了设置地址的请求。D12设置地址的ACK是由硬件完成的吗?我想可能是PC没有收到设置地址的ACK,所以又重新发了第一次描述符请求。 |
|
12楼#
发布于:2004-04-05 17:53
真的没折了,翻出来顶一下,希望那位大虾看见,帮小弟一忙……
|
|
13楼#
发布于:2004-04-05 18:49
感谢大家的留言…… 不是硬件完成。 枚举过程: Host:80 06 00 01 00 00 40 00――向default地址发送 Data:12 01 10 01 00 00 00 08 (其实是发完了,但host未知) Host:00 05 01 00 00 00 00 00――set Address ~~为地址 你代码这边就应该设置这个地址,然后 host:80 06 00 01 00 00 12 00――向该地址发请求 (busHound可以看到这个了) Data:12 01 10 01 00 00 00 08 ×××××(共12HB) [编辑 - 4/5/04 by flyhye] |
|
|
14楼#
发布于:2004-04-05 18:59
谢谢楼上的问答。
我的固件程序收到了设置地址的请求后,我执行了设置地址的函数,也或上了80…… 可是之后PC有发了第一串的描述符请求,也就是 80,06,00,01,00,00,40,00 |
|
15楼#
发布于:2004-04-05 19:58
我的也是,那位大虾能帮忙?
|
|
16楼#
发布于:2004-04-05 20:01
我的“代码这边就应该设置这个地址“,具体的应该怎样设置?恳求大家帮忙
|
|