深入学习USBusb软件层面组织层次

Posted 奇妙之二进制

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了深入学习USBusb软件层面组织层次相关的知识,希望对你有一定的参考价值。

文章目录

1 逻辑组织结构

在USB设备的逻辑组织中,包含设备、配置、接口和端点4个层次。

1.1 设备

设备可以作为主机,也可以作为从机。

设备通常有一个或多个配置,配置通常有一个或多个接口,接口有零或多个端点。

1.2 配置

每个USB设备都可以包含一个或多个配置,不同的配置使设备表现出不同的功能组合。主机可以控制设备选择哪个具体的配置,但是设备当前只能选择一个配置。

1.3 接口

配置由多个接口组成。

在USB协议中,接口代表一个基本的功能,一个功能复杂的USB设备可以具有多个接口,而接口是端点的汇集。

1.4 端点

USB设备中的唯一可寻址的部分是设备端点,端点的作用类似于寄存器。

每个端点都有一定的属性,其中包括传输方式、总线访问频率、带宽、端点号和数据包的最大容量等。

每个端点在设备内部有唯一的端点号,这个端点号是在设备设计时给定的。主机和设备的通信最终都作用于设备上的各个端点。每个端点所支持的操作都是单向的,要么只读,要么只写。

一个USB端点只能向一个方向传输数据(从主机到设备(称为输出端点)或者从设备到主机(称为输入端点))。端点可被看作一个单向的管道。

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

虽然有16个端点,但一般咱们只用到3个,以下:

1)、EP0:作传输配置和控制信息;

2)、EP1:作数据输入IN_EP;

3)、EP2:作数据输出OUT_EP。

注意:除了端点0,其他的端点在设备配置以前不能与主机通讯,只有向主机报告这些端点的特性并被确认后才能被激活。

1 端点类型

一个 USB 端点有 4 种不同类型, 分别具有不同的数据传送方式
控制CONTROL

控制端点被用来控制对 USB 设备的不同部分访问. 通常用作配置设备、获取设备信息、发送命令到设备或获取设备状态报告。这些端点通常较小。每个 USB 设备都有一个控制端点称为"端点 0", 被 USB 核心用来在插入时配置设备。USB协议保证总有足够的带宽留给控制端点传送数据到设备.
中断INTERRUPT
每当 USB 主机向设备请求数据时,中断端点以固定的速率传送小量的数据。此为USB 键盘和鼠标的主要的数据传送方法。它还用以传送数据到 USB 设备来控制设备。通常不用来传送大量数据。USB协议保证总有足够的带宽留给中断端点传送数据到设备.

批量BULK
批量端点用以传送大量数据。这些端点常比中断端点大得多. 它们普遍用于不能有任何数据丢失的数据。USB 协议不保证传输在特定时间范围内完成。如果总线上没有足够的空间来发送整个BULK包,它被分为多个包进行传输。这些端点普遍用于打印机、USB Mass Storage和USB网络设备上。

等时ISOCHRONOUS

等时端点也批量传送大量数据, 但是这个数据不被保证能送达。这些端点用在可以处理数据丢失的设备中,并且更多依赖于保持持续的数据流。如音频和视频设备等等。
控制和批量端点用于异步数据传送,而中断和同步端点是周期性的。这意味着这些端点被设置来在固定的时间连续传送数据,USB 核心为它们保留了相应的带宽。

2 端点的特性

一个端点的特性决定了它与客户软件进行传送的类型。一个端点具备如下一些特性:

·端点的总线访问频率要求

·端点的总线延迟要求

·端点的带宽要求

·端点的端点号

·对错误处理的要求

·端点能接收或发送的包的最大长度

·端点的传送类型

·端点与主机的数据传送方向

这些都在端点描述符里描述。

2 描述符

在每一个USB设备内部,包含了固定格式的数据,通过这些数据,USB主机就可以获取USB设备的类型、生产厂商等信息。这些固定格式的数据,我们就称之为USB描述符。标准的USB设备有5种USB描述符:设备描述符,配置描述符,接口描述符,端点描述符,字符串描述符。

在linux上使用lsusb -v命令可以查看这些描述符信息。

Bus 002 Device 002: ID 05e3:0620 Genesys Logic, Inc.  指明哪条bus,哪个设备
Device Descriptor:         设备描述符
  bLength                18
  bDescriptorType         1
  bcdUSB               3.20
  bDeviceClass            9 Hub 
  bDeviceSubClass         0 Unused
  bDeviceProtocol         3 
  bMaxPacketSize0         9
  idVendor           0x05e3 Genesys Logic, Inc.
  idProduct          0x0620 
  bcdDevice           93.07
  iManufacturer           1 GenesysLogic
  iProduct                2 USB3.2 Hub
  iSerial                 0 
  bNumConfigurations      1
  Configuration Descriptor: 配置描述符
    bLength                 9
    bDescriptorType         2
    wTotalLength           31
    bNumInterfaces          1
    bConfigurationValue     1
    iConfiguration          0 
    bmAttributes         0xe0
      Self Powered
      Remote Wakeup
    MaxPower                0mA
    Interface Descriptor:  接口描述符
      bLength                 9
      bDescriptorType         4
      bInterfaceNumber        0
      bAlternateSetting       0
      bNumEndpoints           1
      bInterfaceClass         9 Hub
      bInterfaceSubClass      0 Unused
      bInterfaceProtocol      0 Full speed (or root) hub
      iInterface              0 
      Endpoint Descriptor: 端点描述符
        bLength                 7
        bDescriptorType         5
        bEndpointAddress     0x83  EP 3 IN
        bmAttributes           19
          Transfer Type            Interrupt
          Synch Type               None
          Usage Type               Feedback
        wMaxPacketSize     0x0002  1x 2 bytes
        bInterval               8
        bMaxBurst               0
