USB学习之一:USB协议基础

本文深入解析USB技术,涵盖USB1.0至USB3.0的演进历程,介绍USB的主从结构、拓扑特性、插入检测机制,以及描述符体系与设备枚举过程。详细阐述了USB的四种传输类型及其应用场景。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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之后才可使用。


 

 

 

 

 

 

 

 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值