一个USB系统可分解为三部分内容——USB主机(host)、USB设备(device)以及两者之间的内在联系(interconnect)。
内在联系包括四方面:
- 总线拓扑(Bus Topology)
- 内部层级关系(Inter-layer Relationships)
- 数据流模型(Data Flow Models)
- 时间分配(USB Schedule)
总线拓扑
USB总线是分层星型拓扑结构,一个USB系统只能有1个主机,由于时间的限制,USB系统最多拓展到7层,其中的hub最多只能级联5层(不包括root hub)。如上图所示,含有hub的复合设备不能接到第7层。一个USB系统最多支持127个设备。
一个 USB HOST 最多可以同时支持 128 个地址,地址 0作为默认地址,只在设备枚举期间临时使用,而不能被分配给任何一个设备,因此一个 USB HOST 最多可以同时支持 127个地址,如果一个设备只占用一个地址,那么可最多支持 127 个USB设备。在实际的USB体系中,如果要连接127个USB设备,必须要使用USB HUB,而 USB HUB 也是需要占用地的,所以实际可支持的 USB功能设备的数量将小于 127。
注:hub是用来拓展usb接口的设备。
物理接口
USB只需简单的4线线缆,2根电源线,2根数据线。其中电源电压为5V,可以为设备提供电源,设备本身也可以单独安排电源供电。数据线传输的是差分信号,按速率分为3种:
- 480Mb/s的高速(high-speed)
- 12 Mb/s的全速(full-speed)
- 1.5 Mb/s的低速(low-speed)
健壮性
- USB线上采用差分信号传输数据
- 采用CRC校验数据
- 数据错误重发机制,当数据接收方发现接收到的数据出错了,会要求发送方重新发数据,一包数据最大可发送3次,超过三次,发送方就会将错误报告给上层软件去处理。
总线协议
USB是轮询总线,所有数据传输(data transfers)都由主机启动。
大多数总线事务涉及最多三个数据包的传输。1)主机先发送一个数据包给设备,这个数据包包含数据类型、数据方向、设备地址等信息;2)接收到该数据包的设备根据数据包的内容做出相应处理——接收下一包数据或者向主机发送一包数据;3)接收到数据的主机或者设备向数据发送方发送一包数据,表示数据接收的情况。
端点(Endpoint)是USB设备上的数据处理单位。主机发送过来的数据,由端点接收,设备要发送给主机数据,也由端点发送。端点0比较特殊,支持双向,既可以接收,也可以发送,其它端点只能有一个方向。
主机与设备端点(Endpoint)之间的数据传输可以看作是管道(Pipe)模型,这是逻辑上的管道概念,设备上有多个端点,每个端点只能处理规定的数据类型,那么主机就要明确数据是发给哪个端点的,如此主机和每一个端点就有了独立的捆绑关系,在逻辑上类似于在两者之间架设了直连管道传输数据。管道分为流管道(Stream Pipes)和信息管道(Message Pipes)。信息管道(Message Pipes)的数据有规定的格式含义,而流管道(Stream Pipes)没有。
数据流类型(Data Flow Types)
一条管道只能支持一种类型的数据传输,也就是说一个端点只能接受一种类型的数据传输。
USB将数据传输类型分为四种:
- 控制传输(Control Transfers):用于设备连接时的配置处理以及其它管道控制等目的。 每个USB设备接入都会使用到该类型传输。
- 批量传输(Bulk DataTransfers):用于大量数据的传输,延迟没有保证。 例如打印机、扫描仪都会使用到该类型传输。
- 中断传输(Interrupt Data Transfers):有时间保证的可靠传输。会有延迟,但时间是控制在一定阈值之下的。例如鼠标的使用就涉及到这种类型的数据传输。
- 同步传输(Isochronous DataTransfers):实时传输,数据正确性不保证。一个典型例子就是USB音频设备。
USB将带宽分配给管道,如果设备要求更多的带宽,那设备就需要有更大的空间以便承载数据。
设备特点
每一个设备都有端点0,设备的信息都是通过端口0发送给主机的。设备信息可以分为三类:
标准信息:这是所有USB设备都有的一类信息,包括厂商标识、设备类别、电源管理能力、各级描述符。
类信息:这个跟标准信息中的设备类别信息相关。
厂商信息:USB厂商自定义的内容。
设备主要分为两类:集线类(hubs)和功能类(Functions),hub扩展接口数量,function提供具体功能。
主机硬件和软件
主机是通过主机控制器( Host Controller)和设备通信的,主要做以下几方面的工作:
- 检测设备的插入和移除。
- 管理主机和设备之间的控制流。
- 管理主机和设备之间的数据流。
- 收集状态和活动统计。
- 设备供电。
系统软件和设备软件的互动有以下几方面:
- 设备枚举和配置
- 同步数据传输
- 异步数据传输
- 电源管理
- 设备和总线管理信息
参考资料:
- Universal Serial Bus Specification Revision 2.0 ,April 27, 2000