设计 USB 接口的目的

设计USB接口的主要目的包括:

  1. 统一标准

    • USB接口的设计旨在提供一个统一的标准,取代过去各种不同的接口(如串口、并口、PS/2等),简化连接和接口类型,方便用户使用。
  2. 即插即用

    • 提供即插即用的功能,使用户无需重启计算机或进行复杂的设置就能使用新设备,大大提高了设备的易用性。
  3. 高效的数据传输

    • 设计高效的数据传输协议,支持不同速度的传输模式(如低速、全速、高速和超高速),满足各种设备的性能需求。
  4. 电力供应

    • 通过USB接口供电,使一些外部设备(如键盘、鼠标、U盘等)无需额外的电源适配器,简化了设备的使用。
  5. 热插拔功能

    • 支持热插拔,使用户可以在不关闭设备电源的情况下插拔USB设备,提高了使用的灵活性和便利性。
  6. 扩展性

    • 设计支持通过集线器扩展多个USB设备,提升了接口的扩展性,满足更多设备连接的需求。

USB 的发展和特点

版本发布年份传输速率主要特点
USB 1.019961.5 Mbps(低速)和12 Mbps(全速)最早的USB标准,主要用于低速设备如键盘和鼠标
USB 1.119981.5 Mbps和12 Mbps修正了USB 1.0的一些问题,提高了兼容性和稳定性
USB 2.02000480 Mbps(高速)大幅提升传输速率,广泛应用于U盘、外部硬盘、打印机等设备,向下兼容USB 1.x设备
USB 3.020085 Gbps(超高速)增加了更多传输通道(双向传输),提升了数据传输效率,蓝色插头和连接器以区分USB 2.0
USB 3.1201310 Gbps(超级速度+)进一步提升传输速率,并引入了新的Type-C接口标准
USB 3.2201710 Gbps和20 Gbps(双通道)引入多通道技术,提升传输速度和带宽,全面支持Type-C接口
USB42019最高40 Gbps基于Thunderbolt 3协议,提供更高的传输速率和更好的数据传输性能,支持多种协议(如PCIe和DisplayPort),并完全采用Type-C接口
USB Type-C--可逆设计,支持多种协议(如USB 3.x、USB4、Thunderbolt 3等),高功率传输(支持USB PD协议,提供高达100W的功率)

USB 的拓扑结构和特点

USB的拓扑结构是树形结构,这种结构使得设备可以通过多个层次的集线器(HUB)连接到主机。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
                          主机(Host)
                             |
                         根集线器(Root Hub)
                        /    |     \    \
                       /     |      \    \
                 设备1  集线器1(Hub1) 设备2  设备3
                           /  |  \
                          /   |   \
                    设备4  设备5  集线器2(Hub2)
                                    /   \
                                   /     \
                             设备6  设备7

USB拓扑结构

  • 根集线器(Root Hub):

    每个USB系统有一个根集线器,通常集成在主控制器(Host Controller)中。 根集线器直接连接到主机,并为主机提供多个端口,用于连接USB设备或下级集线器。

  • 集线器(Hub):

    集线器用于扩展连接能力,每个集线器有一个上行端口(连接到上一级集线器或根集线器)和多个下行端口(连接到设备或下一级集线器)。 集线器可以级联,最多支持5级集线器(包括根集线器)。

  • 设备(Device):

    设备可以是任何USB外围设备,如键盘、鼠标、打印机、U盘等。 设备通过集线器的下行端口连接到主机。

拓扑结构特点

  • 树形结构:

    USB拓扑结构呈树形,主机位于树的根部,通过根集线器连接多个设备和集线器。 这种结构便于扩展,通过增加集线器可以连接更多的设备。

  • 最多层级:

    USB规范规定,从根集线器到设备的最大层级数为5级,包括根集线器。 这意味着从主机到最远的设备最多可以经过4个集线器。

  • 端口数量:

    每个集线器可以有多个下行端口,一般为4到7个,具体数量取决于集线器的设计。

  • 电源管理:

    集线器和设备可以通过USB供电。高功率设备可能需要自带电源适配器,而低功率设备(如鼠标、键盘)可以直接从USB端口获取电力。

  • 即插即用:

    USB支持即插即用,用户可以在不关闭主机电源的情况下插拔设备,操作系统会自动识别并配置设备。

  • USB 连接 USB 连接指的就是连接 USB 设备和主机(或 Hub)的四线电缆。电缆中包括 VBUS(电源线)、GND(地线)和两根信号线。USB 系统就是通过 VBUS 和 GND 向 USB 设备提供电源的。主机对连接的 USB 设备提供电源供其使用,而每个 USB 设备也能够有自己的电源。

  • USB Host Controller (USB 主机控制器) 控制所有的 USB 设备的通信,一个 USB 控制器和一个 Hub 集成在一起,而这个Hub 也被称做 Root Hub。

  • USB 设备 USB 设备包括了 Hub 和功能设备

