UAC规范(USB音频)
+ -

USB音频设备UAC数据同步方式

2021-12-19 2716 0

对于USB扬声器,USB主机负载发送音频数据,而USB设备负责接收来自主机发送过来的数据,数据的传输方式采用的是同步方式。由于USB主机和USB设备时钟同步的问题,会有一定的偏差,长时间的累积会导致主机和设备之间数据的不同步。如USB主机可能会发送数据相对USB设备播放数据过快,导致USB设备来不及接收数据,会产生噪音;也可能由于USB主机发送数据过慢,导致USB设备没有数据播放,导致数据不连惯。

针对这两种情况UAC音频设备与主机之间的数据需要同步,大概有以下几种:

同步式式

  • USB设备根据缓冲区里剩余空间的大小,动态调整自己的时钟频率,使USB主机和USB设备双方产生和消耗数据的速度一致,这种方式称为同步方式。这种方式由USB设备来进行调整。

同步方式的端点描述如下:

        ----------------- Endpoint Descriptor -----------------
bLength                  : 0x09 (9 bytes)
bDescriptorType          : 0x05 (Endpoint Descriptor)
bEndpointAddress         : 0x01 (Direction=OUT EndpointID=1)
bmAttributes             : 0x0D (TransferType=Isochronous  SyncType=Synchronous  EndpointType=Data)
wMaxPacketSize           : 0x00C0 (192 bytes)
bInterval                : 0x01 (1 ms)
bRefresh                 : 0x00
bSynchAddress            : 0x00
Data (HexDump)           : 09 05 01 0D C0 00 01 00 00                        .........

        ----------- Audio Data Endpoint Descriptor ------------
bLength                  : 0x07 (7 bytes)
bDescriptorType          : 0x25 (Audio Endpoint Descriptor)
bDescriptorSubtype       : 0x01 (General)
bmAttributes             : 0x01
 D0   : Sampling Freq    : 0x01 (supported)
 D1   : Pitch            : 0x00 (not supported)
 D6..2: Reserved         : 0x00
 D7   : MaxPacketsOnly   : 0x00 (no)
bLockDelayUnits          : 0x01 (Milliseconds)
wLockDelay               : 0x0001 (1 ms)
Data (HexDump)           : 07 25 01 01 01 01 00

异步方式

  • 另一种方式由USB主机来调整,即USB设备通过一个反馈端点(FeedBack Endpoint)通知USB主机调整音频流的发送速度,使USB主机和USB设备双方发送和接收数据的速度一致。这种方式称为异步方式

异步方式端点描述如下:

 /******************************* Audio Speaker OUT ENDPOINT descriptor: 0x05 *******************************/ 
    //播放端点描述符    
    0x09,    //Length                                                               
    0x05,    //DescriptorType:endpoint descriptor                                   
    0x01,    //EndpointAddress:Output endpoint 01                                   
    0x01 | 0x04,    //Attributes:0x05,Isochronous,Synchronization Type(Asynchronous).........    
    AUDIO_PACKET_SZE(AUDIO_OUT_PACKET),                                          
    0x01,    //Interval       AUDIO_OUT_PACKET      
    0x00,            //没有使用
    0x81,             //这个值是反馈端点的端点号 bSynchAddress:同步端点的地址

    /**************** Audio Class Specific ENDPOINT Descriptor: 0x25 0x01**************/  
    0x07,    //Length                                    
    0x25,    //DescriptorType:audio endpoint descriptor  
    0x01,    //DescriptorSubType:audio endpiont general  
    0x00,    //Attributes:0x00.............              
    0x00,    //LockDelayUnits                            
    0x00,
    0x00,    //LockDelay  

    //反馈端点描述符
    /*********** Audio feedback IN ENDPOINT descriptor: 0x05 *******************************/
    0x09, /* bLength */
    0x05,         /* bDescriptorType */
    AUDIO_FEEDBACK_EP,
    0x01 | 0x04 | 0x10,                          /*  Types -
                                                                        Transfer: ISOCHRONOUS
                                                                        Sync: Async
                                                                        Usage: Feedback EP   */
    0x04,   /* wMaxPacketSize */
    0x00, /* wMaxPacketSize */
    0x03, /* interval polling(2^x ms) */
    0x05,    //这个字节也是有用的,好像是控制时间的。
    0x00,

反馈端点示例内容来自: USB开发——-实现USB Audio 带Feedback端点,录音播放

自适应方式Adaptive

  • 还有一种方式叫做适配模式。

对于扬声器类型:

    ----------------- Endpoint Descriptor -----------------
bLength                  : 0x09 (9 bytes)
bDescriptorType          : 0x05 (Endpoint Descriptor)
bEndpointAddress         : 0x02 (Direction=OUT EndpointID=2)
bmAttributes             : 0x09 (TransferType=Isochronous  SyncType=Adaptive  EndpointType=Data)
wMaxPacketSize           : 0x00C0 (192 bytes)
bInterval                : 0x01 (1 ms)
bRefresh                 : 0x00
bSynchAddress            : 0x00
Data (HexDump)           : 09 05 02 09 C0 00 01 00 00                        .........

        ----------- Audio Data Endpoint Descriptor ------------
