USB系统学习笔记 - 从概念到抓包解析

发布于:2025-09-09 ⋅ 阅读:(24) ⋅ 点赞:(0)

目录

1. USB基础概念概览

1.1 USB是什么

1.2 USB拓扑结构

2. USB层次结构详解

2.1 USB通信层次关系

2.2 数据传输的层次结构

3. USB枚举过程深入分析

3.1 枚举过程概述

3.2 详细枚举步骤

步骤1:设备连接检测

步骤2:设备复位

步骤3:获取设备描述符

步骤4:分配设备地址

步骤5:获取完整描述符信息

步骤6:设置配置

4. USB描述符体系

4.1 描述符层次结构

4.2 各类描述符详解

设备描述符 (Device Descriptor)

配置描述符 (Configuration Descriptor)

接口描述符 (Interface Descriptor)

端点描述符 (Endpoint Descriptor)

5. USB请求机制

5.1 标准请求类型

5.2 请求包格式 (Setup Packet)

6. USB传输类型详解

6.1 四种传输类型

控制传输 (Control Transfer)

批量传输 (Bulk Transfer)

中断传输 (Interrupt Transfer)

同步传输 (Isochronous Transfer)

7. USB事务和包结构

7.1 事务 (Transaction) 结构

7.2 包 (Packet) 类型

令牌包 (Token Packet)

数据包 (Data Packet)

握手包 (Handshake Packet)

7.3 包的域 (Field) 结构

8. 接口和端点概念

8.1 接口 (Interface)

8.2 端点 (Endpoint)

8.3 端点地址编码

9. 抓包数据解析要点

9.1 分析工具

9.2 抓包解析步骤

第一步:识别枚举过程

第二步:分析描述符内容

第三步:跟踪数据传输

9.3 常见抓包模式

枚举成功模式


1. USB基础概念概览

1.1 USB是什么

  • Universal Serial Bus - 通用串行总线
  • 用于连接计算机和外部设备的标准接口
  • 支持热插拔、即插即用
  • 主从架构:主机(Host)控制所有通信,设备(Device)响应请求

1.2 USB拓扑结构

Host Controller (主机控制器)
    └── Root Hub (根集线器)
        ├── Device 1
        ├── Hub 1
        │   ├── Device 2  
        │   └── Device 3
        └── Device 4

2. USB层次结构详解

2.1 USB通信层次关系

应用层    ←→    应用层
  ↕              ↕
USB驱动层 ←→    功能层
  ↕              ↕
USB系统层 ←→    设备层
  ↕              ↕
总线接口层 ←→   总线接口层
        (物理连接)

2.2 数据传输的层次结构

传输类型 (Transfer Type)
    └── 事务 (Transaction)
        └── 包 (Packet)
            └── 域 (Field)

3. USB枚举过程深入分析

3.1 枚举过程概述

USB枚举是主机识别和配置新插入设备的过程,包括以下步骤:

  1. 设备连接检测
  2. 复位和地址分配
  3. 描述符获取
  4. 配置选择
  5. 驱动程序加载

3.2 详细枚举步骤

步骤1:设备连接检测
  • 设备插入时,D+或D-线上的电平变化被Hub检测到
  • Hub通过状态变化端点通知主机
  • 主机查询Hub状态,确定哪个端口有设备连接
步骤2:设备复位
  • 主机对新设备端口执行复位操作
  • 复位后设备处于默认状态,地址为0
  • 设备准备响应主机的控制传输
步骤3:获取设备描述符
主机发送: GET_DESCRIPTOR (Device)
设备响应: 设备描述符数据
步骤4:分配设备地址
主机发送: SET_ADDRESS (新地址)
设备响应: ACK确认
设备切换到新地址
步骤5:获取完整描述符信息
  • 重新获取设备描述符(使用新地址)
  • 获取配置描述符
  • 获取字符串描述符(如果有)
步骤6:设置配置
主机发送: SET_CONFIGURATION (配置值)
设备响应: ACK确认
设备进入配置状态,可以正常工作

4. USB描述符体系

4.1 描述符层次结构

设备描述符 (Device Descriptor)
    └── 配置描述符 (Configuration Descriptor)
        └── 接口描述符 (Interface Descriptor)
            └── 端点描述符 (Endpoint Descriptor)

4.2 各类描述符详解

设备描述符 (Device Descriptor)
  • 作用:描述整个设备的基本信息
  • 关键字段
    • bcdUSB: USB版本
    • bDeviceClass: 设备类
    • idVendor: 厂商ID
    • idProduct: 产品ID
    • bNumConfigurations: 配置数量
