UAC规范(USB音频)
+ -

UAC Feedback端点

2021-03-24 3486 0

下面转一段对USB feedback的理解:

这段时间一直在做USB Audio Device(UAC)设备的开发工作。由于UAC采用的是isochronous endpoint来传输数据,对时钟的要求较高。但无奈我们的嵌入式平台的时钟并不准,数据同步就成了问题。经过研究,发现只能使用异步模式来解决这个问题。
所谓异步模式,就是建立一个feedback endpoint在一个固定的时间间隔反馈本地时钟给host, 从而使得host端能够实时的了解client端的时钟变化,调节数据包的长度,从而避免接收或者发送缓冲溢出。
USB 2.0 spec在5.12.4.2中明确的定义了如何提供feedback给host, 个人觉得写得有点复杂,特总结如下:

  1. Feedback endpoint数据长度为3字节,发送间隔由bRefresh决定。
  2. Fm = Fs * 2^P, Fm是本地的时钟频率,Fs是采样频率。
  3. Tmeas=2^K/2^P=2^(K-P), Tmeas是测量时间, 对于full speed, K= 10, 对于high speed, K=13
  4. 在每Tmeasframe/subframe时间间隔,把本地的clock数写入feedback endpoint。

上面的一大段看起来很复杂,其实基本的思想很简单。不就是时钟不同步嘛,要想让大家同步,怎么办呢?比如说采样率是48000,如果时钟同步,那么1s的时间内,就应该有48000个sample。如果不同步,那么就测量1s, 把1s内的实际sample数返回给host端就可以了。上面的公式实际要表达的就是这个意思。至于要注意的是返回的格式,spec上面说是对于full speed, 数据格式是10.14,对于high speed, 数据格式是16.16。如果你的UAC设备是1.0 version,那么就算是你把它定义成一个high speed的设备,返回数据格式还是10.14的。
例如:

48000 采样率 –> feedback (48 * 2^14) = 0xc0000
47000 采样率 –> feedback (47 * 2^14) = 0xbc000

计算10.14格式采样率代码(audio 1.0)

这里反馈端点反馈的数据是3个字节的。

/*该设备为:44.1K采样率,10.14格式*/
uint8_t audioFeedBackBuffer[4] = {0x40,0x06,0x0b};   
void SetFeedBackSampleRate(uint32_t Rata)
{
    Rata = ((Rata / 1000) << 14) | ((Rata % 1000) << 4);
    audioFeedBackBuffer[0] = Rata;
    audioFeedBackBuffer[1] = Rata>>8;
    audioFeedBackBuffer[2] = Rata>>16;
}

计算16.16格式采样率代码(audio 2.0)

这部分代码是 通过USB声卡反推出来的,实测可以用。感觉跟USB2.0规范描述不一样。

这里反馈端点反馈的数据是4个字节的。

uint8_t audioFeedBackBuffer[4];
void SetFeedBackSampleRate(uint32_t Rata)
{
    Rata = ((Rata / 1000) << 13) | ((Rata % 1000) << 3);
    audioFeedBackBuffer[0] = Rata;
    audioFeedBackBuffer[1] = Rata>>8;
    audioFeedBackBuffer[2] = Rata>>16;
    audioFeedBackBuffer[4] = Rata>>24;
}

