USB声卡驱动(二):USB音频设备描述符

USB声卡驱动(二)USB音频设备描述符

本篇笔记,分两部分,第一部分,是基本知识的记录。第二部分是一个实际的例子。

一.基本知识

一个音频设备(Audio Device)含有多个音频功能(Audio Function),而音频功能(Audio Function)内部还有各种各样的模块(Unit)和输入输出终端(Terminal)。这些模块(Unit)提供各种各样的功能,比如静音控制,音量调整等等。输入输出终端(Terminal)用于传输数据流,比如原始的PCM数据,或者经过AC-3编码的数据,或者MIDI数据

那么操作音频功能(Audio Function)就分为两部分:一个是操作Unit,一个是操作Terminal

操作Unit通常是出于控制要求,把这部分操作归类为Audio Control.操作Terminal是处于数据传输的要求,把这部分操作归类为Audio Stream.那么前者的接口被称为Audio Control Interface.后者的接口被称为Audio Stream Interface.这里提到了接口,而本笔记,又是USB相关的,所以,这两个接口都是指的USB接口。所有的这些接口统称为Audio Interface Collection.即操作音频功能(Audio Function)是通过Audio Interfacae Collection.

Audio Interface Collection在USB规范中即为Audio Interface Class.上面提到,Audio Interface Collection有两部分组成,一部分为Audio Control Interface.另外一部分为Audio Stream Interface.而后者还包括MIDI Stream Interface.所以Audio Interface SubClass即有三种,分别为:Audio Control Interface SubClass,Audio Streaming Interface SubClass,Midi Streaming Interface SubClass.

在USB的世界中,除了,Class,SubClass以外,还有Protocol.在USB音频世界中,Protocl没有被使用,因此该值为0x00.

  1. Audio Interface Class的值为:0x01,表示AUDIO
  2. Audio Interface SubClass的值为:
    SUBCLASS_UNDEFINED:0x00;
    AUDIOCONTROL:0x01;
    AUDIOSTREAMING:0x02;
    MIDISTREAMING:0x03
  3. Audio Interface Protocol的值:0x00

在USB的世界中,真正做沟通的是EndPoint,因此,Audio Function也需要和EndPoint相关联.

AudioControl中的EndPoint

Audio Control可以有下面的端点:

  1. 一个用于操作Unit或者Terminal的控制端点,这个端点是强制要求的,且默认为端点0
  2. 一个可选的中断端点,该端点可以报告Audio Function状态等

AudioStream中的EndPoint

Audio Streaming 接口用于数据传输,它是可选的端口。注意,每个Audio Streaming 接口最多只有一个等时数据端点。在某些情况下,等时数据端点还伴有一个对应的等时同步端点。

另外,对于等时数据端点,没必要直接映射到逻辑通道上。比如一个Audio Function它有左右两个声道,但是可以只有一个等时数据端点。在这个端点上面传输左右两个声道的数据。

来一个实际的例子

在上面了解了基本的Audio Function,以及一些相应的术语之后,来看一个实际的例子,在这个例子中,将会有对应的描述符的详细笔记。

USB 电话

产品描述

这是一个USB电话,这个电话含有16bit-8KHz的输入输出。它有手持电话筒和电话线的输入输出连接器。这个电话还含有USB接口,插入主机之后,可以使用主机直接和电话进行通话。手持电话筒和电话线上面的数据是模拟信号,而USB接口传输的是数字信号,因此里面USB接口对应的输入输出Terminal需要有模数转换模块。

整个USB电话的拓扑图如下:

在这里插入图片描述

描述符的层级

这个电话设备,包含一个Audio Control interface(0),和两个Audio Streaming interface(1和2)(因为有输入和输出)。

Audio Streaming interface都有两个可选的设置。第一个可选设置(可选设置0)占用0带宽,用于释放USB资源。第二个可选设置(可选设置1)是对应接口的操作部分,它有一个等时数据端点。下图展示了整个层级关系。

在这里插入图片描述

描述符详解