Composite Device(组合设备)和 Compound Device(复合设备)

在USB术语中,Compound Device(复合设备)和 Composite Device(组合设备)都是指含有多个功能的USB设备,但它们有不同的架构和特点。以下是它们的差异和特点:

特点Composite Device(组合设备)Compound Device(复合设备)
USB地址共享一个USB地址每个功能设备有独立的USB地址
内部结构多个接口共享同一个USB设备包含一个内部集线器和多个功能设备
管理和控制简单,因为所有功能共享同一个地址复杂,因为每个功能设备独立管理
设备描述符一个设备描述符,多个接口描述符每个功能设备有独立的设备描述符
应用示例键盘和触摸板的组合设备多功能打印机

USB 总线及其传输方式

USB 总线是一种轮询式总线。协议规定所有的数据传输都必须由主机发起,由主机控制器初始化所有的数据传输。

USB 通信的端点和管道

USB端点(Endpoint)是USB设备进行数据传输的基本单元,每个端点具有唯一的地址和特定的功能。主机和端点之间的数据传输是通过 Pipe(管道)。

端点就是通信的发送点或者接收点,要发送数据,只需把数据发送到正确的端点就可以了。

端点具有方向性,可以是输入端点(IN),用于从设备向主机发送数据;也可以是输出端点(OUT),用于从主机向设备发送数据。但一般没有既是 in 又是 out 的。

协议规定了,所有的 USB 设备必须具有端点 0,它可以作为 in 端点,也可以作为 out 端点。USB 系统软件利用它来实现默认的控制管道,从而控制设备。

端点的数量是有限的,除了端点 0,低速设备最多只能拥有两个端点,高速设备也最多只能拥有 15 个 in 端点和 15 个 out 端点。

每个端点在一个设备中有唯一的地址,由端点号(Endpoint Number)和方向(Direction)组成。

USB 端点有四种类型,分别对应了四种不同的数据传输方式: 它们是控制传输(Control Transfers)、中断传输(Interrupt Data Transfers)、批量传输(Bulk Data Transfers)和等时传输(Isochronous Data Transfers)

每个端点都有一个端点描述符(Endpoint Descriptor),包含端点的特性信息,如端点地址、方向、传输类型、最大包大小等。

USB端点的特点总结:

特性描述
唯一标识每个端点在设备中有唯一的地址,由端点号和方向组成。
方向性输入端点(IN):从设备向主机发送数据。输出端点(OUT):从主机向设备发送数据。
端点类型控制端点:设备配置和管理。中断端点:周期性、小数据量传输,低延迟。批量端点:大数据量传输,高可靠性。等时端点:实时数据传输,恒定带宽。
数据传输类型控制传输、中断传输、批量传输和等时传输。
带宽分配主机控制器在设备枚举过程中分配带宽,确保端点有足够带宽进行数据传输。
端点描述符包含端点地址、方向、传输类型、最大包大小等信息。
数据缓冲区存储待发送或接收的数据,缓冲区大小和数量取决于端点类型和设备设计。
流量控制通过握手包(ACK、NAK、STALL)进行流量控制,确保数据传输可靠性和完整性。
端点零(Endpoint 0)用于设备初始配置和控制传输,在设备枚举过程中扮演关键角色。

管道代表着在主机和设备上的端点之间移动数据的能力,管道的一端是主机上的一个缓冲区,一端是设备上的端点。

管道的通信方式有两种:一种是stream 的,一种是 message 的。 message 管道要求从它那儿过的数据必须具有一定的格式,它主要就是用于主机向设备请求信息的,必须得让设备明白请求的是什么。而 stream 对数据没有特殊的要求。 协议中规定,message 管道必须对应两个相同号码的端点:一个用来 in,一个用来 out,默认管道就是 message 管道。

USB总线、端点及其传输方式总结:

