This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] TAS2555:关于 TAS2555如何响应 I2S 输入的问题

Guru**** 663810 points
Other Parts Discussed in Thread: TAS2555
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/audio-group/audio/f/audio-forum/1202085/tas2555-question-regarding-how-the-tas2555-responds-to-i2s-inputs

器件型号:TAS2555

伊凡、您好!

 当我通过 I2S 向 TAS2555发送有限的音频数据流时、我对 TAS2555的行为感到困惑。 我希望你能帮助我了解正在发生的事情。

测试程序将一个包含192个 L/R 样本的表流式传输、其中4kHz 正弦波的振幅增大。 将所有192个 L/R 样本传输到 TAS2555后、I2S 将关闭。 表中的第一个样本为零值、但之后、表中的值立即开始生成幅度增加的4kHz 正弦波。

我还要说明一点、我已经在 Amp Init ()调用(ROM 模式1)和 DMA/I2S 初始化之间设置了100mS 的延迟、以确保放大器应该为输入做好准备(请参阅下面的代码)。

AMP_I2CInit ();  //ROM 模式1

DelayMsWatchdog (100、WDT_MAIN);

DMA_AMP_Init ();

CY_DMA_CHANNEL_Enable (DMA_AMP_HW、DMA_AMP_DW_CHANNEL);
I2S_AMP_Start ();

在下面的示波器迹线中 、黄色迹线显示 I2S WCLK、 蓝色迹线显示 TAS2555音频输出。  

我有两个问题:

1) 1)我希望放大器的音频输出基本上与 I2S 输入"同步"响应。 然而、音频输出似乎明显延迟(相对于 I2S 流)约1ms。  您能解释一下这种延迟吗?

2) I2S 值流结束后、我希望看到直流音频信号、因为没有新的 I2S 值传输到放大器中。 相反、放大器的音频输出似乎 始终继续驱动4kHz 信号的一部分? 您能解释一下吗?

谢谢。

