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.

[参考译文] Linux/TLV320AIC3106:tlv320aic3106

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

https://e2e.ti.com/support/audio-group/audio/f/audio-forum/625973/linux-tlv320aic3106-tlv320aic3106

部件号:TLV320AIC3106
主题中讨论的其他部件:TPA2005D1,TLV320AIC3007

工具/软件:Linux

您好,先生,

我正在使用“tlv320aic3106”音频编解码器IC,“TPA2005D1”D类音频功率放大器,(4或8 )Ω 扬声器,位于线路输出[LET_LO+] 。 我可以获得输出,但那里有恒定的静电噪声。 如果没有任何ALSA设置,噪音就会更大,如果我启用任何 线路输出混合器,比如“Left line mixer PGAR bypass”,“Left line mixer PGAL bypass”,“Left line mixer line2L bypass”, 或“Left line mixer line 2R bypass”,并将该值设置为“0”,即静音 噪音会降低一点,但仍然存在。 我观察到的另一件事是,使用4欧姆扬声器时,噪声值比8欧姆扬声器大。

先生,请检查寄存器配置并建议我解决问题的方法。 我无法确定是硬件还是软件造成的。

静态连接u8 aic3x_reg[AIC3X_CACHEREGNUM]={
   0x00,0x00,0x00,0x10,   /* 0 */
   0x04,0x00,0x00,0x00,   /* 4 */
   0x00,0x00,0x00,0x01,   /* 8 */
   0x00,0x00,0x00,0x80,   /* 12 */
   0x80,0xff,0xff,0x78,   /* 16 */
   0x78,0x78,0x78,0x78,   /* 20 */
   0x78,0x00,0x00,0xFE,   /* 24 */
   0x00,0x00,0xFE,0x00,   /* 28 */
   0x18,0x18,0x00,0x00,   /* 32 */
   0x00,0x00,0x00,0x00,   /* 36 */
   0x00,0x00,0x00,0x80,   /* 40 */
   0x80,0x00,0x00,0x00,   /* 44 */
   0x00,0x00,0x00,0x04,   /* 48 */
   0x00,0x00,0x00,0x00,   /* 52 */
   0x00,0x00,0x04,0x00,   /* 56 */
   0x00,0x00,0x00,0x00,   /* 60 */
   0x00,0x04,0x00,0x00,   /* 64 */
   0x00,0x00,0x00,0x00,   /* 68 */
   0x04,0x00,0x00,0x00,   /* 72 */
   0x00,0x00,0x00,0x00,   /* 76 */
   0x00,0x00,0x00,0x00,   /* 80 */
   0x00,0x00,0x00,0x00,   /* 84 */
   0x00,0x00,0x00,0x00,   /* 88 */
   0x00,0x00,0x00,0x00,   /* 92 */
   0x00,0x00,0x00,0x00,   /* 96 */
   0x00,0x00,0x02,   /* 100 */
};

谨致问候

