USB开发者论坛http://www.usb.org/
USB专区:http://group.ednchina.com/93/
1.1USB的特点
在USB1.0和USB1.1版本中,只支持1.5Mb/s的低速(low-speeed)模式,和12Mb/s的全速(full-speed)模式。在USB2.0又加入了速度更快的(480Mb/s)的高速(high-speed)模式。目前USB3.0协议支持5Gb/s超高速模式。
1.2 USB的拓扑结构
USB是一种主从结构的系统,主机叫做Host,从机叫做Device。通常所说的USB主机具有一个或多个USB主控制器(host controller)和根集线器(root hub),另外还有一类特殊的USB设备-USB集线器(USB hub),它可以对原有的USB口在数量上进行拓展,获得更多的USB口,它只能拓展出更多的USB口,但是不能拓展出更多的带宽,所有USB口共享一个主机控制器带宽。
USB数据交换只能发生在主机和设备之间,主机与主机,设备与设备之间不能直接连接和交换数据。所有数据传输都是由主机主动发起,而设备只是被动应答。
USB的拓扑结构为金字塔形,如下图所示:
理论上一个USB主机控制器最多可以接127个设备,这是因为协议规定,一个USB设备具有一个7bit的地址,取值0-127,其中0地址是保留给未初始化的设备用的。
1.3 USB的插入检测机制
USB集线器的每个下游端口的D+ D-上,分别接了一个15k的下拉电阻到地,当集线器的端口悬空,即没有设备插入时,
输入端就被下拉到地。在USB设备端的D+或者 D-上接了一个1.5k的上拉电阻到3.3v电源,1.5k电阻是接D+ 还是D-是由设备的速度来决定的。对于全速和高速设备上拉到D+上,对于低速设备上拉到D-上。当有设备插入集线器时,接了上拉电阻的那条数据线电压由1.5k和15k电阻分压决定,大概是在3v,这对集线器来说是高电平,集线器检测到这一状态后,就报告给USB主机控制器,这样就检测到设备的插入了。
1.4:USB描述符及其之间的关系
USB1.1协议定义的标准描述符有:设备描述符(Device Descriptor)、配置描述符(Configuation Descriptor)、接口描述符(Interface Descriptor)、端点描述符(Endpoint Descriptor)及字符串描述符(String Descriptor)。
一个USB设备只有一个设备描述符,设备描述符里决定了该设备有多少种配置,每种配置都有一个配置描述符;而在每个配置描述符中又定义了该配置里有多少个接口,每个接口都有一个接口描述符,在接口描述符里又定义了该接口有多少个端点,每个端点有一个端点描述符。在主机获取描述符时,先获取设备描述符,接着再获取配置描述符,然后根据配置描述符中的配置集合的总长度,一次将配置描述符、接口描述符、类型描述符。端点描述符一次读回。
设备描述符:主要记录的信息有,设备所使用是USB协议版本号、设备类型、端点0的最大包大小、厂商ID和产品ID、设备版本号、厂商字符串索引、产品字符串索引、设备序列号索引、可能的配置树等。
配置描述符:主要记录配置所有包含的接口数,配置的编号,供电方式,是否支持远程唤醒。电流需求量等。
接口描述符:主要记录接口的编号,接口的端点树,接口所使用的类,子类,协议等。
端点描述符:主要记录端点号及方向、端点的传输类型、最大包长度、查询时间间隔等。
字符串描述符:主要提供一些方便人们阅读的信息,不是必须的。
1.5 USB设备的枚举过程
USB主机检测到USB设备插入后,就要对设备进行枚举了,枚举就是从设备读取各种描述符信息。这样主机就可以根据这些信息加载合适的驱动程序。
枚举过程:
(1).USB设备检测到USB设备插入后,就会先对设备进行复位,USB设备在总线复位后其地址为0,这样主机就可以通过地址0和那些刚刚插入的设备通信。主机往地址为0 的设备端点发送获取设备描述符的标准请求。设备在收到请求后,会按照主机请求的参数,在数据过程将参数返回给主机,主机在获取到设备的描述符后并且确认无误后,会返回一个0长度的 确认数据包,从而进入接下来的设置地址阶段。
(2).主机对设备又一次复位,就进入到设置地址阶段,USB主机往设备地址为0的设备端发出一个设置地址请求,新的设备地址包含在建立过程的数据包中,主机会分配一个唯一的地址给刚接入的设备,USB设备在收到这个建立过程之后,就直接进入到状态过程,因为这个控制传输没有数据过程。设备等待主机请求状态返回,收到输入令牌包后,设备就返回0长度的状态数据包,如果主机确认该状态包已经正确收到,就会发送应答包ACK给设备,设备收到这个ACK后,就要启用新的设备地址了,这样设备就分配到了一个唯一的设备地址,以后主机就通过他来访问设备。
(3)主机再次获取设备描述符,这次是使用新的地址获取设备描述符,这次需要获取全部18个字节的设备描述符。
(4)主机获取配置描述符,配置描述符总共为9个字节,主机获取配置描述符后,根据配置描述符中所描述的配置集合总长度,获取配置集合。配置集合包括配置描述符,接口描述符,类特殊描述符,端点描述符。接口描述符,类特殊描述符、端点描述符是不能单独获取的,必须跟随配置描述符以一个集合的方式一并返回。
(5) 如果有字符串描述符,还要获取字符串描述符,另外像HID设备,还有报告描述符等,他们是单独获取的。
1.6 USB事务
事务通常由两个或者三个包组成:令牌包,数据包,捂手包。
令牌包:用来启动一个事务,总是由主机发送。
数据包:传送数据,可以从主机到设备,也可以从设备到主机,方向由令牌包指定。
捂手包:握手包的发送者通常为数据接受者,当数据接收正确后,发送握手包。
1.7 USB的四种传输类型
(1)批量传输: 批量传输使用批量事务(bulk transaction)传输数据,一次批量事务有三个阶段:令牌包阶段,数据包阶段,和握手包阶段。
(2)中断传输:中断传输是一种保证查询频率的传输,中断端点在端点描述符中要报告它的查询间隔,主机会保证在小于这个时间间隔的范围内安排一次传输。这里 所说的中断,跟我们硬件上的中断是不一样的,它不是由设备主动地发出一个中断,而是由主机在保证不大于某个时间间隔内安排一次传输,中断传输通常用在数据量不大,但是对时间要求比较严格的设备中,例如鼠标键盘等。
(3)等时传输:等时传输(同步传输)用在数据量大,对实时性要求高的场合,例如音频设备,视频设备。
(4)控制传输:控制传输比前面三种传输要复杂些,控制传输分为三个过程。第一个过程建立过程,第二个过程是可选的数据过程,第三个过程是状态过程。
1.8:端点类型和传输类型的关系
一个具体的端点,只能工作在一种传输模式下。通常我们把工作在什么模式下 的 端点,就叫做什么端点,例如控制端点,批量端点,等。端点0是每个USB设备都必须具备的默认控制端点,他一上电就存在并且可用,设备的各种描述符以及主机发送的各种命令,都是通过端点0 传输的,其他端点是可选的需要根据具体的设备来决定。非端点0只有在set config之后才可使用。