整个过程可以分为四个主要阶段:物理连接与识别枚举与配置驱动加载数据传输


阶段一:物理连接与检测

  1. 设备插入
    • 用户将 USB 设备插入主机的 USB 端口(根集线器或下级集线器)。
  2. 电源提供与上电
    • 主机通过 VBUS 电源线为设备提供 +5V 电压。设备开始上电。
    • 根据 USB 规格,设备可以从总线获取最多 100mA(USB 2.0)或 150mA(USB 3.0)的电流,用于初始操作。
  3. 设备检测
    • 主机通过持续监控 D+ 和 D- 数据线上的电压变化来检测设备。
    • 过程:设备内部在 D+(全速/高速设备)或 D-(低速设备)线上有一个约 1.5kΩ 的上拉电阻。当设备插入后,该电阻将对应的数据线电压拉高。主机检测到这一变化,从而知道有设备插入。
    • 速度识别:通过检测哪条数据线被拉高,主机可以初步判断设备的速度(低速或全速/高速)。高速设备首先以全速被识别,然后在后续握手过程中切换到高速模式。

阶段二:枚举

这是最核心的步骤。枚举是主机从设备那里获取所有必要信息(如设备类型、制造商、所需电源、通信协议等)的过程,并为其分配一个唯一的地址。

  1. 复位设备
    • 主机向该端口发送一个复位信号。设备在收到复位后,进入默认状态,并准备响应地址 0 的通信。
  2. 读取设备描述符
    • 主机向地址 0 发送请求,读取设备描述符的前 8 个字节。这 8 个字节包含了设备所需的最关键信息,特别是 bMaxPacketSize0(端点 0 的最大数据包大小),后续的通信将使用这个尺寸。
  3. 分配地址
    • 主机为新设备分配一个唯一的(1-127)地址,并通过 Set Address 请求发送给设备。设备之后的所有通信都将使用这个新地址。
  4. 读取完整设备信息
    • 主机使用新分配的地址,再次读取完整的设备描述符(18 字节)。
    • 主机接着读取配置描述符接口描述符端点描述符等。这些描述符详细说明了:
      • 设备有多少种配置(通常为 1)。
      • 每种配置下有多少个接口(例如,一个 USB 摄像头可能包含视频流接口和音频接口)。
      • 每个接口有多少个端点(例如,控制端点、数据输入端点、数据输出端点)。
      • 设备的类别(如 HID、大容量存储、音频等)。
  5. 加载并选择配置
    • 主机根据所有收集到的描述符信息,选择一个合适的配置(通常是配置 1)。然后向设备发送 Set Configuration 请求,激活该配置。
    • 至此,设备已完成配置,处于就绪状态。

阶段三:驱动加载

  1. 驱动匹配
    • 主机根据枚举过程中获取的设备信息(主要是设备类子类协议以及 Vendor ID 和 Product ID)来寻找合适的设备驱动程序。
    • 基于类:如果设备属于标准类别(如 HID、大容量存储),操作系统通常会使用内置的通用驱动程序。
    • 基于厂商/产品 ID:对于特殊设备,操作系统会在已安装的驱动程序中查找匹配的 VID 和 PID。如果找不到,可能会提示用户安装驱动程序。
  2. 驱动加载与初始化
    • 找到合适的驱动程序后,操作系统将其加载到内核(如果需要),并调用其初始化例程。驱动程序会识别到设备,并为其创建相应的设备节点(如在 Windows 中是设备对象,在 Linux 中是 /dev 下的文件)。

阶段四:正常工作与数据传输

  1. 应用程序访问
    • 此时,设备已对系统和应用程序可见。用户或应用程序可以通过操作系统提供的 API(如 CreateFileReadFile 在 Windows;openread 在 Linux)来访问设备。
  2. 数据传输
    • 驱动程序处理应用程序的请求,将其转换为遵循 USB 协议的事务
    • 事务通过四种类型的传输实现:
      • 控制传输:用于设备的枚举和配置,也可用于类特定请求。
      • 中断传输:用于小批量、需保证延迟的数据(如键盘、鼠标)。
      • 批量传输:用于大数据量、无时间要求的数据(如 U 盘、打印机)。
      • 等时传输:用于有恒定速率、实时性要求的数据(如摄像头、音箱)。
    • 主机控制器调度这些事务,通过 USB 总线将数据包发送到设备的特定端点上,完成应用程序所要求的功能。

USB 设备工作流程图

下图清晰地展示了上述流程:

总结

阶段核心任务主要通信对象
1. 连接检测上电、识别设备存在与速度主机控制器 & 集线器
2. 枚举获取设备信息、分配地址、设置配置主机 vs 设备的控制端点0
3. 驱动加载匹配并加载驱动程序、创建设备接口操作系统 & 驱动程序
4. 数据传输处理应用请求,进行实际数据通信驱动程序 vs 设备的所有端点

这个流程确保了 USB 设备即插即用(Plug-and-Play)的特性,使得用户无需关心复杂的硬件配置即可使用设备。

声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。