修改时序以配置TDM
在数字音频应用中,数字对模拟转换器(DAC)的配置对于保证声音输出质量至关重要。本文档旨在记录在配置TDM256模式下DAC时遇到的声音破音问题,以及通过逻辑分析和代码调整解决该问题的过程。
问题描述
在将我们的系统配置为使用TDM256模式时,我们注意到输出的声音出现了破音。进一步的测试表明,这一问题与XMOS芯片的输出时序不一致有关。具体表现为LRCLK(左右声道时钟)的时序与DAC的时序要求不匹配。
排查步骤
- 首先确认系统的硬件连接无误,并且所有组件均按照规格书正确安装。
- 使用逻辑分析仪检测信号,并与DAC的技术规格进行对比,发现LRCLK的边沿与DAC要求的时序不同步。
逻辑分析
详细分析XMOS输出时序发现,LRCLK信号的上升沿和下降沿与DAC的数据手册中要求的时序相反。
如下图,AK4438上LRCLK是下降沿触发, XMOS LRCLK默认是上升沿触发。


解决方案
经过一系列的测试和分析,最终发现要使XMOS的输出时序满足DAC的时序要求,需要反转LRCLK的输出时序。分析的逻辑如下:
-
XMOS的原始输出时序配置为LRCLK在BCLK的下降沿发生由低到高的状态变化。而后级设备在BCLK的上升沿采集数据,这就导致了一个bit的相位差。为了保持数据的完整性,数据输出需要在BCLK的上升沿之后间隔一个BCLK周期。此时输出数据的格式为MSB先行。
-
然而,DAC的采集时序要求LRCLK在BCLK的下降沿发生由高到低的状态变化,并且同样在BCLK的上升沿采集数据。这样的配置同样会导致一个bit的相位差,但它要求数据在BCLK的上升沿之后间隔一个BCLK周期才能采集,这与XMOS当前的输出格式MSB先行是一致的。
-
为了解决XMOS输出时序与DAC时序的不匹配问题,我们决定采取反转LRCLK输出时序的策略。通过这种方式,LRCLK的状态变化将在BCLK的下降沿由高到低,这刚好满足了DAC的时序要求。同时,这种 调整也确保了数据在BCLK的上升沿之后间隔一个BCLK周期被后级设备采集,从而解决了相位差的问题。

修改后 ,data固定输出0xFF000002(用这个数的目的是便于观察),用逻辑分析仪可以看出,lrclk已经从上升沿触发,变成下降沿触发。

结论
在发现由于TDM时序问题导致音频失真,需要调整XMOS时序时,我们应当关注三个关键点:
- BCLK/LRCLK时序触发的位置:上升沿/下降沿
- 数据的对齐方式:MSB/LSB/I2S Standard
- TDM Slot的大小:24bit/32bit
经过上述修改后,声音破音的问题得到了解决。与I2S标准不同,TDM协议的统一性较低,各厂商遵循的标准不同。得益于XMOS架构的灵活性,我们能够像FPGA一样修改时序,以适配不同的TDM协议。