设备描述符
offset字段大小说明
0bLength10x12描述符大小
1bDescriptorType10x01DEVICE描述符
2bcdUSB20x0100USB spc当前版本
4bDeviceClass10x00在Interface层定义
5bDeviceSubClass10x00未使用
6bDeviceProtocol10x00未使用
7bMaxPacketSize010x088字节
8idVendor20xxxxxVendor ID
10idProduct20xxxxxProduct ID
12bcdDevice20xxxxxDevice Release
14iManufacturer10x01字符串描述符索引号
15iProduct10x02字符串描述符索引号
16iSerialNumber10x00未使用
17bNumConfiguration10x01一个配置
配置描述符
offset字段大小说明
0bLength10x09描述符大小
1bDescriptorType10x02CONFIGURATION描述符
2wTotalLength20x00xx整个配置块长度
4bNumInterfaces10x03三个接口
5bConfigurationValue10x01本配置的ID
6iConfiguration10x00未使用
7bmAttributes10x06自给电,远程唤醒
8MaxPower10x00Not applicable
Audio Control Interface 描述符

标准的Audio Control Interface 描述符

Audio Control Interface没有使用专用的端点,而是使用了默认的端点0来操作。并且该接口,没有中断端点。

offset字段大小说明
0bLength10x09描述符大小
1bDescriptorType10x04INTERFACE描述符
2bInterfaceNumber10x00本接口索引
3bAlternateSetting10x00本设置索引
4bNumEndpoints10x000端点
5bInterfaceClass10x01AUDIO
6bInterfaceSubclass10x01AUDIO_CONTROL
7bInterfaceProtocol10x00未使用
8iInterface10x00未使用

音频相关的描述符

音频相关的描述符,需要有一个header作为一些统一的描述,如下

offset字段大小说明
0bLength10x0A描述符大小
1bDescriptorType10x24CS_INTERFACE描述符
2bDescriptorSubtype10x01HEADER子类型
3bcdADC20x0100Audio Class 规范1.0
5wTotalLength20x0064Audio Class相关描述总大小
7bInCollection10x02streaming接口数
8baInterfaceNr(1)10x01AudioStreaming接口1属于这个控制接口
8baInterfaceNr(2)10x02AudioStreaming接口2属于这个控制接口
7bInterfaceProtocol10x00未使用
8iInterface10x00未使用

输入Terminal描述符(ID1)

这个描述符代表了模拟电话线的输入。它只有一个声道,且没有位置信息。
这是双向Terminal的输入部分,因此有一个相关的输出Terminal(ID4)

offset字段大小说明
0bLength10x0C描述符大小
1bDescriptorType10x24CS_INTERFACE描述符
2bDescriptorSubtype10x02INPUT_TERMINAL
3bTerminalID10x01本Termianl ID
4wTerminalType20x0501电话线In
6bAssocTerminal10x04对应电话线OUT terminal
7bNrChannels10x011通道
8wChannelConfig20x0000单声道没有位需要被设置
10iChannelNames10x00未使用
11iTerminal10x00未使用

输入Terminal描述符(ID2)

这个描述符是手持电话筒的输入麦克风。它只有单声道,且无位置信息。同样的它还有一个关联的输出Terminal(ID5)

offset字段大小说明
0bLength10x0C描述符大小
1bDescriptorType10x24CS_INTERFACE描述符
2bDescriptorSubtype10x02INPUT_TERMINAL
3bTerminalID10x02本Termianl ID
4wTerminalType20x0401手持电话IN
6bAssocTerminal10x05对应手持电话的OUT terminal
7bNrChannels10x011通道
8wChannelConfig20x0000单声道没有位需要被设置
10iChannelNames10x00未使用
11iTerminal10x04未使用

输入Terminal描述符(ID3)

这个描述符,代表了从主机到电话的USB流。同样的只有单声道,且无位置信息。它也有一个关联的输出Terminal (ID6)

offset字段大小说明
0bLength10x0C描述符大小
1bDescriptorType10x24CS_INTERFACE描述符
2bDescriptorSubtype10x02INPUT_TERMINAL
3bTerminalID10x03本Termianl ID
4wTerminalType20x0101USB流IN
6bAssocTerminal10x06对USB接口的OUT terminal
7bNrChannels10x011通道
8wChannelConfig20x0000单声道没有位需要被设置
10iChannelNames10x00未使用
11iTerminal10x05未使用

输入Terminal描述符(ID4)

这个描述符,代表了模拟电话线的输出端。

offset字段大小说明
0bLength10x09描述符大小
1bDescriptorType10x24CS_INTERFACE描述符
2bDescriptorSubtype10x03OUTPUT_TERMINAL
3bTerminalID10x04本Termianl ID
4wTerminalType20x0501电话线OUT
6bAssocTerminal10x01与连电话线IN相关
7bSourceID10x07源自电话线选择器单元
8iTerminal10x06未使用

