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.

[参考译文] TLV320AIC3104:配置tlv320aic3104以播放I2S的声音并从Line2接收I2S数据

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

https://e2e.ti.com/support/audio-group/audio/f/audio-forum/629666/tlv320aic3104-configuring-tlv320aic3104-to-play-sound-from-i2s-and-to-receive-i2s-data-from-line2

部件号:TLV320AIC3104

您好,

我在配置tlv320aic3104时遇到一些问题。

我想将编解码器用于两个目的:

1.将48克的I2S帧发送到编解码器,并通过HPLCOM/HPRCOM路由它

2.接收从第2行输入采样的I2S数据。

我的MCLK为12.28MHz,

UC作为I2S主模式工作。

以下是我的寄存器配置:

      AUDIO_REG_W (0x01,0x08);

      AUDIO_REG_W (0x11,0x0F);

      AUDIO_REG_W (0x12,0xF0);

      AUDIO_REG_W (0x0F,0x00);
      AUDIO_REG_W (0x10,0x00);
      AUDIO_REG_W (0x07,0x0A);

      AUDIO_REG_W (0x25,0xC0);

      AUDIO_REG_W (0x2B,0x00);

      AUDIO_REG_W (0x2C,0x00);

      AUDIO_REG_W (0x52,0x80);
      AUDIO_REG_W (0x5C,0x80);

      AUDIO_REG_W (0x56,0x09);

      AUDIO_REG_W (0x5D,0x09);
      AUDIO_REG_W (0x3A,0x0C);
      AUDIO_REG_W (0x48,0x0C);
      
      
      AUDIO_REG_W (Codec_Sample_Rate_Select_Register,34);

      AUDIO_REG_W (PLL_Programming_Register_A,129);
      AUDIO_REG_W (PLL_Programming_Register_B,32);
      AUDIO_REG_W (PLL_Programming_Register_C,30);
      AUDIO_REG_W (PLL_Programming_Register_D,0);

      AUDIO_REG_W (Codec_dataath_Setup_Register,10);

请提供建议,

