Skip to main content
欢迎来到PAWPAW技术文档网站了解更多信息

修改时序以配置TDM

在数字音频应用中,数字对模拟转换器(DAC)的配置对于保证声音输出质量至关重要。本文档旨在记录在配置TDM256模式下DAC时遇到的声音破音问题,以及通过逻辑分析和代码调整解决该问题的过程。

问题描述

在将我们的系统配置为使用TDM256模式时,我们注意到输出的声音出现了破音。进一步的测试表明,这一问题与XMOS芯片的输出时序不一致有关。具体表现为LRCLK(左右声道时钟)的时序与DAC的时序要求不匹配。

xmos时序
图1:xmos时序
Untitled
图2:AK4438的TDM规格中,最接近XMOS的时序

排查步骤

  1. 首先确认系统的硬件连接无误,并且所有组件均按照规格书正确安装。
  2. 使用逻辑分析仪检测信号,并与DAC的技术规格进行对比,发现LRCLK的边沿与DAC要求的时序不同步。

逻辑分析

详细分析XMOS输出时序发现,LRCLK信号的上升沿和下降沿与DAC的数据手册中要求的时序相反。

如下图,AK4438上LRCLK是下降沿触发, XMOS LRCLK默认是上升沿触发。

Untitled

图3:AK4438时序的触发位置

Untitled

图4:XMOS时序的触发位置

解决方案

经过一系列的测试和分析,最终发现要使XMOS的输出时序满足DAC的时序要求,需要反转LRCLK的输出时序。分析的逻辑如下:

  1. XMOS的原始输出时序配置为LRCLK在BCLK的下降沿发生由低到高的状态变化。而后级设备在BCLK的上升沿采集数据,这就导致了一个bit的相位差。为了保持数据的完整性,数据输出需要在BCLK的上升沿之后间隔一个BCLK周期。此时输出数据的格式为MSB先行。

  2. 然而,DAC的采集时序要求LRCLK在BCLK的下降沿发生由高到低的状态变化,并且同样在BCLK的上升沿采集数据。这样的配置同样会导致一个bit的相位差,但它要求数据在BCLK的上升沿之后间隔一个BCLK周期才能采集,这与XMOS当前的输出格式MSB先行是一致的。

  3. 为了解决XMOS输出时序与DAC时序的不匹配问题,我们决定采取反转LRCLK输出时序的策略。通过这种方式,LRCLK的状态变化将在BCLK的下降沿由高到低,这刚好满足了DAC的时序要求。同时,这种调整也确保了数据在BCLK的上升沿之后间隔一个BCLK周期被后级设备采集,从而解决了相位差的问题。

Untitled

图5:翻转XMOS输出的LRCLK

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

Untitled

图6:修改后的逻辑分析仪波形

结论

在发现由于TDM时序问题导致音频失真,需要调整XMOS时序时,我们应当关注三个关键点:

  • BCLK/LRCLK时序触发的位置:上升沿/下降沿
  • 数据的对齐方式:MSB/LSB/I2S Standard
  • TDM Slot的大小:24bit/32bit

经过上述修改后,声音破音的问题得到了解决。与I2S标准不同,TDM协议的统一性较低,各厂商遵循的标准不同。得益于XMOS架构的灵活性,我们能够像FPGA一样修改时序,以适配不同的TDM协议。