深入学习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软件层面组织层次的主要内容,如果未能解决你的问题,请参考以下文章