简单了解usb描述符

usb描述符

  • 1. 设备/配置/接口/端点
  • 2、描述符
    • 2.1 设备描述符
    • 2.2 配置描述符
    • 2.3 接口描述符
    • 2.4 端点描述符

参考文章:https://zhuanlan.zhihu.com/p/656339393

1. 设备/配置/接口/端点

在了解 “描述符” 之前,先来看一下设备、配置、接口、端点是些什么鬼东西,这几个概念经常会在USB的相关文档中看到。

设备 (Device) :就是一个实实在在的USB设备,比如USB鼠标,U盘。

配置 (Configuration):一个USB设备可以有多种配置。比如4G上网卡就有2种配置:U盘、上网卡。第1次把4G上网卡插入电脑时,它是一个U盘,可以安装里面的程序。装好程序后,把它再次插入电脑,它就是一个上网卡。驱动程序可以选择让它工作于哪种配置,同一时间只能有一种配置有效。大多数的USB设备只有一种配置。

接口 (Interface) :每个配置下可以有多个接口,这个接口不是硬件上的接口,可以把这个接口理解为功能,一个接口就代表该设备当前支持的一种功能。

端点 (Endpoint) :每个接口可以有多个端点。USB主机和设备就是通过端点进行数据交互的。每个端点地址对应一个方向,例如端点2-IN,端点2-OUT,这两个含义完全不同。

一个具体的端点只能属于四种传输模式中的一种,四种传输模式可以参考上一篇文章 USB (4) – USB传输类型,通常把工作在什么模式下的端点就叫做什么端点,比如控制端点,批量端点等。

需要注意其中的一个特殊端点–端点0,每个USB设备必须要有一个端点0,它一上电就存在并且可用,其作用是对设备枚举和对设备进行一些基本的控制功能,端点0也被称为控制端点。端点0与其他的端点还有一个不同之处在于端点0的数据传输方向是双向的,即端点0既可以给主机发送数据,也可以接收主机发送过来的数据,而其他端点均为单向。除了端点0,其余的端点在设备配置之前不能与主机通信。

2、描述符

所谓描述符在C语言里面就是一个结构体或数组,使用描述符来说明当前的设备有哪些特征。所以需要在设备端实现对应的描述符,主机在枚举此设备的时候,才能根据设备实现的描述符去确定到底是什么样的设备。前面提到的设备、配置、接口、端点都有对应的描述符来描述,如下图所示:

简单了解usb描述符_第1张图片
USB描述符有设备描述符 (Device Descriptor) ,配置描述符 (Configuration Descriptor) ,接口描述符 (Interface Descriptor) ,端点描述符 (Endpoint Descriptor) ,此外,还有字符串描述符 (String Descriptor),HID设备有HID描述符、报告描述符等。

  • 一个USB设备有1个设备描述符;
  • 一个USB设备有1个或多个配置描述符;
  • 一个USB配置有1个或多个接口描述符;
  • 一个USB接口有0个或多个端点描述符(不包括端点0)

2.1 设备描述符

一个USB设备只有一个设备描述符,设备描述符为主机提供了许多信息,如设备满足的USB规范,设备支持的协议,供应商标识、产品标识等等。设备描述符主要记录的信息如下图所示(截图来自《usb_20.pdf》):
简单了解usb描述符_第2张图片
为了看起来更顺眼,把它翻译为中文如下:
简单了解usb描述符_第3张图片

2.2 配置描述符

大部分USB设备只有一种配置,每种配置都有一个配置描述符,该描述符会提供特定设备配置的信息,如接口数量、 设备由总线供电还是自供电、 设备能否启动一个远程唤醒以及设备功耗。 配置描述符记录的信息如下图所示:
简单了解usb描述符_第4张图片
简单了解usb描述符_第5张图片

2.3 接口描述符

每个接口都有一个接口描述符,接口描述符会记录端点数量等信息,接口描述符中也包含USB类别的信息。接口描述符主要记录的信息如下图所示:
简单了解usb描述符_第6张图片
简单了解usb描述符_第7张图片

2.4 端点描述符

每一个端点都有一个端点描述符,端点描述符会提供端点的方向、传输类型和数据包的最大尺寸 等信息。端点描述符主要记录的信息如下图所示:
简单了解usb描述符_第8张图片
简单了解usb描述符_第9张图片
每个端点描述符都规定了该端点所支持的最大数据包长 (wMaxPacketSize),主机每次发送数据包,都不能超过端点的最大包长,各种端点的最大包长如下表:
简单了解usb描述符_第10张图片

你可能感兴趣的:(usb,驱动开发)