阅读:1737回复:14
请问一下大家¸在收到Setup Package之后要下什么命令才能再重新接收新的Setup Package呢??
请问一下大家¸在收到Setup Package之后要下什么命令才能再重新接收新的Setup Package呢?? 因为我一直收不到Set Address的命令??(Host有送出来, 是我自己收不到!!), 下面是我大致上的流程!!
1.等Setup Package 2.选择EP0, 然后下F0把资料读出来, 这时候我得到 80,06,00,01,00,00,40,00 3.个别选择In及Out端点燃后个别下Acknowledge, 对Ep0多一个F2的 命令 4.写00,08,12,01,00,02,00,00,00,40到EP1去, 然后下Validata 这时候我用Bushount可以看到我送的资料出现在Host端 5.然后我就等中断, 因为我资料有送出去所以我应该可以收到SetAddress才对啊, 可是我就是收不到……, 如果这时候我把收到的中断读出来, 那会发现跟之前第二个步骤收到的东西都一样, 天哪!! 谁来救救我!!!! 我是不是少了什么步骤啊!!, 大家帮帮我吧!!! |
|
沙发#
发布于:2003-05-17 02:45
HIi samulasun
How about reorder you code ? For example: ;-------------------------------- move #>USB_DATA_BASE,r1 move #>$00,x0 ;Reserve move x0,y:(r1)+ move #>$08,x0 ;Data Length move x0,y:(r1)+ move #>$01,x0 move x0,y:(r1)+ move #>$12,x0 move x0,y:(r1)+ move #>$02,x0 move x0,y:(r1)+ move #>$00,x0 move x0,y:(r1)+ move #>$00,x0 move x0,y:(r1)+ move #>$00,x0 move x0,y:(r1)+ move #>$40,x0 move x0,y:(r1)+ move #>$00,x0 move x0,y:(r1)+ ;-------------------------------- I have no idea if this works or not. Just take some exercise. About your post at 2003/5/14 - 08:42, I bet it\'s a mass storage reset. Don\'t worry, it\'s ok. [编辑 - 5/17/03 by linwin] |
|
板凳#
发布于:2003-05-16 15:11
用户以地址0端点0来取得的设备描述副时,不管设多少的字节,用户最多也仅取其前8个字节而已
|
|
地板#
发布于:2003-05-16 14:43
NewTech说的对,我觉得下面这个地方有问题:
2.0 CTL 80 06 00 01 - 00 00 40 00 GET DESCRIPTOR 2.0 DI 01 12 02 00 - 00 00 00 40 .......@ 正常情况下上面的数据应该显示的是 12 01 00 02 00 00 00 40 才对,不知道这些数据跟bushound的版本是否有关系,但是你捕捉到的前两个字节显示他们肯定是错的! |
|
地下室#
发布于:2003-05-16 11:15
在第一次收到80 。。。 40 00的时候只要送8个byte,马上就会收到set address, 之后才是80 。。。。 12 00, 再有你的描述符数据有错,你好好检查一下把!
|
|
5楼#
发布于:2003-05-14 16:42
您好, 我是送12,01没错啊, 我第一次全部送0x00(没用的值),0x08(后面有8个资料),0x12(这里就是12),0x01(这里就是01),0x00,0x02,0x00,0x00,0x00,0x40
我可以收到SetAddress了, 但是我不知道为什么, 我在前面的No.3之后的第四次中断才收到00,05,02,00,00,00,00,00, 分别如下 第一次中断: 中断值是0x02 Control In的中断 第二次中断: 中断值是0x01 Control Out的中断, 然后我去读Buffer里的值, 发现它的长度是零, 所以我就把他清掉, 也没做别的事, 连Acknowledge都没给他下 第三次中断: 中断值是0x40 她跟我说有bus reset, 我完全不知道为什么!! 第四次中断: 中断值是0x01àControl In的中断, 然后我就进去读Buffer, 发现竟然是SetAddress , my god….为什么会这样!! 不是应该在第一次中断就要收到的吗??, 而且他前面三个中断是什么意思啊??? 麻烦大家了, 谢谢!! |
|
6楼#
发布于:2003-05-14 13:10
GET DESCRIPTOR 有错,应该是12 01,改了之后就应该可以收到80 06 01 00 00 00 12 00 了。
|
|
7楼#
发布于:2003-05-14 12:04
您好, 谢谢您的回答, 不过我在第二个步骤里所读出来的资料最后一个值是0x40, 不是0x12啊, 那我也要送0x12笔资料吗??
其实我是先用BusHount抓我的随身碟在枚举时的信息, 然后我再如法炮制, 看随身碟送了哪些东西, 我就跟着送那些东西出去, 所以在前面一开始第一次收到Get Descriptor时我看到随身碟送了8个资料, 所以我也跟这送了8个资料, 这样子的实验方法, 适当吗?? 非常谢谢各位的帮忙!! |
|
8楼#
发布于:2003-05-14 11:02
Hi samulasun
Please check your response in step 4. Your response wasn\'t compliant to USB Spec. For example, total length should be 18 bytes, and the first byte is 0x12. Ref: Table 9-8. Standard Device Descriptor, \"USB Spec. 2.0\", pp.262-263, April 27, 2000 |
|
9楼#
发布于:2003-05-14 08:09
对不起, 能不能具体说明一下错误的地方, 非常谢谢你!!
|
|
10楼#
发布于:2003-05-14 01:01
你送回的描述符有错啊!好好检查一下吧!
|
|
11楼#
发布于:2003-05-13 17:14
Get_Descriptor_Proc
jsr Waiting_Interrupt jsr Read_EP0_Last_Transaction_Command jsr Select_Control_Out_Endpoint jsr Read_Buffer jsr Clear_Buffer_Command jsr Select_Control_In_Endpoint jsr Acknowledge_Command jsr Select_Control_Out_Endpoint jsr Acknowledge_Command jsr Clear_Buffer_Command ;========================================== No.1 move #>USB_DATA_BASE,r1 move #>$00,x0 ;Reserve move x0,y:(r1)+ move #>$08,x0 ;Data Length move x0,y:(r1)+ move #>$12,x0 move x0,y:(r1)+ move #>$01,x0 move x0,y:(r1)+ move #>$00,x0 move x0,y:(r1)+ move #>$02,x0 move x0,y:(r1)+ move #>$00,x0 move x0,y:(r1)+ move #>$00,x0 move x0,y:(r1)+ move #>$00,x0 move x0,y:(r1)+ move #>$40,x0 move x0,y:(r1)+ jsr Select_Control_In_Endpoint jsr Write_Buffer jsr Validate_Data_Command ;================================================ No.2 jsr Waiting_Interrupt jsr Select_Control_Out_Endpoint jsr Delay jsr Read_Buffer debug jsr Read_EP1_Last_Transaction_Command ;================================================No.3 Jsr 指的是呼叫子程序 No.1上面是我收到了GetDescriptor之后的动作 然后No.2上面是我把资料丢出去的动作 最后No.3 上面是我以为会收到SetAddress的动作, 可是…..收不到….天哪!! [编辑 - 5/13/03 by samulasun] |
|
12楼#
发布于:2003-05-13 16:35
samulasun ,你把程序贴出来看看。
|
|
13楼#
发布于:2003-05-13 16:01
我是用一颗motorola的dsp来做控制芯片, 我有改了描述符, 基本上我给他什么他就吃什么….. 我真的不知道为什么这样….我把我收到的BusHount的讯息贴出来大家瞧瞧, 帮忙想想办法…..谢谢大家了!!!!
2.0 CTL a3 00 00 00 - 02 00 04 00 GET STATUS 2.0 DI 03 01 10 00 .... 2.0 CTL 23 01 14 00 - 02 00 00 00 CLEAR FEATURE 2.0 CTL a3 00 00 00 - 02 00 04 00 GET STATUS 2.0 CTL 80 06 00 01 - 00 00 40 00 GET DESCRIPTOR 2.0 DI 01 12 02 00 - 00 00 00 40 .......@ 2.0 CTL 23 03 04 00 - 02 00 00 00 SET FEATURFE 2.0 CTL a3 00 00 00 - 02 00 04 00 GET STATUS 2.0 DI 03 01 10 00 .... 2.0 CTL 23 01 14 00 - 02 00 00 00 CLEAR FEATURE 2.0 CTL 00 05 02 00 - 00 00 00 00 SET ADDRESS 2.0 NSTS 20 01 00 c0 cancelled 2.0 CTL 23 03 04 00 - 02 00 00 00 SET FEATURE 2.1 DI 04 . 2.0 CTL a3 00 00 00 - 02 00 04 00 GET STATUS 2.0 DI 03 01 10 00 .... 2.0 CTL 23 01 14 00 - 02 00 00 00 CLEAR FEATURE 2.0 CTL 80 06 00 01 - 00 00 40 00 GET DESCRIPTOR 2.0 NSTS 20 01 00 c0 cancelled 2.0 CTL 23 03 04 00 - 02 00 00 00 SET FEATURE 2.1 DI 04 . 2.0 CTL a3 00 00 00 - 02 00 04 00 GET STATUS 2.0 DI 03 01 10 00 .... 2.0 CTL 23 01 14 00 - 02 00 00 00 CLEAR FEATURE 2.0 CTL 80 06 00 01 - 00 00 40 00 GET DESCRIPTOR 2.0 NSTS 20 01 00 c0 cancelled 2.0 CTL 23 01 01 00 - 02 00 00 00 CLEAR FEATURE |
|
14楼#
发布于:2003-05-13 15:41
你把整个设备描述符都发送过去试试,另外把第三和第四字节交换一下试试
很奇怪,我的bushound再送出全部的配置描述符之前是监测不到数据的,你用的是什么芯片呀,我有一块板子跟你的现象一样,期待着你能早点解决,也许会对我有莫大的帮助。 |
|