我知道这是一个技术问题,但它真的帮助帮助我理解交付的意思。不能在音频组件简单地读取到缓冲区?另外,我还看到了AVB设计采用了解耦。难道他们两个是一回事吗?就个人而言,我认为它跟排队样本分为先进先出,但更详细的解释将会受到欢迎。提前致谢!
回答:
你是在正确的轨道。这是所有关于缓冲。你会看到,在参考设计,既分离和缓冲(这是在Their授权修建自己的核上运行的任务)所属的usb_buffer目录。究其原因,他们需要如下 - 无论是audio.xc(基本上是一个I2S核心,如I2C配置和DSD模式附加功能)和XUD(处理所有低级别的USB交易)是服务器的任务是阻止敏感。
这是因为他们都是非常高的性能(USB = 480Mbps或I2S可处理20路192KHz的了,32B音)等任何通信都必须是短期和非阻塞(即你想不到的有关数据的请求太长)。如果你有其中任一摊位的通信,那么你可以在I2S或USB突破时机,因为Their授权修建的内环路必须以一定的速率提供服务的I / O。
突破时机坏,无论是USB不能满足规范或I2S会有差距流动。因此,USB / I2S每个人都有任务,以服务他们,这始终是有求必应,让他们顺利运行。
然而,USB音频,USB和I2S不完全相同的速度运行,因此你需要他们之间的缓冲区。这两个缓冲区和去耦通过它们之间的共享存储器FIFO交谈。因此,有效的正在运行的逻辑核心/任务:
USB < - > 缓存 < - > 去耦 < - > I2S
实际是这样的:
服务器 < - > 客户端 < - FIFO-> 客户端 < - > 服务器
你会发现,解耦也可以处理其他任务,如打包/解包(如USB音频类1,其中24B样本不长字对齐)和音量控制。因此,有一点松弛为这些东西缓冲任务,只要他们总是响应Their授权修建相应的服务器。这就是为什么我们用一个中断处理程序中解耦。
如果该系统的性能要低得多,那么有可能增加缓冲到服务器的任务,但高速USB和I2S与许多信道和数据速率按下定时预算,所以我们添加缓冲剂,以保证所有的工作可靠。