| 
			 
					阅读:2258回复:15
				 
				请教站长:能否详细解释下usb设备的整个枚举过程!
					为我们新人指一条明路啊,谢谢!!!!				 
							 | 
	|
					
						
						
						
						
  | 
	
| 
			 沙发# 
								发布于:2007-05-29 13:27				
			
					有人会解释吧,本人没作过usb 开发.抱歉				 
							 | 
	|
					
						
  | 
	
| 
			 板凳# 
								发布于:2007-05-29 14:28				
			
					copy and paste: 
							1. 第一次接收到主机的GetDescriptor请求中断响应,主机要求外设发送设备描述符,确定外设缺省管道控制端点的每次数据包大小。通过控制端点回送设备描述符,第一次只需要保证设备描述符中前8个字节发送正确。 2. 主机发送SetAddree请求到USB 设备,给USB设备分配唯一的地址。这时外设被分配唯一地址,此时的USB设备成为被主机承认的合理外设,可以进行正常的数据传送。 3 .外设再一次接收到GetDescriptor请求。主机分析描述符的信息。主机操作系统根据描述符信息寻找相应的设备驱动程序。 4 .操作系统会继续发出GetConfiguration请求,读取设备的配置信息。要把外设的各个端点的配置情形回送到主机中。如果有多个配置信息,有多次请求发生。 5 .在设备能通讯前,主机给外设一个SetConfiguration请求,主机根据整个系统的USB使用情况确认设备的哪一个配置有效,告诉其怎样工作,设备收到后调整有关配置,使设备能合理使用。 经过上面的调试后,USB外设可以发送和接收数据,设备如果不立即使用则会进入挂起状态,直到使用。  | 
	|
					
						
  | 
	
| 
			 地板# 
								发布于:2007-05-29 14:31				
			
					写总线 driver才关心这些事情的				 
							 | 
	|
					
						
  | 
	
| 
			 地下室# 
								发布于:2007-06-04 11:59				
			
					也许他是做firmware的				 
							 | 
	|
					
						
  | 
	
| 
			 5楼# 
								发布于:2007-06-04 13:09				
			
					是的,我做设备firmware的,现在对这个已经知道,不过遇到一个新问题,我收数据的端点可以接收数据,但是发送数据的端点还不能向上位机发送数据!!!				 
							 | 
	|
					
						
  | 
	
| 
			 6楼# 
								发布于:2007-06-04 14:48				
			
					是不是host一直等不到数据?你只要在IN token来之前把数据放在IN的fifo里面就好了				 
							 | 
	|
					
						
  | 
	
| 
			 7楼# 
								发布于:2007-06-04 17:05				
			
					问题是我在ep2_txdone中清完标志后就往里面放数据了,可是上位机就是收不到数据啊				 
							 | 
	|
					
						
  | 
	
| 
			 8楼# 
								发布于:2007-06-05 13:00				
			引用第7楼dianke02于2007-06-04 19:05发表的 : 那还有一种可能,是你的driver和device的IN Pipe没有设置好,比如driver中没有IN pipe,或者device的endpoint descriptor和driver中的设置不同  | 
	|
					
						
  | 
	
| 
			 9楼# 
								发布于:2007-06-05 14:41				
			
					具体什么意思呢?不太明白,rayyang2000,d12中除了端点描述符外,对IN端点没有设置了啊,我是直接那zlg给的端点描述符弄上去的,其他我没有做什么操作。还有为什么driver中没有in pipe,是驱动的原因么?				 
							 | 
	|
					
						
  | 
	
| 
			 10楼# 
								发布于:2007-06-05 17:43				
			
					另外,测试程序reset  inpipe是可以的,d12可以产生中断				 
							 | 
	|
					
						
  | 
	
| 
			 11楼# 
								发布于:2007-06-06 08:46				
			
					rayyang2000,能否加我qq:164460528,详细指导下我,现在很是郁闷,因为这个停下来好几天了,谢谢了!!!				 
							 | 
	|
					
						
  | 
	
| 
			 12楼# 
								发布于:2007-06-06 09:57				
			
					都很多年不玩usb了,我也没有办法指导你什么,只是说说我当初做usb时候的经验 
							我说的可能的错误原因,比如driver中的in pipe设置的地址和device中描述符中的不同,或者driver自己的代码有问题,很多原因。如果你又不熟悉driver,就很困难了 如果有条件,自己去弄个usb analyzer吧,用那玩意儿,几下子就知道错在哪里了  | 
	|
					
						
  | 
	
| 
			 13楼# 
								发布于:2007-06-06 10:08				
			
					目前公司不太可能去搞usb分析仪,你说的“driver中的in pipe设置的地址和device中描述符中的不同”是什么意思?不明白,driver不是从我的描述符中获取的端点描述么?怎么会不一样,driver我不熟悉呀				 
							 | 
	|
					
						
  | 
	
| 
			 14楼# 
								发布于:2009-08-14 21:56				
			
					我目前也遇到这种情况,不知道怎么解决!!				 
							 | 
	|
| 
					
						 | 
	
| 
			 15楼# 
								发布于:2009-08-15 15:53				
			
					如果主机的驱动程序也是你的,就可以一起调试,基本上是因为主机没有去读取你的导致的,有几种可能: 
							1. 如果是有中断,主机才读取的,判断你的中断是否OK。 2. 如果没有中断,是PC主动轮询读取的,怀疑是PC的读取线程因为条件不满足,导致没有下发读取命令。 USB协议分析议又不贵,买一个就行了,看是否有in的token就可以看出来了。  | 
	|