找回密码
 注册
搜索
查看: 1625|回复: 3

[讨论] USB枚举全过程疑问!

[复制链接]
发表于 2006-4-21 20:51:00 | 显示全部楼层 |阅读模式
在网上发现讲解枚举过程,找到两篇资料
A
主机对USB设备的识别过程叫做枚举,一个完整的Windows对USB设备枚举的过程为(以本系统为例,其它设备可能稍微有些不同):
1) Get Device Descriptor。主机的第一个命令要求得到设备描述符,此SETUP包为8个字节数据(80,06,00,01,00,00,40,00),其具体含义请参考表5-1和5-2。“40”表示返回数据长度最大为40H个字节。实际上,只返回一个包,即数组DEV_DESC[ ]中的前8个字节,用于说明设备的描述符的真实长度和设备的类型。
2) Set Address。接着是设置设备地址处理事件,主机发送一个含有指定地址的数据包(00,05,02,00,00,00,00,00),在主机只有一个USB设备的时候,这个地址一般会是2,最大地址127,USB协议中可以连接127个设备。设置地址事件处理结束后,设备进入地址状态,主机以后会在新的指定地址处访问设备。
3) Get Device Descriptor。主机再次发送请求得到设备描述符的数据包(80,06,00,01,00,00,12,00),与上次不同的是,要求的数据的长度是实际的数据长度。因为D12设备每次只能发送16个字节,因此它会分两次完成此要求(“12”指12H,十进制值为18)。
4) Get Configuration Descriptor。接着主机要求得到设备的配置描述符(80,06,00,02,00,00,09,00),包中数据“09”指定设备发送9个字节,这正是设备配置描述符的长度。
5) 读取全部Configuration Descriptor。接着主机要求得到设备全部的配置描述符、接口描述符和节点描述符(80,06,00,02,00,00,FF,00),由于主机不知道设备描述符的真实长度,因此它要求得到256个字节,实际上本系统中的D12发送46个字节就完成了此任务。

B:
1. 第一次接收到主机的GetDescriptor请求中断响应,主机要求外设发送设备描述符,确定外设缺省管道控制端点的每次数据包大小。通过控制端点回送设备描述符,第一次只需要保证设备描述符中前8个字节发送正确。
2. 主机发送SetAddree请求到USB 设备,给USB设备分配唯一的地址。这时外设被分配唯一地址,此时的USB设备成为被主机承认的合理外设,可以进行正常的数据传送。 3 .外设再一次接收到GetDescriptor请求。主机分析描述符的信息。主机操作系统根据描述符信息寻找相应的设备驱动程序。
4 .操作系统会继续发出GetConfiguration请求,读取设备的配置信息。要把外设的各个端点的配置情形回送到主机中。如果有多个配置信息,有多次请求发生。
5 .在设备能通讯前,主机给外设一个SetConfiguration请求,主机根据整个系统的USB使用情况确认设备的哪一个配置有效,告诉其怎样工作,设备收到后调整有关配置,使设备能合理使用。
经过上面的调试后,USB外设可以发送和接收数据,设备如果不立即使用则会进入挂起状态,直到使用。
现在有个疑问,发现上面两种说法的步骤的4,5步不一样,到底哪种是正确的呢?请大侠们赐教。
顺便问下,用什么软件可以侦测到USB总线发出的数据?
发表于 2006-4-22 23:11:00 | 显示全部楼层
<P>如果你是用手机开发u盘,第一种说法相对比较确切。第二种说法相对比较泛</P><P>软件bushound,搜一下就有的下。</P>
点评回复

使用道具 举报

发表于 2006-4-27 17:21:00 | 显示全部楼层
看一下usb spec charpter9,说得很清楚的
点评回复

使用道具 举报

发表于 2006-4-28 13:42:00 | 显示全部楼层
<P>usb spec charpter9并没有详细阐述过这个东西,不过说法A和说法B都是对的,说法A的步骤4和步骤5就是说法B中的步骤4;因此,综合说法A和说法B,下面是一个真正的usb枚举的全过程.</P><P>1. 第一次接收到主机的GetDescriptor请求中断响应,主机要求外设发送设备描述符,确定外设缺省管道控制端点的每次数据包大小。通过控制端点回送设备描述符,第一次只需要保证设备描述符中前8个字节发送正确。<FONT color=#ffffff>[52RD.com]</FONT>
2. 主机发送SetAddree请求到USB 设备,给USB设备分配唯一的地址。这时外设被分配唯一地址,此时的USB设备成为被主机承认的合理外设,可以进行正常的数据传送。 3 .外设再一次接收到GetDescriptor请求。主机分析描述符的信息。主机操作系统根据描述符信息寻找相应的设备驱动程序。 <FONT color=#ffffff>[52RD.com]</FONT>
4 .</P><P>step1:Get Configuration Descriptor。接着主机要求得到设备的配置描述符(80,06,00,02,00,00,09,00),包中数据“09”指定设备发送9个字节,这正是设备配置描述符的长度。 <FONT color=#ffffff>[52RD.com]</FONT>
step2:读取全部Configuration Descriptor。接着主机要求得到设备全部的配置描述符、接口描述符和节点描述符(80,06,00,02,00,00,FF,00),由于主机不知道设备描述符的真实长度,因此它要求得到256个字节,实际上本系统中的D12发送46个字节就完成了此任务。<FONT color=#ffffff>.com]</FONT>
5 .在设备能通讯前,主机给外设一个SetConfiguration请求,主机根据整个系统的USB使用情况确认设备的哪一个配置有效,告诉其怎样工作,设备收到后调整有关配置,使设备能合理使用。 <FONT color=#ffffff>[52RD.com</FONT></P>
点评回复

使用道具 举报

高级模式
B Color Image Link Quote Code Smilies

本版积分规则

Archiver|手机版|小黑屋|52RD我爱研发网 ( 沪ICP备2022007804号-2 )

GMT+8, 2024-11-23 06:52 , Processed in 0.045313 second(s), 17 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表