samulasun
驱动牛犊
驱动牛犊
  • 注册日期2003-04-23
  • 最后登录2006-04-19
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:1737回复:14

请问一下大家¸在收到Setup Package之后要下什么命令才能再重新接收新的Setup Package呢??

楼主#
更多 发布于:2003-05-13 15:25
请问一下大家¸在收到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才对啊, 可是我就是收不到……, 如果这时候我把收到的中断读出来, 那会发现跟之前第二个步骤收到的东西都一样, 天哪!! 谁来救救我!!!!

我是不是少了什么步骤啊!!, 大家帮帮我吧!!!  
linwin
驱动牛犊
驱动牛犊
  • 注册日期2003-05-09
  • 最后登录2004-06-18
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
沙发#
发布于: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]
lpwnd
驱动小牛
驱动小牛
  • 注册日期2003-03-04
  • 最后登录2012-01-20
  • 粉丝0
  • 关注0
  • 积分2分
  • 威望1点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2003-05-16 15:11
用户以地址0端点0来取得的设备描述副时,不管设多少的字节,用户最多也仅取其前8个字节而已
jinghuiren
驱动巨牛
驱动巨牛
  • 注册日期2002-06-01
  • 最后登录2008-10-27
  • 粉丝0
  • 关注0
  • 积分291分
  • 威望460点
  • 贡献值0点
  • 好评度428点
  • 原创分0分
  • 专家分0分
地板#
发布于: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的版本是否有关系,但是你捕捉到的前两个字节显示他们肯定是错的!
NewTech
驱动大牛
驱动大牛
  • 注册日期2002-10-02
  • 最后登录2010-03-27
  • 粉丝0
  • 关注0
  • 积分16分
  • 威望263点
  • 贡献值0点
  • 好评度86点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2003-05-16 11:15
在第一次收到80 。。。 40 00的时候只要送8个byte,马上就会收到set address, 之后才是80 。。。。 12 00, 再有你的描述符数据有错,你好好检查一下把!
samulasun
驱动牛犊
驱动牛犊
  • 注册日期2003-04-23
  • 最后登录2006-04-19
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
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….为什么会这样!! 不是应该在第一次中断就要收到的吗??, 而且他前面三个中断是什么意思啊??? 麻烦大家了, 谢谢!!
jinghuiren
驱动巨牛
驱动巨牛
  • 注册日期2002-06-01
  • 最后登录2008-10-27
  • 粉丝0
  • 关注0
  • 积分291分
  • 威望460点
  • 贡献值0点
  • 好评度428点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2003-05-14 13:10
GET DESCRIPTOR 有错,应该是12 01,改了之后就应该可以收到80 06 01 00 00 00 12 00 了。
samulasun
驱动牛犊
驱动牛犊
  • 注册日期2003-04-23
  • 最后登录2006-04-19
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
7楼#
发布于:2003-05-14 12:04
您好, 谢谢您的回答, 不过我在第二个步骤里所读出来的资料最后一个值是0x40, 不是0x12啊, 那我也要送0x12笔资料吗??

其实我是先用BusHount抓我的随身碟在枚举时的信息, 然后我再如法炮制, 看随身碟送了哪些东西, 我就跟着送那些东西出去, 所以在前面一开始第一次收到Get Descriptor时我看到随身碟送了8个资料, 所以我也跟这送了8个资料, 这样子的实验方法, 适当吗?? 非常谢谢各位的帮忙!!
linwin
驱动牛犊
驱动牛犊
  • 注册日期2003-05-09
  • 最后登录2004-06-18
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
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
samulasun
驱动牛犊
驱动牛犊
  • 注册日期2003-04-23
  • 最后登录2006-04-19
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
9楼#
发布于:2003-05-14 08:09
对不起, 能不能具体说明一下错误的地方, 非常谢谢你!!
NewTech
驱动大牛
驱动大牛
  • 注册日期2002-10-02
  • 最后登录2010-03-27
  • 粉丝0
  • 关注0
  • 积分16分
  • 威望263点
  • 贡献值0点
  • 好评度86点
  • 原创分0分
  • 专家分0分
10楼#
发布于:2003-05-14 01:01
你送回的描述符有错啊!好好检查一下吧!
samulasun
驱动牛犊
驱动牛犊
  • 注册日期2003-04-23
  • 最后登录2006-04-19
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
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]
xitian
驱动牛犊
驱动牛犊
  • 注册日期2003-05-05
  • 最后登录2003-05-29
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
12楼#
发布于:2003-05-13 16:35
samulasun ,你把程序贴出来看看。
samulasun
驱动牛犊
驱动牛犊
  • 注册日期2003-04-23
  • 最后登录2006-04-19
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
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    
jinghuiren
驱动巨牛
驱动巨牛
  • 注册日期2002-06-01
  • 最后登录2008-10-27
  • 粉丝0
  • 关注0
  • 积分291分
  • 威望460点
  • 贡献值0点
  • 好评度428点
  • 原创分0分
  • 专家分0分
14楼#
发布于:2003-05-13 15:41
你把整个设备描述符都发送过去试试,另外把第三和第四字节交换一下试试
很奇怪,我的bushound再送出全部的配置描述符之前是监测不到数据的,你用的是什么芯片呀,我有一块板子跟你的现象一样,期待着你能早点解决,也许会对我有莫大的帮助。
游客

返回顶部