USB基础知识.docx

上传人:牧羊曲112 文档编号:3168190 上传时间:2023-03-11 格式:DOCX 页数:8 大小:42.09KB
返回 下载 相关 举报
USB基础知识.docx_第1页
第1页 / 共8页
USB基础知识.docx_第2页
第2页 / 共8页
USB基础知识.docx_第3页
第3页 / 共8页
USB基础知识.docx_第4页
第4页 / 共8页
USB基础知识.docx_第5页
第5页 / 共8页
亲,该文档总共8页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述

《USB基础知识.docx》由会员分享,可在线阅读,更多相关《USB基础知识.docx(8页珍藏版)》请在三一办公上搜索。

1、USB基础知识1.拓扑结构 USB是我们经常用的,只是看到USB线一头接着主机,一头接着USB设备。但是设备是如何通信的呢?电气上的连接是怎么样的还不是很清楚?USB的可见的拓扑结构很好理解,就是一个USB host 接若干个Hub, hub下面接若干个USB Device。 2.枚举步骤 USB协议定义了设备的6种状态,仅在枚举过程种,设备就经历了4个状态的迁移:上电状态(Powered),默认状态(Default),地址状态(Address)和配置状态(Configured))。 Attached和Powered状态不难理解:当一个设备被正确插入到主机的USB接口时,就处于Attached

2、(连接)的状态。设备连接好了,USB主机识别了设备,同时没有对设备进行请求,USB设备就处于Suspended(挂起)状态。 下面步骤是Windows系统下典型的枚举过程,但是固件不能依此就认为所有的枚举操作都是按照这样一个流程行进。设备必须在任何时候都能正确处理所有的主机请求。 1. 用户把USB设备插入USB端口或给系统启动时设备上电 这里指的USB端口指的是主机下的根hub或主机下行端口上的hub端口。Hub给端口供电,连接着的设备处于上电状态。 2. Hub监测它各个端口数据线上(D+/D-)的电压 在hub端,数据线D+和D-都有一个阻值在14.25k到24.8k的下拉电阻Rpd,而

3、在设备端,D+和D-上有一个1.5k的上拉电阻Rpu。当设备插入到hub端口时,有上拉电阻的一根数据线被拉高到幅值的90%的电压。hub检测到它的一根数据线是高电平,就认为是有设备插入,并能根据是D+还是D-被拉高来判断到底是什么设备插入端口。 检测到设备后,hub继续给设备供电,但并不急于与设备进行USB传输。 3. Host了解连接的设备 每个hub利用它自己的中断端点向主机报告它的各个端口的状态,报告的内容只是hub端口的设备连接断开的事件。如果有连接断开事件发生,那么host会发送一个 Get_Port_Status请求(request)以了解更多hub上的信息。 Get_Port_S

4、tatus等请求属于所有hub都要求支持的hub类标准请求。 4. Hub检测所插入的设备是高速还是低速设备 hub通过检测USB总线空闲(Idle)时差分线的高低电压来判断所连接设备的速度类型,当host发来Get_Port_Status请求时,hub就可以将此设备的速度类型信息回复给host。操作)。 5. hub复位设备 当主机获悉一个新的设备后,主机控制器就向hub发出一个 Set_Port_Feature请求让hub复位其管理的端口。hub通过驱动数据线到复位状态(D+和D-全为低电平 ),并持续至少10ms。当然,hub不会把这样的复位信号发送给其他已有设备连接的端口,所以其他连在

5、该hub上的设备自然看不到复位信号,不受影响。 6. Host检测所连接的全速设备是否是支持高速模式 因为根据USB 2.0协议,高速设备在初始时是默认全速状态运行,所以对于一个支持USB 2.0的高速hub,当它发现它的端口连接的是一个全速设备时,会进行高速检测,看看目前这个设备是否还支持高速传输,如果是,那就切到高速信号模式,否则就一直在全速状态下工作。 同样的,从设备的角度来看,如果是一个高速设备,在刚连接bub或上电时只能用全速信号模式运行。随后hub会进行高速检测,之后这个设备才会切换到高速模式下工作。假如所连接的hub不支持USB 2.0,即不是高速hub,不能进行高速检测,设备将

6、一直以全速工作。 7. Hub建立设备和主机之间的信息通道 主机不停得向hub发送 Get_Port_Status请求,以查询设备是否复位成功。Hub返回的报告信息中有专门的一位用来标志设备的复位状态。 当hub撤销了复位信号,设备就处于默认空闲状态,准备着主机发来的请求。设备和主机之间的通信通过控制传输,默认地址0,端点号0进行。在此时,设备能从总线上得到的最大电流是100mA。 8.主机发送Get Descriptor请求获取默认管道的最大包长度 默认管道在设备一端来看就是端点0。主机此时发送的请求是默认地址0,端点0,虽然所有位分配地址的设备都是通过地址0来获取主机发来的信息,但由于枚举