相关链接:
https://blog.csdn.net/huangkangying/article/details/53152956
https://zhuanlan.zhihu.com/p/166661061

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超高速 超高速端点伴随描述符
在接口中描述的每个超高速端点都紧跟着一个超高速端点伴侣描述符( EndpointCompanion descriptor)。这个描述符包含只给超高速端点定义的附加端点特性。这个描述符总是 作 为 配 置 描 述 符 信 息 的 一 部 分 在GetDescriptor(Configuration) ......
UAC Feedback端点
下面转一段对USB feedback的理解:这段时间一直在做USB Audio Device(UAC)设备的开发工作。由于UAC采用的是isochronous endpoint来传输数据,对时钟的要求较高。但无奈我们的嵌入式平台的时钟并不准,数据同步就成了问题。经过研究,发现只能使用异步模式来解决这......
UVC 视频控制接口中断端点描述符
通过视频控制接口包括用于实现特定类请求的控制端点(默认端点0)用于返回中断状态信息的可选中断状态返回端点。视频控制端点描述符标准的视频控制端点描述符使用端点0来实现标准的中断控制,故无须额外的标准视频控制端点描述符。特定类的视频控制端点描述符使用端点0来实现特定类视频控制,故无须特定类的视频控制端点......
USB端点和管道的区别
在USB体系架构中,经常会混用USB端点和USB管道的概念,包括本人也经常混用。但严格来说它们是两个不同的概念,具体表现在:端点是USB设备端的概念,是真实的特理设备上的概念,其特性是通过端点描述符来描述的。而管道是USB主机端的上软件的概念,其概据USB的设备端点信息建立的数据软件数据通道。端......
USB设备描述符、配置描述符、接口描述符和端点描述符的拓扑关系
在USB设备的逻辑组织中,包含设备、配置、接口和端点4个层次。每个USB设备都提供了不同级别的配置信息,可以包含一个或多个配置,不同的配置使设备表现出不同的功能组合(在探测/连接期间需从其中选定一个),配置由多个接口组成。一次只能有一个配置是活动的。大多数的设备只有一个配置和一个接口,当一个设备......
UVC 端点描述符
在USB规范中,端点描述符用于描述设备的端点信息。视频控制接口VC中的端点描述符视频控制接口(VC)的端点描述符可以存在,也可以不存。如果存在,必须是中断类型的,且必须为输入端点。bLength : 描述符大小.固定为0x07.bDescriptorType : 接口描述符类型.固定为0x05.bE......
UAC 音频流端点控制请求
音频流端点控制支持如下选择子:ControlSelector ValueEP_CONTROL_UNDEFINED0x00SAMPLING_FREQ_CONTROL0x01PITCH_CONTROL0x02SAMPLING_FREQ_CONTROL采样......
UVC 视频流端点描述符
视频数据端点可以实现为同步端点或批量端点。等时/同步传输视频端点描述符使用和标准USB设备端点描符同样的数据结构。struct _ENDPOIN_DESCRIPTOR_STRUCT { BYTE bLength; //设备描述符的字节数大小,为0x12 BYTE ......
UAC 标准等时音频数据端点描述符
标准等时音频数据端点描述符:Standard AS Isochronous Audio Data Endpoint Descriptor,用于描述音频数据流的传递方式及方法。标准等时音频数据端点描述符数据结构定义如下:typedef struct _USB_AUDIO_ENDPOINT_DESCRI......
USB 端点描述符
端点描述符USB设备中的每个端点都有自己的端点描述符,由接口描述符中的bNumEndpoint决定其数量struct _ENDPOIN_DESCRIPTOR_STRUCT { BYTE bLength; //设备描述符的字节数大小,为0x7 BYTE bD......
USB 同步/等时传输及反馈端点
USB的四种传输之一同步传输,用于数据实时性比较高,数据量较大但数据的完整性不是很严格的场合。由于时间是同步传输的关键部分,因此USB设计者了解这些不同实体在USB中如何处理时间是很重要的。在大部分的通讯系统中,数据的发送者和接收者以同步的方式进行数据收发。在异步通信系统中,允许数据发送者检测接收方......
UAC 多源自适应数据端点描述符
仅当自适应源有一个或多个同步音频数据端点时,才存在此描述符类型。typedef struct _USB_AUDIO_ENDPOINT_DESCRIPTOR { UINT8 bLength; UINT8 bDescriptorType; UINT8 bEndpointAddre......
USB2.0 包位域成员字段-PID、SOP、包地址、包端点、帧号、CRC5、CRC16
包标识PIDUSB协议定义的包格式PID由8位组成,低4位是类型字段,高4位为低四位的补码。特殊用途包包括了一些用于特定场合的信牌包和握手包。PID含义说明0001令牌OUT主机发送数据到USB设备1001令牌IN主机接收从USB设备发出的数据0101......
UAC麦克见音频同步端点描述符
UAC音频采用同步传输,故数据传输的端点必须为同步传输。端点描述符的数据结构如下:关于同步传输可详见:http://www.usbzh.com/article/detail-118.html标准端点描述符代码如下:/* USB_DT_ENDPOINT: Endpoint descriptor......
USB端点描述符bInterval的时间周期解释
USB 端点描述符用于描述主机查询端点的时间间隔,这个值根据USB的版本和端点的类型而不同。中断传输同步传输控制传输批量传输低速1-255,单位为ms///全速1-255,单位为ms1-16,2^(N-1)个周期单位//高速1-16,2^(N-......
关注公众号
  • HID人机交互
  • Linux&USB
  • UAC音频
  • TYPE-C
  • USB规范
  • USB大容量存储
  • USB百科
  • USB周边
  • UVC摄像头
  • Windows系统USB
  • 音视频博客
  • 取消
    感谢您的支持,我会继续努力的!
    扫码支持
    扫码打赏,你说多少就多少

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

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