我们在产品中使用 SRC4392。 这是一个很棒的芯片。
我们有这种信号路由情况:
外部 SBC I2S 主站->端口 A I2S 从站-> SRC ->端口 B I2S 主站->本地 SBC
您可以在此处看到一个 schemic 片段: e2e.ti.com/.../src4392-input-receiver-troubles-part-2
换言之,信号路由如下所示:
外部 SBC 用作 I2S 总线主控。 外部 SBC 具有到 SRC 4392端口 A 的直接 I2S 链路。SRC 是来自端口 A 的输入、输出到端口 B。端口 B 是运行我们软件的 SBC 的输入。
我们发现、如果端口 A 的 I2S 存在外部 SBC 提供的时钟、则一切运行都很完美。
当我们停止外部 SBC 上的音频时、其 I2S 时钟将停止。 外部 SBC 正在运行 Linux、我们无法控制其 DAPM 和时钟启动/关断。 当外部 SBC 的 I2S 时钟停止时、信号链会定期发出咔嗒声。 我们无法进行此点击、因为我们是专门的音频产品。
我们已经研究了状态寄存器0x0A、0x0B 和0x0C、以指示 SRC 的 I2S 信号何时就绪、但它指示 I2S 信号何时开始、而不会再次指示。 我们无法 不断写入 0x0B 寄存器以尝试重新启动监控方案、因为这将需要大量代码才能在 ALSA 音频驱动程序中实现(我们已实现)、我们甚至不确定这是否是合适的解决方案。 这可能不是一个合适的解决 方案、因为我们必须对问题进行一些用户空间检测、这将包括至少10ms 的延迟、而且很可能还有更多的延迟。 在寄存器0x0A 检测之后、我们需要更改 alsamixer 设置、这将至少包含另外10ms 的执行时间、并且在系统负载非常重的情况下、执行时间更有可能。
我们无法承受音频子系统中出现任何爆裂声。
是否有办法解决我们不知道使用 SRC4392 IC 的 SRC 问题?
谢谢
Matt