前段时间在公司设备上实现了speaker端的feedback功能,这里来总结分享一下,具体代码我就不写了,也没多少。主要是思路分析,毕竟思路在手,天下我有。下面的内容只是一个概述,有兴趣的小伙伴可以留言一起讨论学习。
1.方案需求
设备端通过feedback反馈功能来实现和主机设备的音视频数据在固定的一段时间内需求达成一致,从而达到数据不会丢失或者无法获取到的效果。
2.方案原理
USB2.0标准协议在5.12.4 Isochronous Devices 章节对于Feedback有所讲解。
Source Sink
异步 按采样率定义运行 按采样率定义运行
同步 采样率锁定到SOF 采样率锁定到SOF
适应性 采样率锁定到Sink 采样率锁定到数据流
针对异步传输方式存在反馈机制,异步接收器通过向主机提供显示反馈,相对于USB 微帧频率频率而言所需要的数据速率,这允许主机不断调整发送到接收器的样本数,以便不会发生数据缓存区的下溢或者上溢。
同时在9.6.6章节的Table 9-13. Standard Endpoint Descriptor 中讲解了Feedback端点设置条件的描述,可以概括为下面几个条件:
1)当端点需要配置为反馈端点时,端点传输类型必须为等时传输。
2)反馈端点始终与其服务的数据端点具有相反的方向。
3)如果数据端点有多个,第一个数据端点和反馈端点必须具有相同的端点号,声明上端点号必须是升序的(可不连续),通过此方法来确定反馈端点所服务的数据端点。
当然具体的设置是要结合实际方案的实现,毕竟USB2.0标准协议,只是拿来做参考的。
3.反馈数据的计算