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.

[参考译文] TAA3020:配置寄存器后、TAA3020 通过 DOUT 引脚返回的 I2S 数据不正确、只有一个通道包含 I2S 波形中的数据。

Guru**** 2457760 points
Other Parts Discussed in Thread: TAA3020, TAA3020EVM-PDK

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

https://e2e.ti.com/support/audio-group/audio/f/audio-forum/1546462/taa3020-after-configuring-the-registers-the-i2s-data-returned-by-the-taa3020-through-the-dout-pin-is-incorrect-and-only-one-channel-contains-data-in-the-i2s-waveform

器件型号:TAA3020


工具/软件:

大家好!

我尝试使用 STM32L476RGT6 作为 MCU、并根据 TAA3020 数据表中的电路图(图 8-1)设计了自己的 PCB。 所有芯片引脚都路由至接头引脚。 MCU 的 SAI1 在中配置 主器件接收模式 、并向 TAA3020 的通道 1 施加 1.0V 直流电压、而通道 2 保持悬空。 MCU 配置代码如下所示:

  • 预期配置
    • TAA3020 的通道 1 和通道 2 都设置为:
      • 单端输入、标准 I2S 协议。
      • 帧同步 (FS) 频率= 44.1kHz、BCLK = 64 × FS。
      • 线路输入、模拟单端输入、直流耦合输入。
    • 当 FS 为低电平时、通道 1 的数据显示、当 FS 为高电平时、通道 2 的数据显示。

调试期间:

  1. 配置后、读取寄存器 0x76 会立即返回 0x00。
  2. 读取 0x76 后、读取寄存器 0x77 返回 0xC0。
  3. 配置后、使用 HAL_SAI_Receive_DMA() 通过逻辑分析仪捕获 I2S 数据会显示  仅在通道 1 上提供数据 、而通道 2 保持为 0x00。 此外、通道 1 数据不稳定并连续波动、这与预期的直流输入信号相矛盾。
  4. 无论直流信号施加到哪个通道、逻辑分析仪仅在 FS 为低电平时((FS 为高电平时无信号)显示 I2S 数据。

问题
此问题是否是由 MCU 上的寄存器配置不正确、硬件电路设计缺陷或 SAI1 模式设置不正确引起的? 专家能否提供故障排除指导? 谢谢!

I2CWrite(0x73,0xC0);
HAL_Delay(2);
I2CWrite(0x74,0xC0);
HAL_Delay(2);
I2CWrite(0x75,0xE0);
HAL_Delay(2);
I2CWrite(0x07,0x70);
HAL_Delay(2);
I2CWrite(0x13,0x00);
HAL_Delay(2);
I2CWrite(0x21,0x00);
HAL_Delay(2);
I2CWrite(0x3A,0x80);
HAL_Delay(2);
I2CWrite(0x3C,0x30);
HAL_Delay(2);
I2CWrite(0x41,0xB0);
HAL_Delay(2);

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

    您好、Zhao、

    您可以参阅数据表中提供的示例配置、了解基本 2 通道捕获的 I2C 写入序列、并包含根据您的要求而确定的其他 I2C 配置。

    以上示例适用于基于 TDM 的捕获。 要通过 I2S 获取 2 通道数据、您需要:

    1) 将第 0 页寄存器 0x07 设置为 0x70(32 位、I2S 模式)

    2) 将 CH1 和 CH2 输出时隙分别配置为左时隙 0 和右时隙 0。

    您的帖子中缺少的另一个配置是写入寄存器 0x02 以唤醒器件。

    谢谢。此致、

    Lakshmi Narasimhan

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

    我之前根据上面显示的代码配置了器件、但问题仍然存在。 芯片唤醒代码片段如下所示、此代码在寄存器配置代码之前执行。 此外、我还尝试将 I2C 脚本代码从 TAA3020EVM-PDK 移植到我的工程中、但问题仍未解决。 如果我们排除了软件级问题并将重点放在硬件上、根据图 8-1、可能会存在哪些潜在问题? 目前、我已将图 8-1 中通道 1 和 2 上最初存在的所有四个电容器替换为四个 0 欧姆电阻器。

    I2CWrite(0x02,0x81);
    HAL_Delay(2);
    I2CWrite(0x01,0x01);
    HAL_Delay(100);
    I2CWrite(0x00,0x00);
    I2CWrite(0x02,0x81);
    HAL_Delay(10);

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

    您好、Zhao、

    那么、除了示例代码之外、您也进行了 I2S 配置、仍然只能看到一个通道的数据?

    [报价 userid=“404443" url="“ url="~“~/support/audio-group/audio/f/audio-forum/1546462/taa3020-after-configuring-the-registers-the-i2s-data-returned-by-the-taa3020-through-the-dout-pin-is-incorrect-and-only-one-channel-contains-data-in-the-i2s-waveform/5948938

    1) 将第 0 页寄存器 0x07 设置为 0x70(32 位、I2S 模式)

    2) 将 CH1 和 CH2 输出时隙分别配置为左时隙 0 和右时隙 0。

    [/报价]

    此外、根据您的配置、该器件似乎配置为交流耦合输入、也如图 8-1 所示、因此需要安装电容器。

    谢谢。此致、

    Lakshmi Narasimhan

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

    首先、我要感谢您帮助我解决前一个问题。 现在、我想问:我应该使用什么公式将从 I2S 数据线接收到的数据转换为实际电压值?

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

    您好、Zhao、

    关于将 I2S 数据转换为电压:

    1) 器件以二进制补码 PCM 格式给出 I2S 数据、因此数据将转换为有符号整数格式。 对于 16 位捕获示例、0x0000 - 0x7FFF 的捕获数据范围对应正整数、0x8000 - 0xFFFF 对应负整数。

    2) 对于差分输入、ADC 的典型满量程输入为 2Vrms、对于正弦信号、该输入为+/–2.828Vpk。 这对应于捕获的峰值正负 I2S 数据。 如果“N"是“是源自前述 16 位 I2S 捕获示例的有符号整数、则与该数字样本对应的瞬时电压将为:

    电压 (V)= 2.828 *(N/(2^15))

    谢谢。此致、

    Lakshmi Narasimhan