bLength                  : 0x07 (7 bytes)
bDescriptorType          : 0x25 (Audio Endpoint Descriptor)
bDescriptorSubtype       : 0x01 (General)
bmAttributes             : 0x01
 D0   : Sampling Freq    : 0x01 (supported)
 D1   : Pitch            : 0x00 (not supported)
 D6..2: Reserved         : 0x00
 D7   : MaxPacketsOnly   : 0x00 (no)
bLockDelayUnits          : 0x01 (Milliseconds)
wLockDelay               : 0x0001 (1 ms)
Data (HexDump)           : 07 25 01 01 01 01 00                              .%.....

对于麦克风类型:

        ------- Audio Streaming Format Type Descriptor --------
bLength                  : 0x0E (14 bytes)
bDescriptorType          : 0x24 (Audio Interface Descriptor)
bDescriptorSubtype       : 0x02 (Format Type)
bFormatType              : 0x01 (FORMAT_TYPE_I)
bNrChannels              : 0x01 (1 channel)
bSubframeSize            : 0x02 (2 bytes per subframe)
bBitResolution           : 0x10 (16 bits per sample)
bSamFreqType             : 0x02 (supports 2 sample frequencies)
tSamFreq[1]              : 0x0BB80 (48000 Hz)
tSamFreq[2]              : 0x0AC44 (44100 Hz)
Data (HexDump)           : 0E 24 02 01 01 02 10 02 80 BB 00 44 AC 00         .$.........D..

        ----------------- Endpoint Descriptor -----------------
bLength                  : 0x09 (9 bytes)
bDescriptorType          : 0x05 (Endpoint Descriptor)
bEndpointAddress         : 0x82 (Direction=IN EndpointID=2)
bmAttributes             : 0x09 (TransferType=Isochronous  SyncType=Adaptive  EndpointType=Data)
wMaxPacketSize           : 0x0064 (100 bytes)
bInterval                : 0x01 (1 ms)
bRefresh                 : 0x00
bSynchAddress            : 0x00
Data (HexDump)           : 09 05 82 09 64 00 01 00 00                        ....d....

        ----------- Audio Data Endpoint Descriptor ------------
bLength                  : 0x07 (7 bytes)
bDescriptorType          : 0x25 (Audio Endpoint Descriptor)
bDescriptorSubtype       : 0x01 (General)
bmAttributes             : 0x01
 D0   : Sampling Freq    : 0x01 (supported)
 D1   : Pitch            : 0x00 (not supported)
 D6..2: Reserved         : 0x00
 D7   : MaxPacketsOnly   : 0x00 (no)
bLockDelayUnits          : 0x00 (Undefined)
wLockDelay               : 0x0000
Data (HexDump)           : 07 25 01 01 00 00 00                              .%.....
HID人机交互QQ群:564808376    UAC音频QQ群:218581009    UVC相机QQ群:331552032    BOT&UASP大容量存储QQ群:258159197    STC-USB单片机QQ群:315457461    USB技术交流QQ群2:580684376    USB技术交流QQ群:952873936   

0 篇笔记 写笔记

USB 同步/等时传输及反馈端点
USB的四种传输之一同步传输,用于数据实时性比较高,数据量较大但数据的完整性不是很严格的场合。由于时间是同步传输的关键部分,因此USB设计者了解这些不同实体在USB中如何处理时间是很重要的。在大部分的通讯系统中,数据的发送者和接收者以同步的方式进行数据收发。在异步通信系统中,允许数据发送者检测接收方......
UAC 多源自适应数据端点描述符
仅当自适应源有一个或多个同步音频数据端点时,才存在此描述符类型。typedef struct _USB_AUDIO_ENDPOINT_DESCRIPTOR { UINT8 bLength; UINT8 bDescriptorType; UINT8 bEndpointAddre......
USB音频设备UAC数据同步方式
对于USB扬声器,USB主机负载发送音频数据,而USB设备负责接收来自主机发送过来的数据,数据的传输方式采用的是同步方式。由于USB主机和USB设备时钟同步的问题,会有一定的偏差,长时间的累积会导致主机和设备之间数据的不同步。如USB主机可能会发送数据相对USB设备播放数据过快,导致USB设备来不及......
UAC音频设备的同步传输(同步、自适应、异步)模式区分
USB定义了四种数据传输,分别为控制传输,中断传输、批量传输和同步传输。其中同步传输按端点的配置可分为同步方式自适应方式和异步方式。这是通过端点描述符的bEndpointType的bit3-2的值来进行配置的。bEndpointType的bit3-2传输方式00无同步0......
UAC耳机扬声器音频写PCM数据的三种方式
UAC耳机扬声器音频PCM数据有三种方式,分别为:异步传输 Asynchronous同步传输 synchronous 自适应传输 adaptive。UAC音频数据同步传输同步传输是三种方式中最低质量的,所以也是使用于一搬的普通产品中。同步传输时只要主机发送数据,设备端都会接收数据。但由于两个时......
关注公众号
取消
感谢您的支持,我会继续努力的!
扫码支持
扫码打赏,你说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

您的支持,是我们前进的动力!