Hub Descriptor:          
  bLength               1
  bDescriptorType       4
  nNbrPorts            16
  wHubCharacteristic 0x0140
    Ganged power switching
    Ganged overcurrent protection
  bPwrOn2PwrGood        4 * 2 milli seconds
  bHubContrCurrent     64 milli Ampere
  bHubDecLat          0.64 micro seconds
  wHubDelay            96 nano seconds
  DeviceRemovable    0x00 0x00 0x00
 Hub Port Status:
   Port 1: 0000.02a0 lowspeed
   Port 2: 0000.02a0 lowspeed
   Port 3: 0000.02a0 lowspeed
   Port 4: 0000.02a0 lowspeed
   Port 5: 0000.02a0 lowspeed
   Port 6: 0000.02a0 lowspeed
   Port 7: 0000.02a0 lowspeed
   Port 8: 0000.02a0 lowspeed
   Port 9: 0000.02a0 lowspeed
   Port 10: 0000.02a0 lowspeed
   Port 11: 0000.02a0 lowspeed
   Port 12: 0000.02a0 lowspeed
   Port 13: 0000.02a0 lowspeed
   Port 14: 0000.02a0 lowspeed
   Port 15: 0000.02a0 lowspeed
   Port 16: 0000.02a0 lowspeed
Binary Object Store Descriptor:
  bLength                 5
  bDescriptorType        15
  wTotalLength           42
  bNumDeviceCaps          3
  USB 2.0 Extension Device Capability:
    bLength                 7
    bDescriptorType        16
    bDevCapabilityType      2
    bmAttributes   0x00000006
      Link Power Management (LPM) Supported
  SuperSpeed USB Device Capability:
    bLength                10
    bDescriptorType        16
    bDevCapabilityType      3
    bmAttributes         0x00
    wSpeedsSupported   0x000e
      Device can operate at Full Speed (12Mbps)
      Device can operate at High Speed (480Mbps)
      Device can operate at SuperSpeed (5Gbps)
    bFunctionalitySupport   1
      Lowest fully-functional device speed is Full Speed (12Mbps)
    bU1DevExitLat           8 micro seconds
    bU2DevExitLat         190 micro seconds
  Container ID Device Capability:
    bLength                20
    bDescriptorType        16
    bDevCapabilityType      4
    bReserved               0
    ContainerID             e74a66f7-5111-49c4-a5eb-eeb2b5149329
Device Status:     0x000d
  Self Powered
  U1 Enabled
  U2 Enabled

2.1 设备描述符

bLength : 描述符长度,固定为0x12。
bDescriptorType : 设备描述符类型,固定为0x01。
bcdUSB : USB 规范发布号。表示了本设备能适用于那种协议,如2.0=0200
bDeviceClass : 类型代码。
bDeviceSubClass : 子类型代码。
bDeviceProtocol : 协议代码。
bMaxPacketSize0 : 端点0最大分组大小。
idVendor : 供应商ID。
idProduct : 产品ID(由厂商分配)。
bcdDevice : 设备出产编码,由厂家自行设置。
iManufacturer : 厂商描述符字符串索引.索引到对应的字符串描述符。
iProduct : :产品描述符字符串索引。
iSerialNumber : 设备序列号字符串索引。
bNumConfigurations : 可能的配置数。

2.2 配置描述符

bLength : 描述符长度,固定为0x09。
bDescriptorType : 配置描述符类型,固定为0x02。
wTotalLength : 返回整个数据的长度,指此配置返回的配置描述符,接口描述符以及端点描述符的全部大小。
bNumInterfaces : 配置所支持的接口数,指该配置配备的接口数量,也表示该配置下接口描述符数量。
bConfigurationValue : 作为Set Configuration的一个参数选择配置值。
iConfiguration : 用于描述该配置字符串描述符的索引。
bmAttributes : 供电模式选择。Bit4-0保留,D7:总线供电,D6:自供电,D5:远程唤醒.
MaxPower : 总线供电的USB设备的最大消耗电流,以2mA为单位。

2.3 接口描述符

bLength : 描述符长度,固定为0x09。
bDescriptorType : 接口描述符类型,固定为0x04。
bInterfaceNumber: 该接口的编号。
bAlternateSetting : 用于为上一个字段选择可供替换的设置。
bNumEndpoint : 使用的端点数目,端点0除外。
bInterfaceClass : 类型代码(由USB组织分配)。
bInterfaceSunClass : 子类型代码(由USB组织分配)。
bInterfaceProtocol : 协议代码(由USB组织分配)。
iInterface : 字符串描述符的索引。

2.4 端点描述符

bLength : 描述符大小,固定为0x07。
bDescriptorType : 接口描述符类型,固定为0x05。
bEndpointType : USB设备的端点地址。Bit7,方向,对于控制端点可以忽略,1/0:IN/OUT。Bit6-4,保留。BIt3-0:端点号.
bmAttributes : 端点属性,Bit7-2,保留。BIt1-0:00控制,01同步,02批量,03中断。
wMaxPacketSize : 本端点接收或发送的最大信息包大小。
bInterval : 轮询数据传送端点的时间间隔.对于批量传送和控制传送的端点忽略.对于同步传送的端点,必须为1,对于中断传送的端点,范围为1-255。

以上是关于深入学习USBusb软件层面组织层次的主要内容,如果未能解决你的问题,请参考以下文章

[项目管理-33]:需求管理与范围管理的异同

SAR:超高场磁共振成像的最大安全隐患

杂记

深入了解Java--1 绪论

开关电源学习 MP2315S简介

开关电源学习 MP2315S简介