blue44
驱动小牛
驱动小牛
  • 注册日期2006-05-17
  • 最后登录2012-03-31
  • 粉丝0
  • 关注0
  • 积分23分
  • 威望218点
  • 贡献值0点
  • 好评度84点
  • 原创分0分
  • 专家分0分
阅读:1828回复:9

急,请教:USB枚举

楼主#
更多 发布于:2007-01-24 15:20
  以前使用68001,descriptor枚举是留有位置的;现在使用NET2722,PC setup过来 数据: "80 06 00 01 00 00 40 00" 这是请求Device Descriptor,然后需要给Host回复18字节的Descriptor。现在不明白的既然还没有枚举,那也就是ep0的buffer不能用,那该怎么用ep0给host回复枚举呢?寄存器吗?看了资料也没觉得哪个寄存器像是用于枚举的。
大家帮帮忙,不一定是net2722,说说其他枚举方法相似的芯片是怎么枚举的,实在是没有概念。。。
blue44
驱动小牛
驱动小牛
  • 注册日期2006-05-17
  • 最后登录2012-03-31
  • 粉丝0
  • 关注0
  • 积分23分
  • 威望218点
  • 贡献值0点
  • 好评度84点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2007-01-24 16:52
就是问问ep0怎么通过控制传输向host传输device descriptor,ep0要往哪传host才能收到呢?buffer?寄存器?
大家讲个大概,或者给个例子也行,拜托大家了。
blue44
驱动小牛
驱动小牛
  • 注册日期2006-05-17
  • 最后登录2012-03-31
  • 粉丝0
  • 关注0
  • 积分23分
  • 威望218点
  • 贡献值0点
  • 好评度84点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2007-01-25 10:11
用bushound调试,数据如下,有点不明所以,我分明收到"80 06 00 01 00 00 40 00"这个setup包了,怎么看不见呢?
Data                                                Description       Cmd.Phase.Ofs(rep)
------  -----  --------------------------------------------------  ----------------  ------------------
  13.0  CTL    a3 00 00 00  01 00 04 00                            GET STATUS               1.1.0(2)    
  13.0  DI     01 05 01 00                                         ....                     1.2.0        
  13.0  CTL    23 01 10 00  01 00 00 00                            CLEAR FEATURE            3.1.0        
  13.0  CTL    a3 00 00 00  01 00 04 00                            GET STATUS               4.1.0(2)    
  13.0  DI     01 05 00 00                                         ....                     4.2.0        
  13.0  CTL    23 03 04 00  01 00 00 00                            SET FEATURE              6.1.0        
  13.0  CTL    a3 00 00 00  01 00 04 00                            GET STATUS               7.1.0        
  13.0  DI     03 05 10 00                                         ....                     7.2.0        
  13.0  CTL    23 01 14 00  01 00 00 00                            CLEAR FEATURE            8.1.0        
  13.0  CTL    a3 00 00 00  01 00 04 00                            GET STATUS               9.1.0(3)    
  13.0  DI     03 05 00 00                                         ....                     9.2.0        
  13.0  CTL    23 03 04 00  01 00 00 00                            SET FEATURE             12.1.0        
  13.0  CTL    a3 00 00 00  01 00 04 00                            GET STATUS              13.1.0        
  13.0  DI     03 05 10 00                                         ....                    13.2.0        
  13.0  CTL    23 01 14 00  01 00 00 00                            CLEAR FEATURE           14.1.0        
  13.0  CTL    a3 00 00 00  01 00 04 00                            GET STATUS              15.1.0(2)    
  13.0  DI     03 05 00 00                                         ....                    15.2.0        
  13.0  CTL    23 03 04 00  01 00 00 00                            SET FEATURE             17.1.0        
  13.0  CTL    a3 00 00 00  01 00 04 00                            GET STATUS              18.1.0        
  13.0  DI     03 05 10 00                                         ....                    18.2.0        
  13.0  CTL    23 01 14 00  01 00 00 00                            CLEAR FEATURE           19.1.0        
  13.0  CTL    a3 00 00 00  01 00 04 00                            GET STATUS              20.1.0        
  13.0  DI     03 05 00 00                                         ....                    20.2.0        
  13.0  CTL    23 01 01 00  01 00 00 00                            CLEAR FEATURE           21.1.0        
  13.0  CTL    a3 00 00 00  02 00 04 00                            GET STATUS              22.1.0        
  13.0  DI     00 05 00 00                                         ....                    22.2.0        
  13.0  CTL    a3 00 00 00  03 00 04 00                            GET STATUS              23.1.0        
  13.0  DI     00 05 00 00                                         ....                    23.2.0        
  13.0  CTL    a3 00 00 00  04 00 04 00                            GET STATUS              24.1.0        
  13.0  DI     00 05 00 00                                         ....                    24.2.0
