UAC开发调试笔记
+ -

UAC麦克风同步传输的URB分析

2021-11-07 1091 0

之前写过同步传输UVC摄像头的URB,文章名称为:手动分析使用BUSHOUND抓取同步传输的URB 。今天恰好手中有一个UVC麦克风,所以也拿来分析。也许和之前的文章有所重复,但是因为侧重点的不同,也许会有意想不到的小收获取。
言归正转,我们知道,在UAC音频规范中,数据的传输不像UVC摄像头那样,既支持同步传输,也支持批量传输,而是只支持同步传输。所以UAC音频设备的数据端点都是同步端点。
在Windows操作系统中,一个URB一般包含10ms的数据内容,这是因为同步传输的端点的时间周期为1ms.如本人手中的这个UAC麦克风的同步端点内容为:

        ------- Audio Streaming Format Type Descriptor --------
bLength                  : 0x11 (17 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             : 0x03 (supports 3 sample frequencies)
tSamFreq[1]              : 0x0BB80 (48000 Hz)
tSamFreq[2]              : 0x2EE00 (192000 Hz)
tSamFreq[3]              : 0x17700 (96000 Hz)
Data (HexDump)           : 11 24 02 01 01 02 10 03 80 BB 00 00 EE 02 00 77   .$.............w
                           01                                                .

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

由于音频可以选择3种采样率,分别为48000,96000和192000,所以使用最大的端点字节192*2=384字节。
UAC麦克风
本人在使用的时候,一般使用的是48000的采样率,所以这里也使用48000的采样来进行抓包。
通过BUSHOUND进行抓包,发现每包抓的数据固定为960字节,即10ms的数据,由于每1ms产生96个字节,所以每URB的数据为10个ISO同步包。

我们结抓到的两个连续的URB进行分析:

  12.2            URB    10 01 0a 00  00 00 00 00  48 14 24 77  7c 52 00 00  00 00 00 00  00 00 00 00  50 b8 2d dd  83 ad ff ff  ISOC TRANSFER                            1.2.0        
                         05 00 00 00  c0 03 00 00  10 20 03 e1  83 ad ff ff  00 00 00 00  00 00 00 00  00 00 00 00  00 00 00 00                                           1.2.32       
                         06 00 00 00  00 00 00 00  00 00 00 00  00 00 00 00  00 00 00 00  00 00 00 00  00 00 00 00  00 00 00 00                                           1.2.64       
                         00 00 00 00  00 00 00 00  00 00 00 00  00 00 00 00  00 00 00 00  00 00 00 00  00 00 00 00  00 00 00 00                                           1.2.96       
                         StartFrame f3 48 3a 23  591022323 本包的
                                    fd 48 3a 23  591022333 下包的

                         NumberOfPackets 0a 00 00 00  
                         errcount 00 00 00 00  
                         00 00 00 00  60 00 00 00  00 00 00 00  96=0x60
                         80 01 00 00  60 00 00 00  00 00 00 00  
                         00 03 00 00  60 00 00 00  00 00 00 00  
                         80 04 00 00  60 00 00 00  00 00 00 00  
                         00 06 00 00  60 00 00 00  00 00 00 00  
                         80 07 00 00  60 00 00 00  00 00 00 00  
                         00 09 00 00  60 00 00 00  00 00 00 00                                                                80 0a 00 00  60 00 00 00  00 00 00 00  
                         00 0c 00 00  60 00 00 00  00 00 00 00  
                         80 0d 00 00  60 00 00 00  00 00 00 00 

URB    10 01 0a 00  00 00 00 00  48 14 24 77  7c 52 00 00  00 00 00 00  00 00 00 00  50 b8 2d dd  83 ad ff ff 
       05 00 00 00  c0 03 00 00  10 2f 03 e1  83 ad ff ff  00 00 00 00  00 00 00 00  00 00 00 00  00 00 00 00 
       06 00 00 00  00 00 00 00  00 00 00 00  00 00 00 00  00 00 00 00  00 00 00 00  00 00 00 00  00 00 00 00 
       00 00 00 00  00 00 00 00  00 00 00 00  00 00 00 00  00 00 00 00  00 00 00 00  00 00 00 00  00 00 00 00 
       fd 48 3a 23  
     0a 00 00 00  00 00 00 00  00 00 00 00  60 00 00 00  00 00 00 00  80 01 00 00  60 00 00 00              
       00 00 00 00  00 03 00 00  60 00 00 00  00 00 00 00  80 04 00 00  60 00 00 00  00 00 00 00  00 06 00 00 
       60 00 00 00  00 00 00 00  80 07 00 00  60 00 00 00  00 00 00 00  00 09 00 00  60 00 00 00  00 00 00 00 
       80 0a 00 00  60 00 00 00  00 00 00 00  00 0c 00 00  60 00 00 00  00 00 00 00  80 0d 00 00  60 00 00 00 
       00 00 00 00  00 00 00 00  00 00 00 00  00 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-UAC麦克风 音频控制接口
音频控制接口描述符描述了设备的结构(拓扑结构),并通过特定类请求对音频的控制。UAC麦克风 音频控制接口描述符偏移地址字段长度值描述0bLength10x09接口描术符的长度1bDescriptorType10x04描述符的类型接口描述符2bInterfaceNumber10x00接口ID号3bA......
UVC 等时传输中的URB_ISOCH_TRANSFER
通过UVC规范可知,视频图像数据的读取可使用两种端点传输方式,分别为:BULK 块/批量传输方式ISO 等时/同步传输方式在Windows内核中,USB数据的读取是通过URB来进行传输的,其结构体是一个大大的共用体,根据数据传输的方式对应其不同的结构体,其内容如下:typedef _Struct_s......
UVC等时传输中的dwMaxPayloadTransferSize
UVC的视频流接口控制请求的数据大小可为26字节,34字节和48字节,其分别对应的是UVC的1.0,1,1和UVC1.5版本。在其整个视频流控制接口参数偏移地址22处的字段为一4字节的dwMaxPayloadTransferSize,根据其字段解释为“指定设备在单个有效负载传输中可以传输或接收的最大......
USB-UAC麦克风 配置描述符
UAC麦克风采用的配置描述符结构和USB配置描述符的结构一致.偏移地址字段长度值描述0bLength10x09配置描述符的长度1bDescriptorType10x02描述符类型,配置描述符类型2wTotalLength20x0064配置描述符的总长度(包括后续的UAC音频控制和UAC音频流接口描述......
华为UAC麦克风的工作过程数据分析
看完了耳机的数据分析,再来分析麦克风,就相对来说很简单了,这是因为:第一:麦克风没有音频控制特效单元描述符,所以少了很多特定类请求。第二:麦克风只有一个音频流转换接口,且只支持采样率为48000HZ 16位。具体的过程见下:Length Phase Data-------- --......
USB-UAC麦克风 功能简介
这里描述的设备是一个USB麦克风。这是一个非常简单的设备,没有音频控制合并等其它功能。它通过音频流接口向主机提供单声道音频数据流。这个使用的音频数据格式是16位8KHz PCM。同步类型为异步源。它使用内部时钟作为参考源。本章要介绍的是UAC1.0规范附录B自带的USB麦克风的内容。从拓年图上可以看......
USB-UAC麦克风 字符串描述符
偏移地址字段长度值描述0bLength10x18描述符长度1bDescriptorType10x03描述符类型:字符串描述符2bString10x00540x00480x00450x00200x00430x004F0x004D0x00500x00410x004E0x0059“THE COMPANY”......
USB 等时/同步传输、块传输与转换设置在UVC摄像头驱动中的探讨
最近在Windows10 x64环境下,开发了一个虚拟UVC摄像头驱动。确切的来说这不是摄像头驱动,而是一个虚拟USB总线驱动。使用该虚拟总线驱动使用应用软件通过IOCTL控制总线子设备的创建与卸载。框架设计驱动安装完成后,是一个单纯的USB虚拟总线。应用软件通过发送自定义IOCTL码IOCTL......
USB通用父驱动usbccgp.sys的过滤UVC摄像头、UAC麦克风和HID设备硬件ID
激动的心情,无溢言表。。虽然只是一个很简单的东西。。但相于折腾了这么久,还是很开心的了。最近有个需求,功能是这样的:有一个USB复合设备,连接到windows系统中它在windows下的设备树如下:USB Composite Device(usbccgp.sys)UVC CameraUAC ......
USB-UAC麦克风 音频流接口
音频流接口有2个转换接口。UAC麦克风 零带宽转换接口转换接口0是零带宽设置,用于在麦克风未使用。这是通电后的默认设置。实现了零带宽通过指定接口的此备用设置没有与之关联的端点(bNumEndpoints=0)。偏移地址字段长度值描述0bLength10x091bDescriptorType10x04......
UVC 静止图像触发控制
静止图像触发控制通知设备开始通过相关的同步或大容量管道发送静态图像数据。专用的静态图像大容量管道仅用于静态图像捕获的方法3。此控制只能在流式传输时设置,并且在发送静态图像后,硬件应将其重置为“正常操作”模式。仅当设备支持静态图像检索的方法2或方法3时,才需要此控件。控制选择子VS_STILL_IMA......
USB 同步/等时传输方式
USB协议规定了四种传输类型:控制传输、批量传输、同步传输、中断传输。等时传输也有“同步传输”的叫法,一般用于要求数据连续、实时且数据量大的场合,其对传输延时十分敏感,类似用于USB摄像设备,USB语音设备等等。同步事务没有握手包。当一个同步传输中有多个事务时,最后一个事务之前的事务的数据长......
USB-UAC麦克风 设备描述符
UAC麦克风采用的设备描述符结构和USB设备描述符的结构一致,只是有些字段的值有所要求。偏移地址字段长度值描述0bLength10x12设备描述符的总和长度1bDescriptorType10x01设备描述符类型2bcdUSB 20x01001.00使用的USB版本号4bDeviceClass10x......
USB超高速 同步传输
正如USB2.0一样,超速同步传输类型是用来支持想要能容忍错误,周期性的轮询服务的传输流。超速跟USB2.0一样不发送起始帧,但是时序信息要通过同步时间戳包(ITP)被发送给设备。这个规格的协议层章详细描述了用来完成同步传输的包,总线事务和事务处理流程。也描述了怎么样传送时序信息给设备。超速同步传输......
UAC麦克风拓扑图
UAC麦克风是UAC规范中的USB音频输入设备,它的拓扑图如下:可以看到,在UAC域内,这个拓扑图是一个最简单的UAC麦克风拓扑图,只包括一个输入终端和一个输出终端,输入终端对应的是拾音端,而输出终端将最终的音频数据打包通过USB端点传输给主机。当然,不管是不是最简单的麦克风,最基本的东西都是......
关注公众号
取消
感谢您的支持,我会继续努力的!
扫码支持
扫码打赏,你说多少就多少

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

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