分类特征描述
USB总线总线结构树形拓扑,包括主机控制器、根集线器、集线器和设备,呈树状层次结构。
主从控制主机控制数据传输的时序和仲裁,设备通过总线连接到主机。
差分信号传输使用D+和D-两根线进行差分信号传输,抗干扰能力强。
数据包传输数据以包为单位传输,包括令牌包、数据包、握手包和特殊包。
同步和握手机制通过Sync字段实现同步,通过握手包确认数据传输状态(ACK、NAK、STALL)。
供电功能USB总线可为设备供电,不同版本提供不同的电力供应能力(如USB 2.0提供5V/500mA,USB 3.0提供5V/900mA)。
端点端点类型控制端点(Endpoint 0):用于设备配置和管理。 数据传输端点:包括中断端点、批量端点和等时端点。
端点属性方向性:端点可以是输入端点(IN)或输出端点(OUT)。 唯一性:每个端点在设备中具有唯一的地址(由端点号和方向性组成)。
传输方式控制传输(Control Transfer)用途:设备配置、命令和状态查询。 特点:包括设置、数据和状态三个阶段,短包传输。 应用:设备枚举和初始化过程。
中断传输(Interrupt Transfer)用途:周期性的小数据量传输,低延迟需求。 特点:设备周期性地发送中断数据包,保证数据的及时性。 应用:键盘、鼠标等输入设备。
批量传输(Bulk Transfer)用途:大数据量可靠传输。 特点:利用总线空闲时间传输数据,有CRC校验和重传机制,保证数据完整性。 应用:打印机、U盘等需要传输大数据量的设备。
等时传输(Isochronous Transfer)用途:需要恒定带宽和实时数据传输的应用。 特点:保证传输时间一致性,无重传机制,适用于实时数据流。 应用:音频设备、视频摄像头等。

USB 逻辑拓扑结构

在内核中的实现所有的 Hub 和设备都被看做是一个个的逻辑设备(Logical Device)。

一个 USB 逻辑设备就是一系列端点的集合,它与主机之间的通信发生在主机上的一个缓冲区和设备上的一个端点之间,通过管道来传输数据。

USB 端点被捆绑为接口(Interface),一个接口代表一个基本功能。有的设备具有多个接口,像 USB 扬声器就包括一个键盘接口和一个音频流接口。在内核中,一个接口要对应一个驱动程序,USB 扬声器在 Linux 里就需要两个不同的驱动程序。

sysfs 与 USB

sysfs 是 Linux 内核中一个伪文件系统,它提供了一种统一的方式,将内核对象、属性和状态信息以文件和目录的形式暴露给用户空间。我们可通过 sysfs 查看和管理系统设备

sysfs的作用

sysfs 是 Linux 内核中一个伪文件系统,它提供了一种统一的方式,将内核对象、属性和状态信息以文件和目录的形式暴露给用户空间。sysfs 的主要作用包括:

  1. 内核对象模型的表示

    • sysfs 将内核对象(如设备、驱动程序、文件系统等)映射到文件和目录,使用户可以方便地查看和管理这些对象的属性和状态。
  2. 系统信息和配置的访问

    • 用户可以通过读取和写入 sysfs 文件来获取系统信息和配置系统。例如,用户可以查看硬件设备的属性或调整设备的参数。
  3. 调试和监控

    • sysfs 提供了一种直接从用户空间访问内核信息的方法,便于调试和监控系统状态。

sysfs 里 USB 设备规则

sysfs 中,USB 设备按照层次结构组织,每个设备都有自己的目录,包含该设备的各种属性文件。以下是 sysfs 中 USB 设备的主要规则和内容:

  1. USB 设备目录结构

    • 所有 USB 设备的信息都位于 /sys/bus/usb/devices/ 目录下。
    • 每个 USB 设备都有一个唯一的目录名,通常是设备的总线编号和设备编号(如 1-1 表示总线 1 的设备 1)。
  2. USB 设备属性文件

    • 每个 USB 设备目录下有多个属性文件,包含设备的各种信息和配置参数。常见的属性文件包括:
      • idVendor:设备厂商 ID
      • idProduct:设备产品 ID
      • bDeviceClass:设备类
      • bDeviceSubClass:设备子类
      • bDeviceProtocol:设备协议
      • bNumConfigurations:设备配置数量
      • busnum:设备所在的总线编号
      • devnum:设备编号
      • manufacturer:设备制造商
      • product:设备名称
      • serial:设备序列号
  3. USB 端点和接口

    • 每个 USB 设备目录中还包含该设备的接口和端点信息。接口和端点的信息也以文件的形式暴露在设备目录下。
    • 接口信息通常位于 interface 文件中,端点信息通常位于 endpoint 文件中。
  4. 设备状态和操作

    • sysfs 中的 USB 设备目录还包含一些可以读写的文件,用于控制设备状态和执行操作。例如:
      • authorized:表示设备是否被授权使用,可以写 01 来禁用或启用设备。
      • remove:写入 1 可以从系统中移除设备。

usb 鼠标的目录树

查看设备名称和制造商