e2e.ti.com/.../ETH2AUDIO_2D00_sch.pdf

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

    很遗憾听到您遇到一些问题。 我很乐意为您提供帮助。

    您是否介意评论您的寄存器写的内容? 实际上,您只需评论每个寄存器写的内容即可找到问题。 这些意见也将使我更容易迅速地跟进。

    此外,如果您尚未阅读标题为TLV320AIC3104 Programming Made Easy的应用说明,本文档可以大大简化操作,我看到您正在执行一些PLL寄存器写入操作,如果您运行12.288Mhz MCLK,则不必执行这些操作。

    此致,

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

    感谢您的回答。

    下面是我的注册顺序:

          AUDIO_REG_W (0x01,0x08);//重置

          AUDIO_REG_W (MIC2LRtoLeftADCControlRegister,0x0F);

          AUDIO_REG_W (MIC2LINE2TORightADCControlRegister,0xF0);

          AUDIO_REG_W (LeftADCPGAGainControlRegister,0x00);
          AUDIO_REG_W (RightADCPGAGainControlRegister,0x00);
          AUDIO_REG_W (CodecDataPathSetupRegister,0x0A);

          AUDIO_REG_W (DACPowerandOutputDriverControlRegister,0xC0);

          AUDIO_REG_W (LeftDACDigitalVolumeControlRegister,0x00);

          AUDIO_REG_W (RightDACDigitalVolumeControlRegister,0x00);

          AUDIO_REG_W (HPLCOMOutputLevelControlRegister, 0x0C);
          AUDIO_REG_W (HPRCOMOutputLevelControlRegister,0x0C);

          AUDIO_REG_W (Codec_Sample_Rate_Select_Register,34);

          AUDIO_REG_W (PLL_Programming_Register_A,129);
          AUDIO_REG_W (PLL_Programming_Register_B,32);
          AUDIO_REG_W (PLL_Programming_Register_C,30);
          AUDIO_REG_W (PLL_Programming_Register_D,0);

          AUDIO_REG_W (Codec_dataath_Setup_Register,10);

          AUDIO_REG_W (DACOutputSwitchingControlRegister,160);

    此处定义:

    #Define Software_Reset_Register                            1.
    #define Codec_Sample_Rate_Select_Register                   二
    #define PLL_Programming_Register_A                         3.
    #define PLL_Programming_Register_B                         4.
    #define PLL_Programming_Register_C                         5.
    #define PLL_Programming_Register_D                         6.
    #define Codec_datapath_Setup_Register                      7.
    #define MIC2LRtoLeftADControlRegister                      17.
    #define MIC2LINE2toRightADCControlRegister                   18.
    #define LeftADCPGAGainControlRegister                      15.
    #define RightADCPGAGainControlRegister                      16.
    #Define CodecDataPathSetupRegister                         7.
    #define DACPowerandOutputDriverControlRegister                37.
    #define LeftDACDigitalVolumeControlRegister                   43.
    #define RightDACDigitalVolumeControlRegister                44.
    #define HPLCOMOutputLevelControlRegister                   58.
    #define HPRCOMOutputLevelControlRegister                   72.
    #define DACOutputSwitchingControlRegister                   41.

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

    Cezary,

    我刚才看了一眼,但是你的第一个寄存器写的是写保留的位。
    AUDIO_REG_W (0x01,0x08);//重置
    位7是您应该切换的唯一位,写入应为(Audio_REG_W(0x01,0x80)


    您是否能够查看建议的应用说明? 这里有很多有用的信息,可以帮助您快速启动和运行。  

    此致,

    -Steve Wilson

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

    您好,

    我已经一次又一次地重新检查了我的注册配置... 经过几次调整后,我取得了成功。 这是我的代码。 也许它会帮助他人:

          Audio_REG_W (SoftwareResetRegister,0x80);//重置
          AUDIO_REG_W (CodecDataPathSetupRegister,0x0A);

          //输入ADC
          AUDIO_REG_W (LeftADCPGAGainControlRegister,0x0F);
          AUDIO_REG_W (RightADCPGAGainControlRegister,0x0F);
          AUDIO_REG_W (MIC2LRtoLeftADCControlRegister,0xF0);
          AUDIO_REG_W (MIC2LINE2TORightADCControlRegister,0x0F);
          AUDIO_REG_W (MIC1LPLINE1LPtoLeftADCControlRegister,0x04);
          AUDIO_REG_W (MIC1RPLINE1RPtoRightADCControlRegister,0x04);
          ////////////////////////////////////

          //输出DAC
          AUDIO_REG_W (DACPowerandOutputDriverControlRegister,0xE0);
          AUDIO_REG_W (DACOutputSwitchingControlRegister,0x00);
          AUDIO_REG_W (LeftDACDigitalVolumeControlRegister,0x00);
          AUDIO_REG_W (RightDACDigitalVolumeControlRegister,0x00);
          ////////////////////////////////////

          //输出放大器
          AUDIO_REG_W (HighPowerOutputDriverControlRegister,0x10);
          AUDIO_REG_W (DAC_R1toHPLCOMVolumeControlRegister,0x8D);
          AUDIO_REG_W (HPLCOMOutputLevelControlRegister, 0x2D);
          AUDIO_REG_W (DAC_R1toHPRCOMVolumeControlRegister,0x8D);
          AUDIO_REG_W (HPRCOMOutputLevelControlRegister,0x2D);

    ////////////////////////////////////////

    定义:

    #Define SoftwareResetRegister                            1.
    #define Codec_Sample_Rate_Select_Register                   二
    #define PLL_Programming_Register_A                         3.
    #define PLL_Programming_Register_B                         4.
    #define PLL_Programming_Register_C                         5.
    #define PLL_Programming_Register_D                         6.
    #Define CodecDataPathSetupRegister                         7.
    #define MIC2LRtoLeftADControlRegister                      17.
    #define MIC2LINE2toRightADCControlRegister                   18.
    #define MIC1LPLINE1LPtoLeftADControlRegister                19.
    #define MIC1RPLINE1RPtoRightADControlRegister                22.
    #define LeftADCPGAGainControlRegister                      15.
    #define RightADCPGAGainControlRegister                      16.
    #define DACPowerandOutputDriverControlRegister                37.
    #Define HighPowerOutputDriverControlRegister                38.
    #define DACOutputSwitchingControlRegister                   41.
    #define LeftDACDigitalVolumeControlRegister                   43.
    #define RightDACDigitalVolumeControlRegister                44.
    #define PGA_LtoHPLCOMVolumeControlRegister                   53.
    #define DAC_R1toHPLCOMVolumeControlRegister                   57.
    #define HPLCOMOutputLevelControlRegister                   58.
    #define PGA_RtoHPRCOMVolumeControlRegister                   70
    #define DAC_R1toHPRCOMVolumeControlRegister                   71.
    #define HPRCOMOutputLevelControlRegister                   72.

    STM32F429代码:

    UINT16_t TxBuffer[2048];
    UINT16_t RxBuffer[2048];

    HAL_I2SEx_TransmitReceive_DMA (&hi2s3,TxBuffer,RxBuffer,2048);

    uINT16_t k=0;

       对于(k=0;k<2048;k++)
       {
          TxBuffer[k]= RxBuffer[k];
       }

    只要我们将缓冲区复制到缓冲区,我们就可以绕过从Line2到HPLCOM/HPRCOM的声音(数字)。

    感谢你们的支持和激励:)

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

    您好,

    我想问一个类似的问题,虽然唯一的区别是我使用BCLK作为输入参考时钟。

    FS为48 kHz,PLL配置如下:

    P=1,R=1,K=J=63 63.833.7662万 ,D=8337

    PLL配置如下:

    REG 4 (PLL Reg B)= 0xFC // J=63

    REG 5 (PLL Reg C)= 0x82

    REG 6 (PLL Reg D)= 0x44

    REG 3 (PLL Reg A)= 0x81 // PLL打开,P=1

    REG 102 (时钟生成控制寄存器)= 0x22 // PLLCLK_In使用BCLK

    我只能听到噪音,没有有用的声音。 我看到编解码器在打开和关闭左DAC时作出反应,当我切换此选项时,我可以听到枪声。

    不幸的是,我找不到一些寄存器来读取PLL的状态以及它是否处于锁定状态。

    数据表显示最小输入频率为512 kHz,主中继器的BCLK为1.54 MHz,因此应该可以正常工作。

    此外,我无法识别扬声器中PLL设置的任何更改。

    提前感谢您的建议

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

    很遗憾听到您遇到了一些问题。 我看了一下你们所有的注册内容,它们看起来很好。 当您说您只能听到噪音时,我们是否在谈论标准噪声基准? 或者,您的意思是存在异常噪音吗?

    我将继续研究这一问题,并在明天与您再次进行探讨。

    此致,
    -Steve
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    在我看来,地板很吵。 我也找到了这篇文章: e2e.ti.com/.../232.7831万

    他们说PLL配置应使用D=0。 如果您查看数据表,您将看到如果D=0,则条件为2MHz<=PLLCLK_IN/P<=20MHz。 但是,给定的POST显示为512Khz<=PLL_CLKIN/P<=20MHz。 所以,请您确认一下。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    也许您应该配置寄存器8。 ?

    有配置BCLK作为输出。

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

    编解码器应该是总线上的从属编解码器,因此BCLK是从上而来的,应该用作参考。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    在我的应用程序中,我也使用BCLK作为输入。 (向上是主机)。
    尝试调整MCLK以获得12.28 MHz。 它使它更容易;)
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我没有任何MCLK,此引脚未连接,因此唯一的方法是配置PLL。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我认为,这是完全行不通的。
    内部编解码器处理器需要MCLK (MCLK必须是FS的256倍)。
    如果可能,尝试将外部振荡器连接到MCLK引脚。 可能适合LFSPXO2.4435万散装。

    请阅读DS:
    10.3 Tm2数字音频数据串行接口
    10.3 .3.1 音频时钟生成
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    也许"BCLK输入也可用于生成内部音频主时钟。"DS中提到的是您的概念,但我认为这不是好的解决方案。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    是的,我正在使用BCLK作为参考时钟输入。 问题出在PLL配置中。 数据表显示输入时钟可以是512Khz,但后来他们说2MHz是最小值。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    问题是编解码器与UP之间的连接错误。 DIN与DIN连接。 解决后一切正常。 只需遵循数据表,2MHz<=PLLCLK_IN/P<=50MHz的部分除外。 我正在使用1.54 MHz,尽管FS不是48 kHz,而是48.125 kHz。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    Nemanja,

    我相信我找到了你困惑的根源。 在数据表中讨论MCLK时,给定范围为512K-50MHz。 在第23页上,它表示:

    "该设备可以接受从512 kHz到50 MHz的MCLK输入,然后可以通过其中一个
    可编程分频器或PLL,以获得设备所需的正确内部音频主时钟"

    虽然MCLK可以是512K-50MHz, 但这并不意味着PLL可以在整个频率范围内使用。  

    在第 24页的PLL部分。  给出了PLL要求。  (参见下图)  

    这将解释您的问题。  遗憾的是,在您的案例中没有使用BCLK的解决方案。  

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    很有趣 在PLL锁定时,可能会有性能折衷,我鼓励您进行全面测试,以确保性能达到您的满意程度
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    以前我还遇到过DIN-DIN,DOUT-DOUT连接问题;)

    这就是为什么在当前版本中我使用4个电阻器0r只是为了保存;)

    查看示意图。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    这两种情况会造成绝对的混乱,因为它们会在PLLCLK_In低至512 kHz之前与信息发生冲突。 但是,1.54 MHz的BCLK是一个非常典型的应用(16位48kHz采样率),我不知道为什么他们在设计芯片时没有考虑到这种情况,但没关系,它是有效的。 至于表演,这是今后将要调查的问题。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    Nemanja,

    我同意这种措辞可能会导致混淆,但它并不表示PLLCLK_In可以低至512K。 它表示MCLK的范围是512khz到50MHz。 没错。 PLL有自己的单独限制,这些限制似乎侧重于与MCLK配合使用,MCLK最常用。 这些设备非常灵活,这种灵活性可能非常强大,但与所有灵活设备一样,有时可能导致某些特定的配置,而这些配置可能看起来不理想。 是否没有其它系统时钟可供使用? 微控制器的时钟是什么?

    我确信在创建此设备的过程中,设计过程中有许多考虑因素,其中许多因素需要权衡取舍。

    此致,
    -Steve Wilson