输入Terminal描述符(ID5)

这个描述符,代表了手持电话筒的听筒

offset字段大小说明
0bLength10x09描述符大小
1bDescriptorType10x24CS_INTERFACE描述符
2bDescriptorSubtype10x03OUTPUT_TERMINAL
3bTerminalID10x05本Termianl ID
4wTerminalType20x0401手持电话OUT
6bAssocTerminal10x01与手持电话IN相关
7bSourceID10x08源自手持电话选择器单元
8iTerminal10x00未使用

输入Terminal描述符(ID6)

这个描述符,代表了到主机的USB流。

offset字段大小说明
0bLength10x09描述符大小
1bDescriptorType10x24CS_INTERFACE描述符
2bDescriptorSubtype10x03OUTPUT_TERMINAL
3bTerminalID10x06本Termianl ID
4wTerminalType20x0101USB 流OUT
6bAssocTerminal10x03与USB流IN相关
7bSourceID10x09源自USB选择器单元
8iTerminal10x00未使用

选择器单元描述符(ID7)

这个描述符,表示连接到电话线OUT终端的选择器单元,他也可以选中手持电话IN或者USB IN

offset字段大小说明
0bLength10x09描述符大小
1bDescriptorType10x24CS_INTERFACE描述符
2bDescriptorSubtype10x05SELECTOR_UNIT
3bTerminalID10x07本Unit ID
4bNrInPins20x02输入引脚数
6baSourceID(1)10x02源自手持电话IN
6baSourceID(2)10x03源自USB 流IN
8iSelector10x00未使用

选择器单元描述符(ID8)

这个描述符,表示连接到手持电话OUT终端的选择器单元,他也可以选中电话线IN或者USB IN

offset字段大小说明
0bLength10x09描述符大小
1bDescriptorType10x24CS_INTERFACE描述符
2bDescriptorSubtype10x05SELECTOR_UNIT
3bTerminalID10x08本Unit ID
4bNrInPins20x02输入引脚数
6baSourceID(1)10x01源自电话线IN
6baSourceID(2)10x03源自USB 流IN
8iSelector10x00未使用

选择器单元描述符(ID9)

这个描述符,表示连接到USB流OUT终端的选择器单元,他也可以选中手持电话IN或者电话线IN

offset字段大小说明
0bLength10x09描述符大小
1bDescriptorType10x24CS_INTERFACE描述符
2bDescriptorSubtype10x05SELECTOR_UNIT
3bTerminalID10x09本Unit ID
4bNrInPins20x02输入引脚数
6baSourceID(1)10x01源电话线IN
7baSourceID(2)10x02源自手持电话IN
8iSelector10x00未使用

Audio Streaming 接口1描述符

该接口用于将主机数据,传输到usb电话中。该接口有两个可选设置(可选设置0),第一个为0带宽设置,用于释放USB资源;第二个(可选设置1)用于正常的操作。

可选设置0

标准接口描述符

offset字段大小说明
0bLength10x09描述符大小
1bDescriptorType10x04INTERFACE描述符
2bInterfaceNumber10x01本接口索引
3bAlternateSetting10x00本设置索引
4bNumEndpoints10x000端点
5bInterfaceClass10x01AUDIO
6bInterfaceSubclass10x02AUDIO_STREAMING
7bInterfaceProtocol10x00未使用
7iInterface10x00未使用

可选设置1

标准AS接口描述符

offset字段大小说明
0bLength10x09描述符大小
1bDescriptorType10x04INTERFACE描述符
2bInterfaceNumber10x01本接口索引
3bAlternateSetting10x01本设置索引
4bNumEndpoints10x011个端点
5bInterfaceClass10x01AUDIO
6bInterfaceSubclass10x02AUDIO_STREAMING
7bInterfaceProtocol10x00未使用
8iInterface10x00未使用

音频相关描述符

offset字段大小说明
0bLength10x07描述符大小
1bDescriptorType10x24CS_INTERFACE 描述符
2bDescriptorSubtype10x01GENERAL
3bTerminalLink10x03链接到USB流IN
4bDelay10x01接口延迟
5wFormatTag20x0001PCM格式

Type I Format Type Descriptor