7、过程不是多个设备并行处理,而是一次枚举一个设备的方式进行,所以不会发生多个设备同时响应主机发来的请求。 设备描述符的第8字节代表设备端点0的最大包大小。对于Windows系统来说,Get Descriptor请求中的wLength一项都会设为64,虽然说设备所返回的设备描述符长度只有18字节,但系统也不在乎,此时,描述符的长度信息对它来说是最重要的,其他的瞄一眼就过了。Windows系统还有个怪癖,当完成第一次的控制传输后,也就是完成控制传输的状态阶段,系统会要求hub对设备进行再一次的复位操作。再次复位的目的是使设备进入一个确定的状态。 9.主机给设备分配一个地址 主机控制器通过Set_Ad

8、dress请求向设备分配一个唯一的地址。在完成这次传输之后,设备进入地址状态,之后就启用新地址继续与主机通信。这个地址对于设备来说是终生制的,设备在,地址在;设备消失,地址被收回。同一个设备当再次被枚举后得到的地址不一定是上次那个了。 10.主机获取设备的信息 主机发送 Get_Descriptor请求到新地址读取设备描述符,这次主机发送Get_Descriptor请求可算是诚心,它会认真解析设备描述符的内容。设备描述符内信息包括端点0的最大包长度,设备所支持的配置个数,设备类型,VID, PID等信息。Get_Descriptor请求(Device type)和设备描述符。 之后主机发送Ge

9、t_Descriptor请求,读取配置描述符,字符串等,逐一了解设备更详细的信息。事实上,对于配置描述符的标准请求中,有时wLength一项会大于实际配置描述符的长度,比如255。这样的效果便是:主机发送了一个Get_Descriptor_Configuration 的请求,设备会把接口描述符,端点描述符等后续描述符一并回给主机,主机则根据描述符头部的标志判断送上来的具体是何种描述符。 11.主机给设备挂载驱动 主机通过解析描述符后对设备有了足够的了解,会选择一个最合适的驱动给设备。在驱动的选择过程中,Windows系统会和系统inf文件里的厂商ID,产品ID,有时甚至用到设备返回来的产品版本

10、号进行匹配。如果没有匹配的选项,Windows会根据设备返回来的类,子类,协议值信息选择。如果该设备以前在系统上成功枚举过,操作系统会根据以前记录的登记信息而非inf文件挂载驱动。当操作系统给设备指定了驱动之后,就由驱动来负责对设备的访问。 对于复合设备,通常应该是不同的接口配置给不同的驱动,因此,需要等到当设备被配置并把接口使能后才可以把驱动挂载上去。 实际情况没有上述关系复杂。一般来说,一个设备就一个配置,一个接口,如果设备是多功能符合设备,则有多个接口。端点一般都有好几个,比如Mass Storage设备一般就有两个端点。 12. 设备驱动选择一个配置 驱动根据前面设备回复的信息,发送S

