gilbertyu
驱动牛犊
驱动牛犊
  • 注册日期2007-06-29
  • 最后登录2007-08-02
  • 粉丝0
  • 关注0
  • 积分30分
  • 威望4点
  • 贡献值1点
  • 好评度3点
  • 原创分0分
  • 专家分0分
阅读:197546回复:2790

〈个人整理总结〉USB枚举详细过程剖析

楼主#
更多 发布于:2007-06-29 11:11
(1)集线器检测新设备
主机集线器监视着每个端口的信号电压,当有新设备接入时便可觉察。(集线器端口的两根信号线的每一根都有15kΩ的下拉电阻,而每一个设备在D+都有一个1.5kΩ的上拉电阻。当用USB线将PC和设备接通后,设备的上拉电阻使信号线的电位升高,因此被主机集线器检测到。)
(2)主机知道了新设备连接后
每个集线器用中断传输来报告在集线器上的事件。当主机知道了这个事件,它给集线器发送一个Get_Status请求来了解更多的消息。返回的消息告诉主机一个设备是什么时候连接的。
(3)集线器重新设置这个新设备
当主机知道有一个新的设备时,主机给集线器发送一个Set_Feature请求,请求集线器来重新设置端口。集线器使得设备的USB数据线处于重启(RESET)状态至少10ms。
(4)集线器在设备和主机之间建立一个信号通路
主机发送一个Get_Status请求来验证设备是否激起重启状态。返回的数据有一位表示设备仍然处于重启状态。当集线器释放了重启状态,设备就处于默认状态了,即设备已经准备好通过Endpoint 0 的默认流程响应控制传输。即设备现在使用默认地址0x0与主机通信。
(5)集线器检测设备速度
集线器通过测定那根信号线(D+或D-)在空闲时有更高的电压来检测设备是低速设备还是全速设备。(全速和高速设备D+有上拉电阻,低速设备D-有上拉电阻)。
以下,需要USB的firmware进行干预
(6)获取最大数据包长度
PC向address 0发送USB协议规定的Get_Device_Descriptor命令,以取得却缺省控制管道所支持的最大数据包长度,并在有限的时间内等待USB设备的响应,该长度包含在设备描述符的bMaxPacketSize0字段中,其地址偏移量为7,所以这时主机只需读取该描述符的前8个字节。注意,主机一次只能列举一个USB设备,所以同一时刻只能有一个USB设备使用缺省地址0。
以下操作雷同,不同操作系统设定时延是不一样的,比如说win2k大概是几毫秒,如果没有反应就再发送一次命令,重复三次。
(7)主机分配一个新的地址给设备
主机通过发送一个Set_Address请求来分配一个唯一的地址给设备。设备读取这个请求,返回一个确认,并保存新的地址。从此开始所有通信都使用这个新地址。
(8)主机向新地址重新发送Get_Device_Descriptor命令,此次读取其设备描述符的全部字段,以了解该设备的总体信息,如VID,PID。

版主Pegram 注:
  总线驱动取得设备描述符后,就等于得到了设备ID,并根据USB设备的物理位置生成实例ID,并把设备实例通过调用IoInvalidateDeviceRelations的方式通知内核PNP管理器,有新的设备加入到USB总线。然后PNP管理器会发起PNP过程,具体的过程简单分成两步:根据设备实例ID判断这个设备驱动是否安装过,如果安装则直接加载;如果没有安装过,就通知用户PNP管理器,发起驱动安装流程。
  下面9-13步骤,是功能驱动加载起来的过程中,USB设备配置的步骤哦。


(9)主机向设备循环发送Get_Device_Configuration命令,要求USB设备回答,以读取全部配置信息。
(10)主机发送Get_Device_String命令,获得字符集描述(unicode),比如产商、产品描述、型号等等。
(11)此时主机将会弹出窗口,展示发现新设备的信息,产商、产品描述、型号等。
(12)根据Device_Descriptor和Device_Configuration应答,PC判断是否能够提供USB的Driver,一般win2k能提供几大类的设备,如游戏操作杆、存储、打印机、扫描仪等,操作就在后台运行。但是Win98却不可以,所以在此时将会弹出对话框,索要USB的Driver。
(13)加载了USB设备驱动以后,主机发送Set_Configuration(x)命令请求为该设备选择一个合适的配置(x代表非0的配置值)。如果配置成功,USB设备进入“配置”状态,并可以和客户软件进行数据传输。
此时,常规的USB完成了其必须进行的配置和连接工作。查看注册表,能够发现相应的项目已经添加完毕,至此设备应当可以开始使用。不过,USB协议还提供了一些用户可选的协议,设备如果不应答,也不会出错,但是会影响到系统的功能。
开发,开发,再开发
badbughlin
驱动牛犊
驱动牛犊
  • 注册日期2006-10-11
  • 最后登录2009-09-04
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望5点
  • 贡献值0点
  • 好评度4点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2007-06-29 11:38
呵呵!  我还是第一个回复的呀! 高兴ING...
wjt810907
驱动中牛
驱动中牛
  • 注册日期2004-08-18
  • 最后登录2011-04-16
  • 粉丝0
  • 关注0
  • 积分86分
  • 威望409点
  • 贡献值1点
  • 好评度402点
  • 原创分2分
  • 专家分0分
板凳#
发布于:2007-06-29 11:45
kankanla
mcu_boy
sosojohn
论坛版主
论坛版主
  • 注册日期2006-01-29
  • 最后登录2021-06-25
  • 粉丝0
  • 关注1
  • 积分1047分
  • 威望535点
  • 贡献值1点
  • 好评度178点
  • 原创分0分
  • 专家分0分
  • 社区居民