zijinniuniu
驱动牛犊
驱动牛犊
  • 注册日期2006-08-14
  • 最后登录2007-04-14
  • 粉丝0
  • 关注0
  • 积分290分
  • 威望30点
  • 贡献值0点
  • 好评度29点
  • 原创分0分
  • 专家分0分
地板#
发布于:2007-01-25 10:23
主机第一次请求Device Descriptor,设备只需要发送前8个字节就足够了。然后USB总线复位。
NET2722没有用过,但是可以肯定一定是端点0回复的。没有枚举配置也可以使用的。

有些芯片底层处理了枚举的过程,在固件程序上可以宏定义描述符
有些芯片是靠内部伪中断来请求的。在控制芯片中断中处理端点0的中断,得到端点0的setup。然后查看是否是Device Descriptor。如果是则往端点0的OUT端点缓冲器写8字节描述符
blue44
驱动小牛
驱动小牛
  • 注册日期2006-05-17
  • 最后登录2012-03-31
  • 粉丝0
  • 关注0
  • 积分23分
  • 威望218点
  • 贡献值0点
  • 好评度84点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2007-01-25 10:47
那请问bushound的数据为什么不能显示出主机发送了device descriptor请求,这是否意味着在这之前就错了?
zijinniuniu
驱动牛犊
驱动牛犊
  • 注册日期2006-08-14
  • 最后登录2007-04-14
  • 粉丝0
  • 关注0
  • 积分290分
  • 威望30点
  • 贡献值0点
  • 好评度29点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2007-01-25 11:21
这个请求是通过芯片一起完成的。主机要判断USB电缆上是否有电平变化来判断是否有设备连入。
一般接口芯片内部集成了一个可控的电阻。如果芯片没有正确配置(不是主机USB相关的配置),电阻可能是不起作用。主机不知道有设备。
还有,你怎么确定主机的确发送了Setup包?
blue44
驱动小牛
驱动小牛
  • 注册日期2006-05-17
  • 最后登录2012-03-31
  • 粉丝0
  • 关注0
  • 积分23分
  • 威望218点
  • 贡献值0点
  • 好评度84点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2007-01-25 14:35
我从setup0 - setup7这8个寄存器收数收到了"80 06 00 01 00 00 40 00"。应该是我响应的不对,总是undown device。。。但是现在不知道怎么响应
blue44
驱动小牛
驱动小牛
  • 注册日期2006-05-17
  • 最后登录2012-03-31
  • 粉丝0
  • 关注0
  • 积分23分
  • 威望218点
  • 贡献值0点
  • 好评度84点
  • 原创分0分
  • 专家分0分
7楼#
发布于:2007-02-01 15:40
还是没有进展,大家讲讲怎么添加描述符可以么,我觉得自己添加的没错,可就是不对,都要傻了    
jinghuiren
驱动巨牛
驱动巨牛
  • 注册日期2002-06-01
  • 最后登录2008-10-27
  • 粉丝0
  • 关注0
  • 积分291分
  • 威望460点
  • 贡献值0点
  • 好评度428点
  • 原创分0分
  • 专家分0分
8楼#
发布于:2007-02-02 11:02
EP0是固有的端点,你可能需要首先设置数据计数寄存器的值(datacount),或者在往ep0里填充了18个字节后让端点生效(通过寄存器)之后即可,数据会自动发送给host

怎么感觉你对整个过程糊里糊涂的,搜艘以前的帖子,用“枚举”作关键词
blue44
驱动小牛
驱动小牛
  • 注册日期2006-05-17
  • 最后登录2012-03-31
  • 粉丝0
  • 关注0
  • 积分23分
  • 威望218点
  • 贡献值0点
  • 好评度84点
  • 原创分0分
  • 专家分0分
9楼#
发布于:2007-02-02 11:27
枚举过程我知道,主机发setup包,进中断在寄存器setup0-7中取得setup包,发现是要求device descriptor,在回答主机一个ack后就通过ep0发送18字节的descriptor。现在问题是通过看寄存器发现数据已经发出去了,但是主机还是在发setup包,发了三次后就出现了unknown device。现在不知道哪错了
游客

返回顶部