dianke02
驱动牛犊
驱动牛犊
  • 注册日期2007-05-27
  • 最后登录2010-02-24
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望26点
  • 贡献值0点
  • 好评度25点
  • 原创分0分
  • 专家分0分
阅读:1959回复:15

请教站长:能否详细解释下usb设备的整个枚举过程!

楼主#
更多 发布于:2007-05-29 11:20
为我们新人指一条明路啊,谢谢!!!!
开发,i love it
znsoft
管理员
管理员
  • 注册日期2001-03-23
  • 最后登录2023-10-25
  • 粉丝300
  • 关注6
  • 积分910分
  • 威望14796点
  • 贡献值7点
  • 好评度2410点
  • 原创分5分
  • 专家分100分
  • 社区居民
  • 最爱沙发
  • 社区明星
沙发#
发布于:2007-05-29 13:27
有人会解释吧,本人没作过usb 开发.抱歉
http://www.zndev.com 免费源码交换网 ----------------------------- 软件创造价值,驱动提供力量! 淡泊以明志,宁静以致远。 ---------------------------------- 勤用搜索,多查资料,先搜再问。
driverdance
驱动牛犊
驱动牛犊
  • 注册日期2007-04-18
  • 最后登录2007-08-13
  • 粉丝0
  • 关注0
  • 积分640分
  • 威望65点
  • 贡献值0点
  • 好评度64点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2007-05-29 14:28
copy and paste:
1. 第一次接收到主机的GetDescriptor请求中断响应,主机要求外设发送设备描述符,确定外设缺省管道控制端点的每次数据包大小。通过控制端点回送设备描述符,第一次只需要保证设备描述符中前8个字节发送正确。
2. 主机发送SetAddree请求到USB 设备,给USB设备分配唯一的地址。这时外设被分配唯一地址,此时的USB设备成为被主机承认的合理外设,可以进行正常的数据传送。

3 .外设再一次接收到GetDescriptor请求。主机分析描述符的信息。主机操作系统根据描述符信息寻找相应的设备驱动程序。
4 .操作系统会继续发出GetConfiguration请求,读取设备的配置信息。要把外设的各个端点的配置情形回送到主机中。如果有多个配置信息,有多次请求发生。
5 .在设备能通讯前,主机给外设一个SetConfiguration请求,主机根据整个系统的USB使用情况确认设备的哪一个配置有效,告诉其怎样工作,设备收到后调整有关配置,使设备能合理使用。
经过上面的调试后,USB外设可以发送和接收数据,设备如果不立即使用则会进入挂起状态,直到使用。
承接WDM和hook的项目。
driverdance
驱动牛犊
驱动牛犊
  • 注册日期2007-04-18
  • 最后登录2007-08-13
  • 粉丝0
  • 关注0
  • 积分640分
  • 威望65点
  • 贡献值0点
  • 好评度64点
  • 原创分0分
  • 专家分0分
地板#
发布于:2007-05-29 14:31
写总线 driver才关心这些事情的
承接WDM和hook的项目。
rayyang2000
管理员
管理员
  • 注册日期2001-03-23
  • 最后登录2012-09-13
  • 粉丝3
  • 关注0
  • 积分1036分
  • 威望925点
  • 贡献值3点
  • 好评度823点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2007-06-04 11:59
也许他是做firmware的
天天coding-debugging中----超稀饭memory dump file ======================================================== [b]Windows Device Driver Development and Consulting Service[/b] [color=blue][url]http://www.ybwork.com[/url][/color] ========================================================
dianke02
驱动牛犊
驱动牛犊
  • 注册日期2007-05-27
  • 最后登录2010-02-24
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望26点
  • 贡献值0点
  • 好评度25点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2007-06-04 13:09
是的,我做设备firmware的,现在对这个已经知道,不过遇到一个新问题,我收数据的端点可以接收数据,但是发送数据的端点还不能向上位机发送数据!!!
开发,i love it
rayyang2000
管理员
管理员
  • 注册日期2001-03-23
  • 最后登录2012-09-13
  • 粉丝3
  • 关注0
  • 积分1036分
  • 威望925点
  • 贡献值3点
  • 好评度823点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2007-06-04 14:48
是不是host一直等不到数据?你只要在IN token来之前把数据放在IN的fifo里面就好了
天天coding-debugging中----超稀饭memory dump file ======================================================== [b]Windows Device Driver Development and Consulting Service[/b] [color=blue][url]http://www.ybwork.com[/url][/color] ========================================================
dianke02
驱动牛犊
驱动牛犊
  • 注册日期2007-05-27
  • 最后登录2010-02-24
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望26点
  • 贡献值0点
  • 好评度25点
  • 原创分0分
  • 专家分0分