配置描述符 (Configuration Descriptor)
  • 作用:描述设备的一种工作配置
  • 关键字段
    • wTotalLength: 整个配置的总长度
    • bNumInterfaces: 接口数量
    • bMaxPower: 最大功耗
接口描述符 (Interface Descriptor)
  • 作用:描述设备的一个功能接口
  • 关键字段
    • bInterfaceClass: 接口类
    • bNumEndpoints: 端点数量
    • bAlternateSetting: 备用设置
端点描述符 (Endpoint Descriptor)
  • 作用:描述数据传输的端点
  • 关键字段
    • bEndpointAddress: 端点地址和方向
    • bmAttributes: 传输类型
    • wMaxPacketSize: 最大包大小

5. USB请求机制

5.1 标准请求类型

  • GET_DESCRIPTOR: 获取描述符
  • SET_ADDRESS: 设置设备地址
  • SET_CONFIGURATION: 设置配置
  • GET_STATUS: 获取状态
  • CLEAR_FEATURE: 清除特性
  • SET_FEATURE: 设置特性

5.2 请求包格式 (Setup Packet)

字节0: bmRequestType (请求类型和方向)
字节1: bRequest (具体请求)
字节2-3: wValue (请求参数)
字节4-5: wIndex (索引或偏移)
字节6-7: wLength (数据阶段长度)

6. USB传输类型详解

6.1 四种传输类型

控制传输 (Control Transfer)
  • 用途:配置设备、发送命令
  • 特点:可靠性高,有错误检测和重传
  • 阶段:Setup阶段 → Data阶段 → Status阶段
批量传输 (Bulk Transfer)
  • 用途:大量数据传输(如文件传输)
  • 特点:可靠但不保证时间
  • 应用:U盘、打印机等
中断传输 (Interrupt Transfer)
  • 用途:小量数据的定期传输
  • 特点:保证最大延迟时间
  • 应用:键盘、鼠标等HID设备
同步传输 (Isochronous Transfer)
  • 用途:实时数据流
  • 特点:保证带宽但不纠错
  • 应用:音频、视频设备

7. USB事务和包结构

7.1 事务 (Transaction) 结构

一个事务包含:

令牌包 (Token Packet)
    ↓
数据包 (Data Packet) [可选]
    ↓
握手包 (Handshake Packet)

7.2 包 (Packet) 类型

令牌包 (Token Packet)
  • IN: 主机请求设备发送数据
  • OUT: 主机向设备发送数据
  • SETUP: 控制传输的建立阶段
数据包 (Data Packet)
  • DATA0/DATA1: 数据切换,用于检测重复
握手包 (Handshake Packet)
  • ACK: 确认接收成功
  • NAK: 暂时无法处理
  • STALL: 端点停止或不支持请求

7.3 包的域 (Field) 结构

每个包都包含以下域:

SYNC域: 同步信号 (8位)
PID域: 包标识符 (8位)
地址域: 设备地址 (7位) [令牌包]
端点域: 端点号 (4位) [令牌包]
数据域: 实际数据 [数据包]
CRC域: 循环冗余检验 (5/16位)
EOP域: 包结束标志

8. 接口和端点概念

8.1 接口 (Interface)

  • 定义:设备的一个功能单元
  • 特点
    • 一个设备可以有多个接口
    • 每个接口可以独立工作
    • 接口有类代码标识功能类型

8.2 端点 (Endpoint)

  • 定义:数据传输的源或目标
  • 特点
    • 每个端点有唯一地址(设备地址+端点号)
    • 端点0是控制端点,必须存在
    • 端点有方向性:IN(设备到主机)、OUT(主机到设备)

8.3 端点地址编码

位7: 方向 (0=OUT, 1=IN)
位6-4: 保留 (000)
位3-0: 端点号 (0-15)

9. 抓包数据解析要点

9.1 分析工具

  • Wireshark: 通用网络协议分析器
  • USB Analyzer: 专用USB协议分析器
  • Bus Hound: Windows下的总线监控工具

9.2 抓包解析步骤

第一步:识别枚举过程

寻找以下关键序列:

1. Hub状态变化通知
2. Port Reset请求
3. GET_DESCRIPTOR (Device)
4. SET_ADDRESS
5. GET_DESCRIPTOR (Configuration)
6. SET_CONFIGURATION
第二步:分析描述符内容
  • 提取各级描述符的关键字段
  • 构建设备的逻辑结构图
  • 理解设备的功能和能力
第三步:跟踪数据传输
  • 识别传输类型
  • 分析事务序列
  • 检查错误处理机制

9.3 常见抓包模式

枚举成功模式
SETUP -> DATA0 -> AC

网站公告

今日签到

点亮在社区的每一天
去签到