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.

[参考译文] TAC5211:TAC5211 没有'没有向 MCU 发送正确的数据

Guru**** 2573695 points
Other Parts Discussed in Thread: THS4531, TAC5211

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

https://e2e.ti.com/support/audio-group/audio/f/audio-forum/1572053/tac5211-tac5211-doesn-t-sent-proper-data-to-mcu

器件型号:TAC5211
主题:THS4531

工具/软件:

我有一个包括的定制板

麦克风

放大器 (THS4531)

编解码器 (TAC5211)

如下所示:

音频信号从麦克风发送到 THS4531(放大器)并进入 TAC5211 编解码器(在交流耦合差分模式下)。

我可以在 TAC5211 编解码器的输入端(在 IN1P 和 IN1M 处)看到正确的音频信号。

编解码器的 IN1P 和 IN1M 处的直流电压几乎为 1.3V。

我使用 I2C 对编解码器进行编程为:

Write(0x00, 0x00)	#Go to page 00
Write(0x01, 0x01)	#Software reset
			delay
Write(0x00, 0x00)	#Go to page 00
Write(0x02, 0x09)	#Exit Sleep mode and Turn ON VREF
Write(0x0D, 0x02)	#Enable GPI
Write(0x0F, 0x60)	#To use GPI1 as CCLK
Write(0x1A, 0x40)	#Select I2S mode and make it 16 bits
Write(0x50, 0x00)	#Single-ended AC-Coupled Input
Write(0x4D, 0x00)	#Set VREF to 2.75/full scale input
Write(0x76, 0x80)	#Power up ADC
Write(0x78, 0xA0)	#Power up ADC

然而、当我要通过 I2S 从编解码器读取音频信号时、我通常会读取 FFFF 值。

示波器测量显示 MCU 正在正确读取 I2S(即编解码器发送的信号不正确)。

您能帮助我了解配置中的问题吗?

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

    尊敬的 Abdulah:

    我不确定放大器电路的用途、但似乎您将麦克风从单端转换为差分、即使麦克风可以单独提供差分信号也是如此。 我认为这可能会使该输入信号变得不必要。 我建议移除多余的电路并将麦克风直接连接到 TAC5211 输入引脚上的交流耦合电容器、类似于 TAC5211 数据表第 227 页中的示例。

    此致、

    Garret

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

    我也尝试了该电路、但仍然没有正确的数据从编解码器传输到 MCU。

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

    尊敬的 Abdulah:

    您是否能够发送完整的电路原理图以及任何显示音频时钟和输出的示波器图像? 看到 FFFF 值时是否在读取 DOUT 引脚?

    您是否确认了对编解码器的 I2C 写入正常工作? 您是否对目标地址进行了编程?

    感谢您的任何澄清。

    此致、

    Garret

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

    这些是 IN1P 和 IN1M 处的模拟(音频)信号 — 交流耦合和直流耦合:



    MCLK 为 12.5MHz、BCLK 为 1.56MHz

      

    FSYNC 与 BCLK 的关系

      

    SDI 与 FSYNC 的关系

      

    SDI 与 BCLK 的关系

           

    这些是 I2S 信号、无论输入音频如何、它们都遵循相同的模式。

    大多数情况下它们是 FFFF 或 000x

    在 MCU 中、配置如下:

       数据位大小为 16 位

       时钟为 48KHz:

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

    尊敬的 Abdulah:

    很抱歉、但我很难理解您的问题。 I2S DOUT 是数字信号、因此只能读取 FFFF 或 0000、因此预计会出现此行为。  

    您认为数据传输不正确的原因是什么? 您是否有可以重建信号的数字接收器?

    此致、

    Garret

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

    正如您所指出的、MCU 正确读取了 I2S 数据。 IN1P IN1M 引脚的音频信号也是良好的。 (这里我播放了 1KHz 音频信号、我们看到的是 1KHz 模拟信号)。

    问题在于编解码器未向 MCU 发送正确的 I2S 数据、它会发送一些垃圾值。  

    可能是我的编解码器配置不正确还是 MCU 配置不好?

    谢谢

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

    尊敬的 Abdulah:

    我想我看到了这个问题。 GPI 只能配置为在控制器模式下接收 MCLK。 如果您从 MCU(目标模式)将时钟发送到 TAC5211、则 BCLK 用作输入时钟源、因此您只需要发送 BCLK 和 FSYNC。

    此外、BCLK 应与 FSYNC 同步的整数倍等于通道数 x 位深度。 在本例中、该比率为 32、因此 BCLK 应该为 1.536MHz。

    另一条建议是将输入阻抗设置为 10k Ω(写入 (0x50、0x10))、因为这是 16 位深度的首选。

    我建议使用 示例脚本(例如  EVM 用户指南第 31 页上的脚本) 作为起点(第二个示例与您的应用类似)、然后进行修改(16 位、10k Ω 输入阻抗)。

    此致、

    Garret

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

    正确、MCLK 连接到 GPI。  
    遗憾的是、了解控制器模式目标模式对我来说有点困惑。
    我想我应该将编解码器设置为目标模式。

    1 — 如何在编解码器中设置控制器模式或目标模式?  它是否有任何寄存器地址?
    2-如果我将编解码器设置为目标模式;MCU 配置是什么? 我是否应该在启用了主时钟输出的情况下将 STM MCU 保持为主模式(图)?

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

    尊敬的 Abdulah:

    在控制器模式下、编解码器生成 BCLK 和 FSYNC、MCU 接收这些数据。 在目标模式下、编解码器从 MCU 接收 BCLK 和 FSYNC。 编解码器可以在任一模式下接收 MCLK。

    1、控制器/目标模式在寄存器 0x37 中设置。 该寄存器还为控制器模式选择 CCLK 频率、不可以选择 12.5MHz。

    2.我不太熟悉这些 MCU 模式、但我认为“半双工主器件接收“是指 MCU 配置为接收 BCLK 和 FSYNC(这意味着编解码器应处于控制器模式)。

    以下是一个介绍可用时钟模式和相关寄存器配置的应用手册: https://www.ti.com/lit/an/slaaeg6a/slaaeg6a.pdf

     有关允许的 MCLK 频率、请参阅应用手册的第 8 页。 BCLK/FSYNC 也必须是第 4 页所示的整数倍。

    您当前代码的编解码器处于目标模式、其中 BCLK 作为输入时钟源(寄存器 0x34 = 0x40)。  在这种情况下、您不需要向编解码器提供 MCLK 、但 MCU 应配置为主输出模式、其 BCLK 是 FSYNC 的整数倍、如上面链接的应用手册第 4 页的表 2-2 所示。 这将输出 1.536MHz 的 BCLK、如上一帖子中所述 (BCLK/FSYNC = 32)。

    在目标模式下运行编解码器可能最简单、因为这是默认情况下的配置方式。 因此、您只需更改 MCU 模式和 BCLK 频率并断开 MCLK。

    此致、

    Garret