丰富

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Rich:

    您能否共享用于 TAS2555的寄存器配置?

    此致、
    -Ivan Salazar
    应用工程师

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    void Amp_I2CInit ()
      //页0
      Amp2555_i2cRegWrite (0x000x00);
      //第0本书
      Amp2555_i2cRegWrite (0x7f0x00);
      //软件复位
      Amp2555_i2cRegWrite (0x010x01);
      //使用延迟>= 100us
      BlockingDelayMs (0x01);
      //静音/断电/复位结束
      // PLL 开始
      Amp2555_i2cRegWrite (0x000x00);
      Amp2555_i2cRegWrite (0x7f0x00);
      Amp2555_i2cRegWrite (0x000x01);
      Amp2555_i2cRegWrite (0x730x0F);
      Amp2555_i2cRegWrite (0x740x0d);
      Amp2555_i2cRegWrite (0x000x00);
      Amp2555_i2cRegWrite (0x7f0x64);
      Amp2555_i2cRegWrite (0x1b0x01);
      Amp2555_i2cRegWrite (0x1c0x07);
      Amp2555_i2cRegWrite (0x1d0x00);
      Amp2555_i2cRegWrite (0x1E0x00);
      Amp2555_i2cRegWrite (0x200x07);
      Amp2555_i2cRegWrite (0x220x08);
      Amp2555_i2cRegWrite (0x020x10);
      Amp2555_i2cRegWrite (0x210x04);
      Amp2555_i2cRegWrite (0x010x08);
      Amp2555_i2cRegWrite (0x2b0x00);
      Amp2555_i2cRegWrite (0x2C0x20);
      Amp2555_i2cRegWrite (0x1f0x20);
      Amp2555_i2cRegWrite (0x2a0x40);
      // PLL 结束
      Amp2555_i2cRegWrite (0x000x00);
      Amp2555_i2cRegWrite (0x7f0x00);
      Amp2555_i2cRegWrite (0x220x02);
      //加电1.
      //页0
      Amp2555_i2cRegWrite (0x000x00);
      //第0本书
      Amp2555_i2cRegWrite (0x7f0x00);
      // DSP、PLL、Ndiv、MDAC、mAdc 加电
      Amp2555_i2cRegWrite (0x040xF8);
      //加电3.
      //页0
      Amp2555_i2cRegWrite (0x000x00);
      //第0本书
      Amp2555_i2cRegWrite (0x7f0x00);
      // LASSD,升压加电
      Amp2555_i2cRegWrite (0x050xa0);
      // LASSD,升压 Vsense 和 Isense 加电
      Amp2555_i2cRegWrite (0x050xa3);
      Amp2555_i2cRegWrite (TAS2555_REG_SPEAKER_CONTROL、0x3c);/*最小增益*/
      //开始取消静音
      //延迟
      BlockingDelayMs (0x01);
      //页0
      Amp2555_i2cRegWrite (0x000x00);
      //第0本书
      Amp2555_i2cRegWrite (0x7f0x00);
      // CLASSD,Isense 已取消静音
      Amp2555_i2cRegWrite (0x070x00);
      //本书100
      Amp2555_i2cRegWrite (0x7f0x64);
      // D 类软取消静音
      Amp2555_i2cRegWrite (0x070x00);
      //取消静音结束
    }
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Rich:

    感谢您共享 init 脚本。 我刚刚注意到这是与该主题相同的应用: https://e2e.ti.com/support/audio-group/audio/f/audio-forum/1192205/tas2555-tas2555evm

    我假设您现在要在正确的布局电路板上进行测试、对吗?

    我将再次核实默认 ROM 配置下的预期群延迟是多少。 然后、我将尝试使用这个简化的初始化脚本。

    器件在不断播放最新接收数据的一些采样时的行为似乎是在播放时丢失时钟而衍生出的问题。 您是否在停止时钟之前停止音频输入数据进行了测试? 在这种情况下、我假设在您停止时钟后、输出将是静默的。

    此致、
    -Ivan Salazar
    应用工程师

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    我认为我理解您的问题。 答案是、我已经通过多种不同的方式观察了放大器的行为。  

    I2S/DMA 数据缓冲器可保存一个完整的360度波形。 数据缓冲器的第一个元素位于音频过零(0度)上、而数据缓冲器的最后一个元素也位于音频过零(360度)上。  目的是  持续重复缓冲区。 但也为了使 I2S 数据与放大器的音频输出保持相位同步、以便 I2S 过零与音频过零尽可能一致。

    我最初是在应用程序以连续和不间断的状态运行时观察到音频相位延迟-无断点。 音频输出波看起来一直是精确的(但具有不必要的相位延迟)。   

    我尝试调试这个问题、添加了断点、发现当 PSoC6 MCU 停止时、MCU 上的 DMA 和 I2S 硬件将继续运行、这会破坏数据缓冲区的状态。 因此我需要重新结构代码以定期暂停并重新启动 I2S 和 DMA 时钟、这样便可以安全地放置断点。

    所以、或许可以 通过在我停止 I2S 和 DMA 时钟的同时停止放大器计时来解决重复数据问题? 如果是、正确的方法是什么?

    而且、我认为 您认为查看 ROM 模式1"群延迟"以校正我在音频输出上观察到的相位延迟的方法是正确的。

    谢谢。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Rich:

    感谢您提供更多详细信息。

    我使用 PPC3 ROM 模式配置在 EVM 上测试了 TAS2555、并使用了我在另一个 e2e 线程中提供的简化脚本。 两者具有相同的群延迟。 该值是~791.7us、对于48kHz 的采样率、这个值大约是38个样本。 这很可能直接源自内插滤波器。 您可以通过在初始播放中添加对应器延迟来进行测试、以便将 I2S 与模拟输出对齐。

    此致、
    -Ivan Salazar
    应用工程师

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    换句话说、你是否建议我可以预填充38个虚拟零样本、然后开始发送实数波形数据?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Rich:

    可以、这可以是群延迟的权变措施。

    此致、
    -Ivan Salazar
    应用工程师

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    伊凡、您好!

    我仍希望在不久的将来再次讨论团体延误问题。 但是,现在,我有一个新的问题给你...

    我注意到了更改 "电流限制"寄存器(0-0-0x2b)设置时出现的一些意外行为。 我使用此配置:

      //页0
      AMP_i2cRegWrite (0x000x00);
      //第0本书
      AMP_i2cRegWrite (0x7f0x00);
      //软件复位
      AMP_i2cRegWrite (0x010x01);
      //使用延迟>= 100us
      BlockingDelayMs (0x01);
      //静音/断电/复位结束
      // PLL 开始
      AMP_i2cRegWrite (0x000x00);
      AMP_i2cRegWrite (0x7f0x00);
      AMP_i2cRegWrite (0x000x01);
      AMP_i2cRegWrite (0x730x0F);
      AMP_i2cRegWrite (0x740x0d);
      AMP_i2cRegWrite (0x000x00);
      AMP_i2cRegWrite (0x7f0x64);
      AMP_i2cRegWrite (0x1b0x01);
      AMP_i2cRegWrite (0x1c0x07);
      AMP_i2cRegWrite (0x1d0x00);
      AMP_i2cRegWrite (0x1E0x00);
      AMP_i2cRegWrite (0x200x07);
      AMP_i2cRegWrite (0x220x08);
      AMP_i2cRegWrite (0x020x10);
      AMP_i2cRegWrite (0x210x04);
      AMP_i2cRegWrite (0x010x08);
      AMP_i2cRegWrite (0x2b0x00);
      AMP_i2cRegWrite (0x2C0x20);
      AMP_i2cRegWrite (0x1f0x20);
      AMP_i2cRegWrite (0x2a0x40);
      // PLL 结束
      AMP_i2cRegWrite (0x000x00);
      AMP_i2cRegWrite (0x7f0x00);
      AMP_i2cRegWrite (0x220x02);
      //加电1.
      //页0
      AMP_i2cRegWrite (0x000x00);
      //第0本书
      AMP_i2cRegWrite (0x7f0x00);
      // DSP、PLL、Ndiv、MDAC、mAdc 加电
      AMP_i2cRegWrite (0x040xF8);
      //加电3.
      //页0
      AMP_i2cRegWrite (0x000x00);
      //第0本书
      AMP_i2cRegWrite (0x7f0x00);
      // LASSD,升压加电
      AMP_i2cRegWrite (0x050xa0);
      // LASSD,升压 Vsense 和 Isense 加电
      AMP_i2cRegWrite (0x050xa3);
      AMP_i2cRegWrite (TAS2555_REG__SPEAKER_CONTROL0x54);/*最小增益*/
      //开始取消静音
      //延迟
      BlockingDelayMs (0x01);
      //页0
      AMP_i2cRegWrite (0x000x00);
      //第0本书
      AMP_i2cRegWrite (0x7f0x00);
      // CLASSD,Isense 已取消静音
      AMP_i2cRegWrite (0x070x00);
      //本书100
      AMP_i2cRegWrite (0x7f0x64);
      // D 类软取消静音
      AMP_i2cRegWrite (0x070x00);
      //取消静音结束
    请注意行"Amp_i2cRegWrite (0x2b、 0x00);"、它将 BOOST_ILIMIT 设置为1.5A -这个配置工作正常、可产生如下所示的所需波形:
    现在、如果我尝试将 current 命令行更改为"Amp_i2cRegWrite (0x2b、 0x03);"、这会将 BOOST_ILIMIT 设置为3.0A -这个配置根本无法进入稳定的波形、如下所示:
    在这两个测试之间、除了单行代码(相同的原型、相同的测试负载和布线、相同的探头线、相同的电源、以及没有其他代码更改)之外、没有其他任何变化。 我还在0x00和0x03之间来回切换了3次、以确认上述结果是可重复的。
    您是否想知道为什么简单地增加 BOOST_ILIMIT 会使放大器停止产生合适的波形(即使在相同的测试负载下也是如此)?
    谢谢!
    丰富
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Rich:

    这可能只是在执行命令时出现的问题。  请注意、针对0x2b 的命令实际上是 PLL 配置的一部分、即 Book 0x64的页0x00、而电流限制器配置位于 Book 0x00的页0x00的页0x00。

    请尝试在  PLL 配置结束后的某个位置添加您的命令"Amp_i2cRegWrite (0x2b、0x00);"、并通过之前对寄存器0x00和0x7F 的写入来确保您位于 Book 0 page 0。

    此致、
    -Ivan Salazar
    应用工程师

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    伊凡、您好!

    感谢您在错误的书籍中发现了我在更改注册表方面的错误。

    WeUpload 有 新问题。 我们看到在较低波形幅度(例如在过零附近)下放大器噪声增加。 这种噪声在较高振幅下不存在、您能看一下下面的图片并得出您的想法吗?  

    波形 I2S 是一个简单的正弦波形。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Rich:

    我将查看噪声的来源、并在下周早些时候分享更多评论。

    此致、
    -Ivan Salazar
    应用工程师