11、et_Configuration请求来正式确定选择设备的哪个配置作为工作配置。至此,设备处于配置状态,当然,设备也应该使能它的各个接口。 对于复合设备,主机会在这个时候根据设备接口信息,给它们挂载驱动。 13. 设备可使用 写在最后: 本文主要参考来源是Jan Axelson的Enumeration: How the Host Learns about Devices和Danny Simpson的An Overview of the Universal Serial Bus (USB) (http:/www.sss- 关于USB2.0的高速、全速及低速设备的检测 经过我几天的研究发现,USB协

12、议中对高速、全速及低速设备检测是按照如下方式进行的。下面照我的归纳简单描述一下。 首先,协议规定了,整个USB总线拓扑体系由三个元素组成:主机、集线器(Hub)、设备(Device)。简单的说,主机(Host)只能作为主机存在,只能用来连接设备(Device)和集线器(Hub);设备(Device)只能作为设备存在,只能用来连接主机或集线器;而集线器则是既可用来连接主机,也可用来连接设备,它用来连接主机的端口,叫上行端口,用来连接设备的端口,叫做下行端口。 所以我认为主机的端口就是下行端口,而设备的端口是上行端口。 在USB 2.0的协议里,另有一些规定,即集线器必须支持高速模式,而设备则没有

13、这个要求。对于一个上行的高速设备来说,它不允许支持低速模式,但允许支持全速模式。但对于下行的收发器,或者说下行端口,它必须支持高速、全速和低速模式。 1、全速和低速设备的检测 全速和低速设备通过其端接的上拉电阻的位置来区分。全速设备端接D+线上接上拉电阻1.5K欧姆5,低速设备端接D-线上接上拉电阻1.5K欧姆5,下行端口的下拉端接电阻为15K欧姆5连接到地 当USB下行端口没有连接设备时,由于下拉电阻的存在,使D+和D上的电压为0,而当端口接上设备时,设备供电后,电源会通过上拉电阻和端口的下拉电阻分压,在D+或D上产生一个正脉冲,而USB主机根据脉冲产生在哪根数据线上,来判断是全速还是低速。

14、 2、 高速设备的检测 在连接的最开始阶段,高速设备是当成全速设备来识别的,因此,高速设备的D+线上也会有一个1.5K欧姆的上拉电阻到电源,但是与全速设备不相同的是,高速设备对这个上拉电阻,会有一个开关进行通断控制。因为高速信号传输是通过电流驱动的,而且D+和D上的信号幅值在0V和400mv之间切换,所以传输时不允许有一个接到3.3V的上拉电阻存在。以下就是简化的高速设备检测流程。 集线器或者主机必须确认连在它端口上的设备不是低速设备,如果是低速设备,则集线器或者主机就不会 发起高速握手协议。 2,当集线器或者主机确认端口设备不是低速设备后,它将在握手协议的最开始阶段,T0时刻,发出一个SE0

15、,用作复位。设备检测这个SE0,进行复位。 4,假如设备是高速设备,则它会让上拉电阻仍然连接,但会使高速的端接无效,并驱动高速信号电流流向D-线上,这将在总线上产生一个K脉冲。该脉冲,在复位的TO时刻后,必须持续至少1.0 ms,但不能超过7.0ms。 5,集线器在观察到设备发出的K脉冲至少2.5 us后,必须能检测出这个脉冲。假如集线器没有检测出这个脉冲,则它必须持续的发出SE0信号,直到复位结束。 6,在当K脉冲信号在总线上存在不超过100 us的时间后,集线器必须开始发送间隔的K脉冲和J脉冲序列信号,在Js和Ks之间的总线上不允许有空闲状态发生。该序列信号在复位结束之前将持续一段时间,不

16、少于100 us,但不长于500 us。每一个独立的K脉冲和J脉冲的持续时间至少为40 us,但不能长于60 us。 7,在完成脉冲序列信号发生之后,集线器发出SE0信号,直到复位结束。在复位结束时,集线器必须转到高速使能状态,而无需在数据线上作出任何改变。 8,在设备完成它自己的脉冲信号后,它将寻找高速集线器的脉冲信号。设备至少需要观测到K-J-K-J-K-J脉冲序列,来作为检测到一个有效的集线器脉冲信号。每一个独立的K脉冲和J脉冲至少需检测到2.5 us。 A),假如设备检测到脉冲序列K-J-K-J-K-J,则在检测到后的500 us之内,设备要求断开D+的上拉电阻,并使能高速端接,进入高

17、速缺省状态。即已进入高速模式 B),假如设备在完成它自己的脉冲信号之后的1.0 ms到2.5 ms之内,没有检测到脉冲序列K-J-K-J-K-J,则设备要回复到全速缺省状态,并等待至复位结束。 USB的描述符及各种描述符之间的依赖关系 USB是个通用的总线,端口都是统一的。但是USB设备却各种各样,例如USB鼠标,USB键盘,U盘等等,那么USB主机是如何识别出不同的设备的呢?这就要依赖于描述符了。 USB的描述符主要有设备描述符,配置描述符,接口描述符,端点描述符,字符串描述符,HID描述符,报告描述符等等。 关于报告描述符,请看:USB HID报告及报告描述符简介 更多请观看先锋影音htt

18、p:/www.xfyc.cc 一个USB设备有一个设备描述符,设备描述符里面决定了该设备有多少种配置,每种配置描述符对应着配置描述符;而在配置描述符中又定义了该配置里面有多少个接口,每个接口有对应的接口描述符;在接口描述符里面又定义了该接口有多少个端点,每个端点对应一个端点描述符;端点描述符定义了端点的大小,类型等等。 由此我们可以看出,USB的描述符之间的关系是一层一层的,最上一层是设备描述符,下面是配置描述符,再下面是接口描述符,再下面是端点描述符。在获取描述符时,先获取设备描述符,然后再获取配置描述符,根据配置描述符中的配置集合长度,一次将配置描述符、接口描述符、端点描述符一起一次读回。其中可能还会有获取设备序列号,厂商字符串,产品字符串等。 每种描述符都有自己独立的编号,如下: #define DEVICE_DESCRIPTOR 0x01 /设备描述符 #define CONFIGURATION_DESCRIPTOR 0x02 /配置描述符 #define STRING_DESCRIPTOR 0x03 /字符串描述符 #define INTERFACE_DESCRIPTOR 0x04 /接口描述符 #define ENDPOINT_DESCRIPTOR 0x05 /端点描述符

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号