打印
[USB驱动]

USB问题求助~~

[复制链接]
1630|6
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
duanwuqqqqqq|  楼主 | 2013-11-1 15:37 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
有个日常经常遇到的问题,但是一直也没有想清楚过,请专业人士给解释解释:
一个U盘第一次插到电脑上时会提示设备正在安装驱动程序,然后U盘才能用,我想知道安装的这个驱动程序有什么用?它具体做了哪些工作?
请内行给个答案,谢啦~~

相关帖子

沙发
lhchen922| | 2013-11-1 16:47 | 只看该作者
◆? 用户将一个USB设备插入USB端口,主机为端口供电,设备此时处于上电状态。
◆? 主机检测设备。
◆?
集线器使用中断通道将事件报告给主机。
◆? 主机发送Get_Port_Status(读端口状态)请求,以获取更多的设备信息。
◆?
集线器检测设备是低速运行还是高速运行,并将此信息送给主机,这是对Get_Port_Status请求的响应。
◆?
主机发送Set_Port_Feature(写端口状态)请求给集线器,要求它复位端口。
◆? 集线器对设备复位。
◆? 主机使用Chirp
K信号来了解全速设备是否支持高速运行。
◆? 主机发送另一个Get_Port_Status请求,确定设备是否已经从复位状态退出。
◆?
设备此时处于缺省状态,且已准备好在零端点通过缺省通道响应主机控制传输。缺省地址为00h,设备能从总线获取高达100mA的电流。
◆?
主机发送Get_Descriptor(读设备描述符)报文,以便确定最大数据包大小。设备描述符的八个字节是bMaxPacketSize。
◆?
通过发送Set_Address(写地址)请求,主机分配地址,设备此时处于地址状态。
◆?
主机发送Get_Descriptor报文,以获取更多的设备信息。主机通过发送描述符响应设备请求,随后发送全部的次级描述符。
◆?
主机分配并加载设备驱动程序。
◆?
通过发送Set_Configuration(写配置)请求,主机的设备驱动程序选择一个有效配置,设备此时处于配置状态。
◆?
主机为复合设备接口分配驱动程序。
◆?
如果集线器检测到有过流现象,或者主机要求集线器关闭电源,则USB总线切断设备供电电源。在这种情况下,设备与主机无法通信,但设备处于连接状态。
◆?
如果在3毫秒内设备在总线上未见任何动作,则它将进入挂起状态,在挂起状态设备消耗的总线电能最少。

还有一个差不多,如下:

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。
(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协议还提供了一些用户可选的协议,设备如果不应答,也不会出错,但是会影响到系统的功能。

使用特权

评论回复
板凳
lhchen922| | 2013-11-1 16:48 | 只看该作者
USB初学者必读本《圈圈教你玩USB>>
真的。

使用特权

评论回复
地板
duanwuqqqqqq|  楼主 | 2013-11-1 17:01 | 只看该作者
lhchen922 发表于 2013-11-1 16:48
USB初学者必读本《圈圈教你玩USB>>
真的。

很强大!这些协议大概了解一些,但是还是有点疑问:(12)根据Device_Descriptor和Device_Configuration应答,PC判断是否能够提供USB的Driver,一般win2k能提供几大类的设备,如游戏操作杆、存储、打印机、扫描仪等,操作就在后台运行。但是Win98却不可以,所以在此时将会弹出对话框,索要USB的Driver。
现在win7下对于第一次插入的U盘都会提示正在安装驱动程序,windows提供额几大类设备不能支持U盘吗?一定要对每个U盘单独安装驱动?

使用特权

评论回复
5
insignal| | 2013-11-3 20:02 | 只看该作者
windows要把u盘的信息记录到注册表中
也是一个装驱动的过程

使用特权

评论回复
6
duanwuqqqqqq|  楼主 | 2013-11-4 16:43 | 只看该作者
insignal 发表于 2013-11-3 20:02
windows要把u盘的信息记录到注册表中
也是一个装驱动的过程

您确定是这样的么,确定只是把信息记录到注册表而没有任何针对U盘操作的驱动的安装?

使用特权

评论回复
7
insignal| | 2013-11-5 08:33 | 只看该作者
duanwuqqqqqq 发表于 2013-11-4 16:43
您确定是这样的么,确定只是把信息记录到注册表而没有任何针对U盘操作的驱动的安装? ...

当然要读取U盘里的信息
如果U盘里的dbr/fat/root哪个地方不正确,可能还要写一下

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1

主题

3

帖子

0

粉丝