一、简介
- USB来自于intel,同时IBM,微软,等企业也参与的标准的建设。
- 在历史发展中,USB为什么能够存活到现在?
- 相比于串口,并口等,其最大的特点是:速度快,扩展能力强,易用性高。
- USB2.0最快达到480MB/s,USB3.0最快达到4.8GB/s。
- USB的各个版本都是兼容的。
- linux在2.6.31版本的内核中对USB3.0进行了支持。
- USB支持多功能的设备,也就是说一个设备可以同时有多个功能。这是通过在一个设备中包含多个接口,每个借口支持一个功能,来实现的。
- USB可以支持多达127个设备。
- USB可以保证固定的带宽,这对音视频设备友好。
二、结构
- USB只要包括USB连接,USB主机控制器,USB设备三大部分。
- USB设备包括Hub和功能设备。
- 现实中,经常是一个usb控制器和一个hub绑定在一起,而这个hub被称为roothub,也就是说和usb控制器绑定在一起的hub是最根本的hub。其他的hub可以连接到他这里。
- usb通过电缆中的VBUS和GND向usb设备供电,当前USB设备也可以自供电。
- Compound Device和Compisote Device
- Compound Device是将Hub和连在hub上的设备封装在一起所组成的设备。
- Composite Device是包含彼此独立的多个接口的设备。
- Compound Device和单独的一个hub,这里面每个设备都会有自己独立的地址。
- Composite Device不管有多少接口,都只有一个地址。
- USB总线是一种轮询式总线,协议规定所有的数据传输必须由主机发起。
2.1、端点
- USB最基本的形式是通过USB设备中一个叫做EndPoint的东西,而主机和端点之间的数据传输是通过pipe(管道)。
- 端点就是通信的发送点或者接受点,要发送数据,只需要把数据发送到正确的端点,就可以了。
- 端点是有方向的,且是确定的,要么是in,要么是out 。
- 0号端点,作为特殊的端点,既可以in又可以out,USB系统将其作为默认的控制管道,用来控制设备。
- 端点也是限量供应的:
- 低速设备最多只能有两个端点。
- 高速设备最多也只能有15个in端点,15个out端点。这些端点在设备内部都有唯一的端点号,这个端点号是在设备设计时就已经指定的。
2.2 管道通信方式
- 管道通信方式有两种:
- stream:对数据格式没有要求。
- message:要求数据有一定格式,主要用于主机向设备请求信息。
- 协议中规定,message管道必须对应两个相同号码的端点:一个用来in,一个用来out。默认管道就是message管道,与其对应的就是两个具有相同号码0的端点。
2.3 数据传输方式
- USB端点有四种类型,分别对应四种不同的数据传输方式:
- 控制传输(Control Transfer): 用于传送控制信息。内核中的USB Core使用“端点0”,在设备插入时进行设备的配置。
- 中断传输(Interrupt Data Transfers):用来以固定的速率传送少量的数据。例如键鼠等。
- 批量传输(Bulk Data Transfers):用来传输大量的数据,确保数据没有丢失,但失效不保。例如U盘。
- 等时传输(Isochronous Data Transfers):用来传输大量的数据,速率稳定,实时接收,但不保证数据送达。例如,视频和音频传输。
2.4 逻辑视图
- 逻辑视图如同所有设备连接在root hub上。
- 一个USB逻辑设备就是一系列端点的集合,它与主机的通信发生在主机上的一个缓冲区和设备上的一个端点之间,通过管道来传输数据。也就是说,管道的一端是在主机上的缓冲区,一端是设备上的端点。
- 多个端点被捆绑为接口(interface),一个接口代表一个基本功能。在内核中一个接口要对应一个驱动程序。到目前为止一个设备可以包含多个接口,一个接口可以具有多个端点。
三、USB设备举例
- 在USB子系统里面,主机控制器就是他们的老大,每个USB设备都要被系统识别,
sysfs
就是对外的窗口,我们可以从sysfs里了解认识的每一个USB设备。 - USB系统中的第一个USB设备时RootHub,他和usb控制器绑定在一起。
- root hub通常包含在PCI设备中,是连接PCI总线和USB总线的bridge,控制着连接到它上面的整个USB总线,所有的root hub,内核的USB Core 都分配有独特的编号。