UAC设备端点符Feedback端点描述符的校验判断
2023-01-13
475
2
UAC的同步传输可以在同步(1101)和异步(0101)的方式工的时候,可以选择使用一个FeedBack端点进行数据的传输校准。
当然,这里的01代表该端点是同步传输方式,其中11代表是同步,01代表的是异步。当然也有一种01代表自适应方式。
这些概念可详见:
- UAC音频设备的同步传输(同步、自适应、异步)模式区分 https://www.usbzh.com/article/detail-762.html
- USB 端点描述符 https://www.usbzh.com/article/detail-56.html
所以主机端在获取UAC设备的数据流端点时,会通过如下的方式来获取是否含有反馈端点。
if( pEndpointDescriptor->bmAttributes & 0x0c) == 0x4 )
{
//然后获取下一个端点描述符,进行端点地址的校验
pSyncEPDescriptor = (PUSB_ENDPOINT_DESCRIPTOR)xx;
if (pSyncEPDescriptor &&((ULONG)pSyncEPDescriptor->bEndpointAddress == ulSyncEndpointAddr) )
{
if (pDescriptor && ((PVOID)pSyncEPDescriptor > (PVOID)pDescriptor))
pSyncEPDescriptor = NULL;
}
else
{
pSyncEPDescriptor = NULL;
}
}
所以像以下的,就算设置为同步或异步方式,但因没有相应的反馈同步端点描述符,也是不有效的。
----------------- 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 .%.....
这是因为bSynchAddress为0,并表后续没有相应的同步端点描述符。
而另一种需就是会进行端点反馈的描述符:
数据来源于西客电子的代码:https://gitee.com/Jay-MaYun/STM32F105_UAB_AudioDemo/tree/master
HID人机交互QQ群:564808376
UAC音频QQ群:218581009
UVC相机QQ群:331552032
BOT&UASP大容量存储QQ群:258159197
STC-USB单片机QQ群:315457461
USB技术交流QQ群2:580684376
USB技术交流QQ群:952873936