地板#
发布于:2007-06-29 11:48
我要看看
flyhigh2007
驱动牛犊
驱动牛犊
  • 注册日期2007-06-16
  • 最后登录2007-12-17
  • 粉丝0
  • 关注0
  • 积分130分
  • 威望14点
  • 贡献值0点
  • 好评度13点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2007-06-29 11:53
回拉
happyrasen
驱动牛犊
驱动牛犊
  • 注册日期2004-11-18
  • 最后登录2008-10-22
  • 粉丝0
  • 关注0
  • 积分7分
  • 威望3点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2007-06-29 13:48
ddddddddddddddddddddddddd
viazou
驱动牛犊
驱动牛犊
  • 注册日期2003-07-25
  • 最后登录2010-06-14
  • 粉丝0
  • 关注0
  • 积分24分
  • 威望32点
  • 贡献值0点
  • 好评度2点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2007-06-29 13:56
什么东东,看看
hello1898
驱动牛犊
驱动牛犊
  • 注册日期2007-06-11
  • 最后登录2009-09-04
  • 粉丝0
  • 关注0
  • 积分50分
  • 威望6点
  • 贡献值0点
  • 好评度5点
  • 原创分0分
  • 专家分0分
7楼#
发布于:2007-06-29 14:10
ddddddddddddd
xiaobazhang
驱动牛犊
驱动牛犊
  • 注册日期2007-06-06
  • 最后登录2007-07-04
  • 粉丝0
  • 关注0
  • 积分300分
  • 威望31点
  • 贡献值0点
  • 好评度30点
  • 原创分0分
  • 专家分0分
8楼#
发布于:2007-06-29 14:17
我也要看看
gklz1982
驱动牛犊
驱动牛犊
  • 注册日期2007-06-29
  • 最后登录2008-09-29
  • 粉丝0
  • 关注0
  • 积分2分
  • 威望22点
  • 贡献值0点
  • 好评度20点
  • 原创分0分
  • 专家分0分
9楼#
发布于:2007-06-29 16:05
顶!!!!
xcq1109
驱动牛犊
驱动牛犊
  • 注册日期2006-09-05
  • 最后登录2010-11-05
  • 粉丝2
  • 关注0
  • 积分16分
  • 威望176点
  • 贡献值0点
  • 好评度21点
  • 原创分0分
  • 专家分0分
10楼#
发布于:2007-06-29 16:13
看看先
xywss
驱动牛犊
驱动牛犊
  • 注册日期2005-12-12
  • 最后登录2009-02-06
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望13点
  • 贡献值0点
  • 好评度12点
  • 原创分0分
  • 专家分0分
11楼#
发布于:2007-06-29 16:23
LOOK 一LOOK
onizuka2070
驱动牛犊
驱动牛犊
  • 注册日期2006-10-18
  • 最后登录2007-08-07
  • 粉丝0
  • 关注0
  • 积分430分
  • 威望44点
  • 贡献值0点
  • 好评度43点
  • 原创分0分
  • 专家分0分
12楼#
发布于:2007-06-29 16:33
kankanla
Leonsoft
驱动小牛
驱动小牛
  • 注册日期2003-05-08
  • 最后登录2012-08-11
  • 粉丝1
  • 关注0
  • 积分21分
  • 威望281点
  • 贡献值1点
  • 好评度103点
  • 原创分0分
  • 专家分0分
13楼#
发布于:2007-06-29 17:12
look
I will do the best with what the God gave me.
jajaas
驱动牛犊
驱动牛犊
  • 注册日期2006-11-14
  • 最后登录2008-10-03
  • 粉丝0
  • 关注0
  • 积分190分
  • 威望35点
  • 贡献值0点
  • 好评度34点
  • 原创分0分
  • 专家分0分
14楼#
发布于:2007-06-29 17:55
呵呵
wxl_972116
驱动牛犊
驱动牛犊
  • 注册日期2007-06-18
  • 最后登录2007-07-09
  • 粉丝0
  • 关注0
  • 积分140分
  • 威望15点
  • 贡献值0点
  • 好评度14点
  • 原创分1分
  • 专家分0分
15楼#
发布于:2007-06-29 23:09
kankan
nfish
驱动牛犊
驱动牛犊
  • 注册日期2007-06-29
  • 最后登录2007-09-17
  • 粉丝0
  • 关注0
  • 积分50分
  • 威望6点
  • 贡献值0点
  • 好评度5点
  • 原创分0分
  • 专家分0分
16楼#
发布于:2007-06-30 00:54
希望能用的上!
kennan0423
驱动牛犊
驱动牛犊
  • 注册日期2006-12-12
  • 最后登录2007-07-13
  • 粉丝0
  • 关注0
  • 积分60分
  • 威望7点
  • 贡献值0点
  • 好评度6点
  • 原创分0分
  • 专家分0分
17楼#
发布于:2007-06-30 10:15
ding 顶 顶
驱网无线,快乐无限
JoneyLi
驱动牛犊
驱动牛犊
  • 注册日期2002-11-06
  • 最后登录2013-02-28
  • 粉丝0
  • 关注0
  • 积分3分
  • 威望60点
  • 贡献值0点
  • 好评度17点
  • 原创分0分
  • 专家分0分
18楼#
发布于:2007-06-30 15:05
kankan
Deligency
驱动牛犊
驱动牛犊
  • 注册日期2007-06-30
  • 最后登录2007-08-17
  • 粉丝0
  • 关注0
  • 积分60分
  • 威望7点
  • 贡献值0点
  • 好评度6点
  • 原创分0分
  • 专家分0分
19楼#
发布于:2007-06-30 21:52
给我一份,行么?先谢了.
上一页
游客

返回顶部