offset字段大小说明
0bLength10x0B描述符大小
1bDescriptorType10x24CS_INTERFACE描述符
2bDescriptorSubtype10x02FORMAT_TYPE
3bFormatType10x01FORMAT_TYPE_I
4bNrChannels10x011个通道
5bSubFrameSize10x02两个字节
6bBitResolution10x01016位
7bSamFreqType10x01一个采样频率
8tSamFreq30x01F408000Hz

标准端点描述符

offset字段大小说明
0bLength10x09描述符大小
1bDescriptorType10x05ENDPOINT描述符
2bEndpointAddress10x01OUT 端点1
3bmAttributes10x0B同步,等时传输
4wMaxPacketSize20x001016 bytes 每包
6bInterval10x01每帧一包
7bRefresh10x00未使用
8bSynchAddress10x00未使用

音频相关等时数据端点描述符

offset字段大小说明
0bLength10x07描述符大小
1bDescriptorType10x25CS_ENDPOINT描述符
2bDescriptorSubtype10x01GENERAL
3bmAttributes10x00无频率控制,无pitch控制
4bLockDelayUnits10x00未使用
5wLockDelay20x0000未使用

Audio Streaming 接口2描述符

该接口用于将数据传输到主机上。同样有两个可选设置,第一个是0带宽设置,第二个是正常使用设置。

0带宽可选设置

标准接口描述符

offset字段大小说明
0bLength10x09描述符大小
1bDescriptorType10x04INTERFACE描述符
2bInterfaceNumber10x01本接口索引
3bAlternateSetting10x00本设置索引
4bNumEndpoints10x000端点
5bInterfaceClass10x01AUDIO
6bInterfaceSubclass10x02AUDIO_STREAMING
7bInterfaceProtocol10x00未使用
7iInterface10x00未使用

可选设置1

标准AS接口描述符

offset字段大小说明
0bLength10x09描述符大小
1bDescriptorType10x04INTERFACE描述符
2bInterfaceNumber10x01本接口索引
3bAlternateSetting10x01本设置索引
4bNumEndpoints10x011个端点
5bInterfaceClass10x01AUDIO
6bInterfaceSubclass10x02AUDIO_STREAMING
7bInterfaceProtocol10x00未使用
8iInterface10x00未使用

音频相关AS接口描述符

offset字段大小说明
0bLength10x07描述符大小
1bDescriptorType10x24CS_INTERFACE 描述符
2bDescriptorSubtype10x01GENERAL
3bTerminalLink10x06链接到USB流OUT
4bDelay10x01接口延迟
5wFormatTag20x0001PCM格式

Type I format type descriptor

offset字段大小说明
0bLength10x0B描述符大小
1bDescriptorType10x24CS_INTERFACE描述符
2bDescriptorSubtype10x02FORMAT_TYPE
3bFormatType10x01FORMAT_TYPE_I
4bNrChannels10x011个通道
5bSubFrameSize10x02两个字节
6bBitResolution10x01016位
7bSamFreqType10x01一个采样频率
8tSamFreq30x01F408000Hz

标准端点描述符

offset字段大小说明
0bLength10x09描述符大小
1bDescriptorType10x05ENDPOINT描述符
2bEndpointAddress10x81IN 端点1
3bmAttributes10x0B同步,等时传输
4wMaxPacketSize20x001016 bytes 每包
6bInterval10x01每帧一包
7bRefresh10x00未使用
8bSynchAddress10x00未使用

音频相关等时数据端点描述符

offset字段大小说明
0bLength10x07描述符大小
1bDescriptorType10x25CS_ENDPOINT描述符
2bDescriptorSubtype10x01GENERAL
3bmAttributes10x00无频率控制,无pitch控制
4bLockDelayUnits10x00未使用
5wLockDelay20x0000未使用

字符串描述符

Manufacturer String Descriptor

offset字段大小说明
0bLength10x18描述符大小
1bDescriptorType10x03STRING描述符
2bString10x0054
0x0048
0x0045
0x0020
0x0043
0x004F
0x004D
0x0050
0x0041
0x004E
0x0059
“THE COMPANY”

Product String Descriptor

offset字段大小说明
0bLength10x16描述符大小
1bDescriptorType10x03STRING描述符
2bString10x0054
0x0065
0x006C
0x0065
0x0070
0x0068
0x006F
0x006E
0x0065
“THE COMPANY”

上面是关于,这个USB电话产品的完整的描述符介绍。

现在已经知道了,标准的USB,和标准的USB AUDIO的数据组织形式。接下来就是看看,Linux内核中,怎么操作,USB以及怎么操作USB Audio了。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值