Pranav

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

    您好,Pranav,

    请提供所用寄存器设置的详细信息吗? 您发送的格式中不清楚哪个值对应于哪个注册表/页面。

    关于您的问题,建议通过PGA混音器输出路由DAC输出,以降低输出噪声,因为PGA具有集成的滤波器,不存在于DAC输出的直接路径上。 有关详细信息,请参阅本应用手册的2.5 部分。

    您听到的噪音可能与DAC调制器发出的带外噪音有关,DAC调制器通过D类放大器耦合回音频谱。 使用带外噪音滤波器可以避免这种情况,如 本应用说明中所述。 您的系统中是否有这样的过滤器? 您是否尝试过直接监控编解码器的输出以隔离编解码器的噪音问题?

    此致,

     -Diego Mel é ndez López ñ a
      音频应用工程师

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

    先生,我正在使用下面的注册表及其相应的名称,现在请您告诉我,我需要进行哪些修改才能解决此问题。

    Snd_SOC_WRITE (编解码器,AIC3X_PAGE_SELECT,PAGE0_SELECT);
       Snd_SOC_WRITE (编解码器,AIC3X_RESET,soft_reset);

       /* DAC默认音量和静音*/
       Snd_SOC_WRITE (CODEC,LDAC_VOL,DEFAULT_VOL | MUE_ON);
       Snd_SOC_WRITE (CODEC,RDAC_VOL,DEFAULT_VOL | MUE_ON);

       /* DAC到HP默认卷并路由到输出混音器*/
       Snd_SOC_WRITE (CODEC,DACL1_2_HPLOUT_VOL,DEFAULT_VOL | ROUTE_ON);
       Snd_SOC_WRITE (CODEC,DACR1_2_HPROUT_VOL,DEFAULT_VOL | ROUTE_ON);
       Snd_SOC_WRITE (CODEC,DACL1_2_HPLCOM_VOL,DEFAULT_VOL | ROUTE_ON);
       Snd_SOC_WRITE (CODEC,DACR1_2_HPRCOM_VOL,DEFAULT_VOL | ROUTE_ON);
       /* DAC至线路输出默认音量并路由至输出混音器*/
       Snd_SOC_WRITE (CODEC,DACL1_2_LLOPM_VOL,DEFAULT_VOL | ROUTE_ON);
       Snd_SOC_WRITE (CODEC,DACR1_2_RLOPM_VOL,DEFAULT_VOL | ROUTE_ON);
       /* DAC至单声道线路输出的默认音量,并路由至输出混音器*/
       Snd_SOC_WRITE (CODEC,DACL1_2_MONOLOPM_VOL,DEFAULT_VOL | ROUTE_ON);
       Snd_SOC_WRITE (CODEC,DACR1_2_MONOLOPM_VOL,DEFAULT_VOL | ROUTE_ON);

       /*取消所有输出的静音*/
       reg = snd_so_read (codec,LLOPM_CTRL);
       Snd_SOC_WRITE (CODEC,LLOPM_CTRL,reg |取消静音);
       reg = snd_so_read (codec,RLOPM_CTRL);
       Snd_SOC_WRITE (CODEC,RLOPM_CTRL,reg |取消静音);
       reg = snd_soc_read(codec, MONOLOPM_CTRL);
       Snd_SOC_WRITE (CODEC,MONOLOPM_CTRL,reg |取消静音);
       reg = snd_so_read (codec,HPLOUT_CTRL);
       Snd_SOC_WRITE (CODEC,HPLOUT_CTRL,reg |取消静音);
       REG = Snd_SOC_READ (CODEC,HPROUT_CTRL);
       Snd_SOC_WRITE (CODEC,HPROUT_CTRL,reg |取消静音);
       reg = snd_so_read (codec,HPLCOM_CTRL);
       Snd_SOC_WRITE (CODEC,HPLCOM_CTRL,reg |取消静音);
       reg = snd_so_read (codec,HPRCOM_CTRL);
       Snd_SOC_WRITE (CODEC,HPRCOM_CTRL,reg |取消静音);

       /* ADC默认音量和取消静音*/
       Snd_SOC_WRITE (CODEC,LADC_VOL,DEFAULT_Gain);
       Snd_SOC_WRITE (CODEC,RADC_VOL,DEFAULT_Gain);
       /*默认路由线路1到ADC PGA混音器*/
       Snd_SOC_WRITE (CODEC,LINE1L_2_LADC_CTRL,0x0);
       Snd_SOC_WRITE (CODEC,LINE1R_2_RADC_CTRL,0x0);

       /* PGA至HP旁路默认音量,断开输出混音器*/的连接
       Snd_SOC_WRITE (CODEC,PGAL_2_HPLOUT_VOL,DEFAULT_VOL);
       Snd_SOC_WRITE (CODEC,PGAR_2_HPROUT_VOL,DEFAULT_VOL);
       Snd_SOC_WRITE (CODEC,PGAL_2_HPLCOM_VOL,DEFAULT_VOL);
       Snd_SOC_WRITE (CODEC,PGAR_2_HPRCOM_VOL,DEFAULT_VOL);
       /* PGA至线路输出默认音量,断开输出混音器*/的连接
       Snd_SOC_WRITE (CODEC,PGAL_2_LLOPM_VOL,DEFAULT_VOL);
       Snd_SOC_WRITE (CODEC,PGAR_2_RLOPM_VOL,DEFAULT_VOL);
       /* PGA至Mono Line Out (线路输出)默认音量,断开与Output Mixer */(输出混音器)的连接
       Snd_SOC_WRITE (CODEC,PGAL_2_MONOLOPM_VOL,DEFAULT_VOL);
       Snd_SOC_WRITE (CODEC,PGAR_2_MONOLOPM_VOL,DEFAULT_VOL);

       /*线路2到HP旁路默认音量,从输出混音器*/断开连接
       Snd_SOC_WRITE (CODEC,LINE2L_2_HPLOUT_VOL,DEFAULT_VOL);
       Snd_SOC_WRITE (CODEC,LINE2R_2_HPROUT_VOL,DEFAULT_VOL);
       Snd_SOC_WRITE (CODEC,LINE2L_2_HPLCOM_VOL,DEFAULT_VOL);
       Snd_SOC_WRITE (CODEC,LINE2R_2_HPRCOM_VOL,DEFAULT_VOL);
       /* Line2 Line Out默认音量,与输出混音器断开*/
       Snd_SOC_WRITE (CODEC,LINE2L_2_LLOPM_VOL,DEFAULT_VOL);
       Snd_SOC_WRITE (CODEC,LINE2R_2_RLOPM_VOL,DEFAULT_VOL);
       /*线路2至Mono Out默认音量,断开与输出混音器*/的连接
       Snd_SOC_WRITE (CODEC,LINE2L_2_MONOLOPM_VOL,DEFAULT_VOL);
       Snd_SOC_WRITE (CODEC,LINE2R_2_MONOLOPM_VOL,DEFAULT_VOL);

     ====================================================================================================================================================================================================================================================================================================================================================================================================================================================================================
    /* AIC3X寄存器空间*/
    #define AIC3X_CACHEREGNUM      103

    /*页面选择REGISTER */
    #define AIC3X_PAGE_SELECT      0
    /*软件重置寄存器*/
    #define AIC3X_reset         1.
    /*编解码器采样率选择寄存器*/
    #define AIC3X_SAMPLE_RATE_SEL_REG   2.
    /* PLL编程寄存器A */
    #define AIC3X_PLL_PROGA_REG      3.
    /* PLL编程寄存器B */
    #define AIC3X_PLL_PROGB_REG      4.
    /* PLL编程寄存器C */
    #define AIC3X_PLL_PROGC_REG      5.
    /* PLL编程寄存器D */
    #define AIC3X_PLL_PROGD_REG      6.
    /*编解码器数据路径设置寄存器*/
    #define AIC3X_CODEC数据路径_REG   7.
    /*音频串行数据接口控制寄存器A */
    #define AIC3X_ASD_INTF_CtrlA      8.
    /*音频串行数据接口控制寄存器B */
    #define AIC3X_ASD_INTF_CtrlB      9.
    /*音频串行数据接口控制寄存器C */
    #define AIC3X_ASD_INTF_CtrlC      10.
    /*音频溢出状态和PLL R值编程寄存器*/
    #define AIC3X_OVRF_STATUS_AND_PLLR_REG   11.
    /*音频编解码器数字滤波器控制寄存器*/
    #define AIC3X_CODCOD_DFILT_CTRL      12.
    /*头戴式耳机/按键检测寄存器*/
    #define AIC3X_header_detect_CTRL_A   13.
    #define AIC3X_header_detect_CTRL_B   14.
    /* ADC PGA增益控制寄存器*/
    #define LADC_VOL         15.
    #define RADC_VOL         16.
    /* MIC3控制寄存器*/
    #define MIC3LR_2_LADC_CTRL      17.
    #define MIC3LR_2_RADC_CTRL      18.
    /* Line1输入控制寄存器*/
    #define LINE1L_2_LADC_CTRL      19.
    #define LINE1R_2_LADC_CTRL      21.
    #define LINE1R_2_RADC_CTRL      22.
    #define LINE1L_2_RADC_CTRL      24.
    /* Line2输入控制寄存器*/
    #define LINE2L_2_LADC_CTRL      20.
    #define LINE2R_2_RADC_CTRL      23.
    /* MICBIAS控制寄存器*/
    #define MICBIAS_CTRL         25.

    /* AGC控制寄存器A,B,C */
    #define LAGC_CTRL_A         26.
    #define LAGC_CTRL_B         27.
    #define LAGC_CTRL_C         28.
    #define ragc_CTRL_A         29.
    #define ragc_CTRL_B         30.
    #define ragc_CTRL_C         31.

    /* DAC功率和左高功率输出控制寄存器*/
    #define DAC_PWR             37.
    #define HPLCOM_CFG         37.
    /*右侧高功率输出控制寄存器*/
    #define HPRCOM_CFG         38.
    /* DAC输出开关控制寄存器*/
    #define DAC_LINE_MUX         41.
    /*高功率输出驱动器POP缩减寄存器*/
    #define HPOUT_POP_REDUduction      42.
    /* DAC数字控制寄存器*/
    #define LDAC_VOL         43.
    #define RDAC_VOL         44.
    /*左高功率输出控制寄存器*/
    #define LINE2L_2_HPLOUT_VOL      45.
    #define PGAL_2_HPLOUT_VOL      46.
    #define DACL1_2_HPLOUT_VOL      47.
    #define LINE2R_2_HPLOUT_VOL      48
    #define PGAR_2_HPLOUT_VOL      49
    #define DACR1_2_HPLOUT_VOL      50
    #define HPLOUT_CTRL         51.
    /*左高功率COM控制寄存器*/
    #define LINE2L_2_HPLCOM_VOL      52.
    #define PGAL_2_HPLCOM_VOL      53.
    #define DACL1_2_HPLCOM_VOL      54.
    #define LINE2R_2_HPLCOM_VOL      55
    #define PGAR_2_HPLCOM_VOL      56.
    #define DACR1_2_HPLCOM_VOL      57.
    #define HPLCOM_CTRL         58.
    /*右侧高功率输出控制寄存器*/
    #define LINE2L_2_HPROUT_VOL      59.
    #define PGAL_2_HPROUT_VOL      60
    #define DACL1_2_HPROUT_VOL      61.
    #define LINE2R_2_HPROUT_VOL      62.
    #define PGAR_2_HPROUT_VOL      63
    #define DACR1_2_HPROUT_VOL      64
    #define HPROUT_CTRL         65
    /*右高功率COM控件寄存器*/
    #define LINE2L_2_HPRCOM_VOL      66
    #define PGAL_2_HPRCOM_VOL      67
    #define DACL1_2_HPRCOM_VOL      68
    #define LINE2R_2_HPRCOM_VOL      69
    #define PGAR_2_HPRCOM_VOL      70
    #define DACR1_2_HPRCOM_VOL      71
    #define HPRCOM_CTRL         72.
    /*单声道输出加/减控制寄存器*/
    #define LINE2L_2_MONOLOPM_VOL      73.
    #define PGAL_2_MONOLOPM_VOL      74
    #define DACL1_2_MONOLOPM_VOL      75
    #define LINE2R_2_MONOLOPM_VOL      76
    #define PGAR_2_MONOLOPM_VOL      77
    #define DACR1_2_MONOLOPM_VOL      78
    #define MONOLOPM_CTRL         79
    tlv320aic3007 */上的/* D类扬声器驱动程序
    #define CLASSD_CTRL         73.
    /*左行输出加/减控制寄存器*/
    #define LINE2L_2_LLOPM_VOL      80
    #define PGAL_2_LLOPM_VOL      81.
    #define DACL1_2_LLOPM_VOL      82
    #define LINE2R_2_LLOPM_VOL      83.
    #define PGAR_2_LLOPM_VOL      84
    #define DACR1_2_LLOPM_VOL      85
    #define LLOPM_CTRL         86
    /*右线路输出加/减控制寄存器*/
    #define LINE2L_2_RLOPM_VOL      87
    #define PGAL_2_RLOPM_VOL      88
    #define DACL1_2_RLOPM_VOL      89
    #define LINE2R_2_RLOPM_VOL      90
    #define PGAR_2_RLOPM_VOL      91
    #define DACR1_2_RLOPM_VOL      92
    #define RLOPM_CTRL         93.
    /* GPIO / IRQ寄存器*/
    #define AIC3X_STICK_IRQ_FLAGS_REG   96
    #define AIC3X_RT_IRQ_flags_REG      97
    #define AIC3X_GPIO1_REG         98
    #define AIC3X_GPIO2_REG         99
    #define AIC3X_GPIOA_REG         100
    #define AIC3X_GPIOB_REG         101
    /*时钟生成控制寄存器*/
    #define AIC3X_CLKGEN_CTRL_REG      102

    /*页面选择寄存器位*/
    #define PAGE0_select      0
    #define Page1_select      1.

    /*音频串行数据接口控制寄存器A位*/
    #define bit_clk_master         0x80
    #define WORD_CLK_MASTER        0x40

    /*编解码器数据路径设置寄存器7 */
    #define FSREF_4.41万      (1 <<7)
    #define FSREF_4.8万      (0 << 7)
    #define dual_rate模式      ((1 <<5)|(1 <<6))
    #define LDAC2LCH      (0x1<<3)
    #define RDAC2RCH      (0x1<<1)(#define RDAC2RCH [0x1<1])

    /* PLL寄存器位字段*/
    #define PLLP_SHIFT      0
    #define PLLP_MASK      7.
    #define PLLQ_SHIFT      3.
    #define PLLR_SHIFT      0
    #define PLLJ_SHIFT      2.
    #define PLLD_MSB_SHIFT      0
    #define PLLD_LSB_SHIFT      2.

    /*时钟生成寄存器位*/
    #define codec_CLKIN_PLLDIV   0
    #define codec_CLKIN_CLKDIV   1.
    #define PLL_CLKIN_SHIFT      4.
    #define MCLK_SOURCE      0x0
    #define PLL_CLKDIV_SHIFT   0

    /*软件重置寄存器位*/
    #define soft_reset      0x80

    /* PLL编程寄存器A位*/
    #define PLL_ENABLE      0x80

    /*路由位*/
    #define route_on      0x80

    /*静音位*/
    #定义取消静音         0x08
    #define mute_on         0x80

    /*功率位*/
    #define LADC_PWR_ON      0x04
    #define RADC_PWR_ON      0x04
    #define LDAC_PWR_ON      0x80
    #define RDAC_PWR_ON      0x40
    #define HPLOUT_PWR_ON      0x01
    #define HPROUT_PWR_ON      0x01
    #define HPLCOM_PWR_ON      0x01
    #define HPRCOM_PWR_ON      0x01
    #define MONOLOPM_PWR_ON      0x01
    #define LLOPM_PWR_ON      0x01
    #define RLOPM_PWR_ON   0x01

    #define inver_vol (val)  (0x7f - val)

    /*默认输出音量(反转)*/
    #define default_VOL    inver_VOL (0x50)
    /*默认输入音量*/
    #define default_gain   0x20

    void aic3x_set_gPIO(struct snd_soc_codec *codec, int gPIO, int state);
    int aic3x_GET_GPIO (struct snd_soc_codec *codec, int gpi);

    /*耳机检测/按钮API */

    /* AIC3x支持立体声耳机检测(GND +左+右信号)
     *和蜂窝耳机(GND +扬声器输出+麦克风输入)。
     *建议启用MIC偏置以使此功能正常工作。
     *有关详细信息,请参阅数据表。 */
    枚举{
       AIC3X_header_detect_off   = 0,
       AIC3X_headset_detect_Stereo   = 1,
       AIC3X_header_detect_cellular  = 2,
       AIC3X_header_detect_both   =3.
    };

    枚举{
       AIC3X_headset_debounce_16ms   =0,
       AIC3X_Headset_debounce_32ms   = 1,
       AIC3X_headset_debounce_64MS   = 2,
       AIC3X_headset_debounce_128MS   =3,
       AIC3X_headset_debounce_256MS   =4,
       AIC3X_headset_debounce_512MS   =5
    };

    枚举{
       AIC3X_button_debounce_0ms   =0,
       AIC3X_button_debounce_8ms   = 1,
       AIC3X_button_debounce_16ms   =2,
       AIC3X_button_debounce_32ms   = 3
    };

    #define AIC3X_header_detect_enabled   0x80
    #define AIC3X_header_detect_shift   5.
    #define AIC3X_header_detect_mask   3.
    #define AIC3X_header_debounce_shift   2.
    #define AIC3X_header_debounce_mask   7.
    #define AIC3X_button_debounce_shift   0
    #define AIC3X_button_debounce_mask   3.

    /*有关此函数的有效参数,请参见上面的枚举*/
    void aic3x_set_headset_detects(struct snd_soc_codec*codec, int detect,
                int header_debounce, int button_debounce);
    int aic3x_headset_detected(struct snd_soc_codec *codec);
    int aic3x_button_pressed (结构snd_soc_codec *codec);

    #endif /*_AIC3X_H */