7楼#
发布于:2007-06-04 17:05
问题是我在ep2_txdone中清完标志后就往里面放数据了,可是上位机就是收不到数据啊
开发,i love it
rayyang2000
管理员
管理员
  • 注册日期2001-03-23
  • 最后登录2012-09-13
  • 粉丝3
  • 关注0
  • 积分1036分
  • 威望925点
  • 贡献值3点
  • 好评度823点
  • 原创分0分
  • 专家分0分
8楼#
发布于:2007-06-05 13:00
引用第7楼dianke02于2007-06-04 19:05发表的  :
问题是我在ep2_txdone中清完标志后就往里面放数据了,可是上位机就是收不到数据啊


那还有一种可能,是你的driver和device的IN Pipe没有设置好,比如driver中没有IN pipe,或者device的endpoint descriptor和driver中的设置不同
天天coding-debugging中----超稀饭memory dump file ======================================================== [b]Windows Device Driver Development and Consulting Service[/b] [color=blue][url]http://www.ybwork.com[/url][/color] ========================================================
dianke02
驱动牛犊
驱动牛犊
  • 注册日期2007-05-27
  • 最后登录2010-02-24
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望26点
  • 贡献值0点
  • 好评度25点
  • 原创分0分
  • 专家分0分
9楼#
发布于:2007-06-05 14:41
具体什么意思呢?不太明白,rayyang2000,d12中除了端点描述符外,对IN端点没有设置了啊,我是直接那zlg给的端点描述符弄上去的,其他我没有做什么操作。还有为什么driver中没有in pipe,是驱动的原因么?
开发,i love it
dianke02
驱动牛犊
驱动牛犊
  • 注册日期2007-05-27
  • 最后登录2010-02-24
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望26点
  • 贡献值0点
  • 好评度25点
  • 原创分0分
  • 专家分0分
10楼#
发布于:2007-06-05 17:43
另外,测试程序reset  inpipe是可以的,d12可以产生中断
开发,i love it
dianke02
驱动牛犊
驱动牛犊
  • 注册日期2007-05-27
  • 最后登录2010-02-24
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望26点
  • 贡献值0点
  • 好评度25点
  • 原创分0分
  • 专家分0分
11楼#
发布于:2007-06-06 08:46
rayyang2000,能否加我qq:164460528,详细指导下我,现在很是郁闷,因为这个停下来好几天了,谢谢了!!!
开发,i love it
rayyang2000
管理员
管理员
  • 注册日期2001-03-23
  • 最后登录2012-09-13
  • 粉丝3
  • 关注0
  • 积分1036分
  • 威望925点
  • 贡献值3点
  • 好评度823点
  • 原创分0分
  • 专家分0分
12楼#
发布于:2007-06-06 09:57
都很多年不玩usb了,我也没有办法指导你什么,只是说说我当初做usb时候的经验

我说的可能的错误原因,比如driver中的in pipe设置的地址和device中描述符中的不同,或者driver自己的代码有问题,很多原因。如果你又不熟悉driver,就很困难了

如果有条件,自己去弄个usb analyzer吧,用那玩意儿,几下子就知道错在哪里了
天天coding-debugging中----超稀饭memory dump file ======================================================== [b]Windows Device Driver Development and Consulting Service[/b] [color=blue][url]http://www.ybwork.com[/url][/color] ========================================================
dianke02
驱动牛犊
驱动牛犊
  • 注册日期2007-05-27
  • 最后登录2010-02-24
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望26点
  • 贡献值0点
  • 好评度25点
  • 原创分0分
  • 专家分0分
13楼#
发布于:2007-06-06 10:08
目前公司不太可能去搞usb分析仪,你说的“driver中的in pipe设置的地址和device中描述符中的不同”是什么意思?不明白,driver不是从我的描述符中获取的端点描述么?怎么会不一样,driver我不熟悉呀
开发,i love it
yanluxin
驱动牛犊
驱动牛犊
  • 注册日期2004-03-28
  • 最后登录2009-08-20
  • 粉丝0
  • 关注0
  • 积分2分
  • 威望24点
  • 贡献值0点
  • 好评度4点
  • 原创分0分
  • 专家分0分
14楼#
发布于:2009-08-14 21:56
我目前也遇到这种情况,不知道怎么解决!!
zihan
驱动牛犊
驱动牛犊
  • 注册日期2006-08-15
  • 最后登录2010-08-05
  • 粉丝0
  • 关注0
  • 积分46分
  • 威望164点
  • 贡献值0点
  • 好评度3点
  • 原创分0分
  • 专家分0分
15楼#
发布于:2009-08-15 15:53
如果主机的驱动程序也是你的,就可以一起调试,基本上是因为主机没有去读取你的导致的,有几种可能:

1. 如果是有中断,主机才读取的,判断你的中断是否OK。
2. 如果没有中断,是PC主动轮询读取的,怀疑是PC的读取线程因为条件不满足,导致没有下发读取命令。

USB协议分析议又不贵,买一个就行了,看是否有in的token就可以看出来了。
游客

返回顶部