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.

[参考译文] TLV320AIC33:TLV320AIC33IRGZR

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

https://e2e.ti.com/support/audio-group/audio/f/audio-forum/1481231/tlv320aic33-tlv320aic33irgzr

器件型号:TLV320AIC33

工具与软件:

您好、TI 的专家

我们的音频产品多年来一直在 AM335x 平台上使用 TLV320AIC33/TLV330AIC3106音频编解码器芯片。 最近、在客户使用过程中、少数设备偶尔会遇到声卡无法播放音频的问题。 恢复现场正常运行的唯一方法是拔下并重新插入外部电源。 此过程恢复正常功能后、问题可能会在几天后再次出现。

我们尝试了以下步骤:

 1.回放失败时、我们通过 i2cset 命令对 AIC3x 的软件复位寄存器进行配置以执行软复位、然后重新启动音频应用程序过程(在内部初始化并配置 AIC3x)以播放音频文件。 但是、发现仍然无法播放音频。
 2.此外、我们使用 i2cdump 命令转储当前寄存器的设置、并在问题发生之前和之后对这些设置进行比较、发现它们没有区别。 在不关闭主板电源的情况下、手动向芯片的 RESET 引脚发送复位信号并执行硬复位可以正常播放声音。

导致这种现象的原因可能是什么?您对故障排除有什么建议???

(内部我们倾向于认为音频芯片内部存在异常的工作状态、但对于造成这种异常状态的原因、无论是硬件还是软件、目前还没有明确的结论。)

 

此致、

 Li Min

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

    您好!  

    您能否提供器件的 i2cdump? 我看到您说过您发现问题发生和不发生的 i2cdump 之间没有区别、因此如果一个转储完全相同、那么只需一个转储就可以了。 您正在提供什么 I2S 时钟? 可能是时钟错误问题、或者电源电路中存在电压尖峰、从而扰乱操作。 另一个问题-发生这种情况时、ADC 是出现问题还是仅 DAC 侧出现问题?

    此致!
    MIR

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

    #1。  这是器件的 i2cdump。 事实上,有一些分歧;但似乎它们不应该是问题的原因。

    root@ITC:~/AUDIO_TEST_FILE# i2cdump -f -y 1 0x1b    #### 无声音输出、播放失败、转储 AIC33寄存器######## !!!!!
    未指定大小(使用字节数据访问)
    0 1 2 3 4 5 6 7 8 9 A b c d e f 0123456789abcdef
    00:00 00 00 91 10 0f 00 0A c0 40 00 01 00 a0 10 07 ...??????????????????@?
    10:07 33 ff fc 98 F8 fc 98 F8 04 00 Fe 00 00 fe 00?3. …………………………………
    20: 00 00 00 00 44 c0 00 00 00 00 00 00 00 5e 00 80 ff… ^^……
    30:00 00 00 0b 00 80 00 00 00 0b 00 80 80 00 ...
    40: 00 0b 00 80 00 00 00 0b 00 00 00 00 00 00 00 6B .?...?...?...?...k
    50:00 80 80 00 00 00 0b 00 80 80 00 00 00 0b fe 0c????????????????
    60:04 04 00 00 00 c0 02 00 00 00 00 00 00 00 00 00 00?…………………………………………………
    70:00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
    80:00 00 00 91 10 0f 00 0A c0 40 00 01 00 a0 10 07 ...??????????????????@?
    90: 07 33 ff fc 98 F8 fc 98 F8 04 00 Fe 00 00 Fe 00 00?3. …………………………………
    A0:00 00 00 00 00 44 c0 00 00 00 00 00 00 5e 00 80 ff… ^^……
    b0:00 00 00 0b 00 80 00 00 00 0b 00 80 80 00 ...??????????????
    C0:00 0b 00 80 00 00 00 0b 00 80 ff 00 00 6b ..?..?.. k
    D0:00 80 00 00 00 0b 00 80 80 00 00 00 0b fe 0c??????????????
    E0:00 04 00 00 00 c0 02 00 00 00 00 00 00 00 00 00 00……………………………………………………
    F0:00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00

    root@ITC:~/AUDIO_TEST_FILE# kill -9 5458########     关闭我们的音频应用程序进程:linphonec #### !!!!!
    root@ITC:~/AUDIO_TEST_FILE# i2cset -f -y 1 0x1b 0x01 0x80    #### AIC33 ####的软件复位寄存器 !!!!!
    root@ITC:~/AUDIO_TEST_FILE# i2cdump -f -y 1 0x1b    #### 再次转储全部######## !!!!!
    未指定大小(使用字节数据访问)
    0 1 2 3 4 5 6 7 8 9 A b c d e f 0123456789abcdef
    00:00 00 00 10 04 00 00 00 00 00 00 00 00 00 01 00 00 00 80 ...?? ?...?
    10: 80 off ff 78 78 78 78 78 04 00 Fe 00 fe 00 ?..xxxxxx?..
    20:00 00 00 00 C4 00 00 00 00 00 00 00 00 00 80 00 00 00……………………………………… ??……
    30:00 00 00 04 00 00 00 00 00 00 00 00 04 00 00 00 00 00 ...? ?…
    40:00 04 00 00 00 00 00 00 00 04 00 00 00 00 00 00 00 00 00…… ?…
    50:00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 80 00………………………… ?.
    60:00 00 00 00 00 c0 02 00 00 00 00 00 00 00 00 00 ??..........
    70:00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
    80:00 00 00 10 04 00 00 00 00 00 00 00 00 01 00 00 00 80 ...?? ?...?
    90: 80 off ff 78 78 78 78 78 04 00 Fe 00 fe 00 ?..xxxxxx?..
    A0:00 00 00 00 C4 00 00 00 00 00 00 00 00 00 80 00 00 00……………………………………… ??……
    B0:00 00 00 04 00 00 00 00 00 00 00 04 00 00 00 00 00 ...? ?…
    C0:00 04 00 00 00 00 00 00 04 00 00 00 00 00 00 00 00 00…… ?…
    D0:00 00 00 00 00 00 00 00 00 00 00 00 00 00 80 00………………………… ?.
    E0:00 00 00 00 0 02 00 00 00 00 00 00 00 00 00 00 ??..........
    F0:00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00

    root@ITC:~/AUDIO_TEST_FILE# i2cdump -f -y 1 0x1b    #### 当我们的音频应用程序处理 linphonec 再次运行时,转储所有寄存器######## !!!!!
    未指定大小(使用字节数据访问)
    0 1 2 3 4 5 6 7 8 9 A b c d e f 0123456789abcdef
    00:00 00 00 91 10 0f 00 0A c0 40 00 01 00 a0 10 07 ...??????????????????@?
    10:07 33 ff fc 98 F8 fc 98 F8 04 00 Fe 00 00 fe 00?3. …………………………………
    20: 00 00 00 00 44 c0 00 00 00 00 00 00 00 5e 00 80 ff… ^^……
    30:00 00 00 0b 00 80 00 00 00 0b 00 80 80 00 ...
    40: 00 0b 00 80 00 00 00 0b 00 00 00 00 00 00 00 6B .?...?...?...?...k
    50:00 80 80 00 00 00 0b 00 80 80 00 00 00 0b fe 0c????????????????
    60:04 04 00 00 00 c0 02 00 00 00 00 00 00 00 00 00 00?…………………………………………………
    70:00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
    80:00 00 00 91 10 0f 00 0A c0 40 00 01 00 a0 10 07 ...??????????????????@?
    90:07 33 3f fc 98 F8 fc F8 F8 04 00 Fe 00 00 Fe 00?3???????? …………………………………
    A0:00 00 00 00 00 44 c0 00 00 00 00 00 00 5e 00 80 ff… ^^……
    b0:00 00 00 0b 00 80 00 00 00 0b 00 80 80 00 ...??????????????
    C0:00 0b 00 80 00 00 00 0b 00 80 ff 00 00 6b ..?..?.. k
    D0:00 80 00 00 00 0b 00 80 80 00 00 00 0b fe 0c??????????????
    E0:00 04 00 00 00 c0 02 00 00 00 00 00 00 00 00 00 00……………………………………………………
    F0:00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00

    --------------- playback_ok_when_repower-up (通过拔下并重新插入外部电源)-------------------------------------------------------

    root@iTC:~# i2cdump -f -y 1 0x1b ####     Playback_ok_when_re-powerup ######## !!!!!
    未指定大小(使用字节数据访问)
    0 1 2 3 4 5 6 7 8 9 A b c d e f 0123456789abcdef
    00:00 00 00 91 10 0f 00 0A c0 40 00 01 00 a0 10 07 ...??????????????????@?
    10:07 33 ff fc 98 F8 fc 98 F8 04 00 Fe 00 00 fe 00?3. …………………………………
    20: 00 00 00 cc c0 00 00 00 00 00 00 5e 00 80 ff… ^^……
    30:00 00 00 0b 00 80 00 00 00 0b 00 80 80 00 ...
    40: 00 0b 00 80 00 00 00 0b 00 00 00 00 00 00 00 6B .?...?...?...?...k
    50:00 80 80 00 00 00 0b 00 80 80 00 00 00 0b fe 0c????????????????
    60:00 04 00 00 00 c0 02 00 00 00 00 00 00 00 00 00……………………………………………………
    70:00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
    80:00 00 00 91 10 0f 00 0A c0 40 00 01 00 a0 10 07 ...??????????????????@?
    90: 07 33 ff fc 98 F8 fc 98 F8 04 00 Fe 00 00 Fe 00 00?3. …………………………………
    A0:00 00 00 cc c0 00 00 00 00 00 00 5e 00 80 ff??… ^^……
    b0:00 00 00 0b 00 80 00 00 00 0b 00 80 80 00 ...??????????????
    C0:00 0b 00 80 00 00 00 0b 00 80 ff 00 00 6b ..?..?.. k
    D0:00 80 00 00 00 0b 00 80 80 00 00 00 0b fe 0c??????????????
    E0:00 04 00 00 00 c0 02 00 00 00 00 00 00 00 00 00 00……………………………………………………
    F0:00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00

    #2。  I2S 信号检查:

    WCLK、BCLK 、DIN Signals、问题出现时使用示波器测量了这3个信号找到明显的错误。

    MCLK 信号、板上音频芯片的 MCLK 信号容易测量。MCLK 时钟频率在内部 RD 团队核实到底是什么。

    当问题出现时、我们将再次测量 I2S 时钟信号、并尝试确认是否存在时钟错误或波形异常。 !!!

     

    #3.  下面是我们的 AIC3x 音频芯片原理图:

    对于我们的电源电路中的电压尖峰、您能从 TI 获得任何具体的测量或调整建议吗?

    #4. 仅是 DAC 侧。 当 播放失败(DAC 侧)时、 我们尝试 ADC  侧提供外部音频输入信号我们可以在 ADC  侧听到音频输出中的声音。

     

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

    ~第4点中的说明

    #4.  应该只是数字端(DAC 端?)。  

     回放失败时、我们  尝试         模拟侧提供外部音频输入信号 并且 我们 可以 在         模拟侧听到音频输出中的声音。

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

     我们的 板上      音频 芯片的 MCLK 信号  24MHz

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

    您好!

    该 DAC 故障是否可重复? 您是否能够以某种方式触发它? 此外、哪些输出会发生故障? 线性输出单声道、左声道、右声道或 HP 输出、还是全部执行? 故障期间 HP COM 是否仍处于共模?

    另外、我认为这不是时钟问题、或者 ADC 也更有可能出现故障。 这可能是欠压故障、此时功率骤降足以使 DAC 关闭、等等。 我注意到在您的原理图中、IOVDD 在3.3V 电源轨上没有相应的10 μ F 去耦电容器、您是否可以在那里添加另一个10 μ F 电容器来查看是否有用?

    此致!
    MIR

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

    哦、我不知道如何确认是 DAC 失败还是 ADC 失败。 当音频应用程序进程(或 aplay 命令)播放.wav 文件时、没有声音输出。 此时、我们向 LINE2LP/M 侧提供模拟音频输入信号、LEFT_LOP/M 侧可以有声音输出。 (__LW_AT__P.S.当它播放.wav 文件通常、我们可以听到声音输出在 LEFT_LOP/M 侧.)

    我们无法触发它。 这似乎是一个随机的现象,我不知道音频芯片何时会播放失败,不能听到声音输出。  在不关闭主板电源的情况下、手动向芯片的 RESET 引脚发送复位信号并执行硬复位可以正常播放声音。

    感谢您的回答。  

    我们先来比较一下 IOVDD 电源的情况、同时检查音频芯片中其他电源。

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

    您好!

    请告诉我添加另一个去耦电容器是否有帮助。 似乎是电源问题。

    此致!
    MIR

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

    板载音频芯片的三个电源(VD33_AUD、VDD_3V3、VD18_AUD)由外部数字电源单独连接和供电、以便仿真电压波动、这会产生影响、但无法再现相同的播放失败现象。 从这个角度来看、我认为这不应该是权力问题。

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

    我们正在准备讨论硬件重置备份解决方案。

    如下图所示、AIC3x 芯片的 RESET 引脚通过0欧姆电阻器(R196)连接到 AM335x 的 NRESETIN_OUT/WARMRSTn 引脚。

    我们计划断开 R196并使用其他 GPIO 来控制 AIC3x 的复位引脚。

    现在有以下问题:

    1.是否可以通过软件操作 AM335x 的 NRESETIN_OUT/WARMRSTn 引脚来生成复位输出信号?

    2.如果我们用 GPIO 来控制 AIC3x 的复位管脚进行硬复位,是否可以每天对音频芯片进行多次硬复位? 如果我们在每个音频任务之前执行硬重置、是否存在未知风险(重置频率:> 40次/天)?

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

    您好!

    我不确定 AM335x 的操作、但复位信号只需驱动为低电平10ns 或更长时间即可执行硬件复位。 每天应进行多次复位、不过在器件上电后仍然应进行硬件复位。 我觉得应该不断去弄清楚是什么原因导致了音频故障、因为芯片硬复位的时候好像有点放气过度。  

    为了说明一点、您之前说过、当器件处于这种状态但不播放数字音频时、模拟旁路可以工作? 您是否还能检查 ADC、看看数字音频在此状态下是否输出?

    此致!
    MIR

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

    是的、 当器件处于这种情况下但不播放数字音频时、模拟旁路有效。 好的、我们将在下周查看 ADC。

    我需要确认2个问题:

    1. 每次启动音频任务时、我们的音频应用程序过程都会在 AIC3x 上执行软件复位。 这是否会产生任何不利影响并可能导致数字音频回放失败?

    ---

    2.我已经检查过 AIC3x 的驱动程序源代码。  我不明白函数:aic3x_set_power (),  aic3x_set_bias_level()。

    此驱动程序是否安全、是否存在任何潜在的代码错误???

    ---

    静态 int aic3x_set_power (struct sd_soc_codec * codec、int power)

    struct aic3x_priv * aic3x = snd_soc_codec_get_drvdata (codec);
    Int i、ret;
    u8 *cache = codec->reg_cache;

    如果(功率){
    RET = regulator_bulk_enable (array_size (aic3x->supplies)、
    aic3x->supplies);
    IF (RET)
    转出;
    aic3x->power = 1;
    /*
    *仅在某些情况下才需要重置释放和高速缓存同步
    *耗材已关闭或是否有缓存写入
    */
    if (!codec->cache_sync)
    转出;

    if (GPIO_is_valid (aic3x->GPIO_reset)){
    udelay(1);
    GPIO_SET_VALUE (aic3x->GPIO_RESET、1);
    }

    /*将 reg_cache 与硬件同步*/
    CODEC->cache_only = 0;
    (i = AIC3X_SAMPLE_RATE_SEL_REG;i < array_size (aic3x_reg);i++)
    SND_SoC_WRITE (CODEC、i、cache[i]);
    如果(aic3x->model == AIC3X_MODEL_3007)
    aic3x_init_3007 (编解码器);
    CODEC->cache_sync = 0;
    其他{
    /*
    *对该编解码器实例执行软重置以清除
    *如果是电源稳压器,可能的 VDD 泄漏电流
    *保持开启
    */
    SND_SoC_WRITE (编解码器、AIC3X_RESET、SOFT_RESET);
    CODEC->cache_sync = 1;
    aic3x->power = 0;
    /*当偏置关闭时、无需执行硬件写入*/
    CODEC->cache_only = 1;
    RET = regulator_bulk_disable (array_size (aic3x->supplies)、
    aic3x->supplies);
    /*如果禁用稳压器、则启用缓存同步
    *事件不是触发器。
    *待办事项:稍后再访问以修复它
    */
    CODEC->cache_sync = 1;
    }
    输出:
    回流塔;
    }

    static int aic3x_set_bias_level (struct snd_soc_codec *codec、
    枚举 SND_SoC_BIAS_LEVEL 级别)

    struct aic3x_priv * aic3x = snd_soc_codec_get_drvdata (codec);
    U8 reg;

    开关(级别){
    案例 SND_SOC_BIAS_ON:
    休息;
    案例 SND_SOC_BIAS_PREPARE:
    if (codec->dapm.bias_level == SND_SOC_BIAS_STANDBY &&
    aic3x->master){
    /*启用 PLL */
    REG = SND_SoC_READ (编解码器、AIC3X_PLL_PROGA_REG);
    SND_SoC_WRITE (CODEC、AIC3X_PLL_PROGA_REG、
    REG | PLL_ENABLE);
    }
    休息;
    案例 SND_SOC_BIAS_STANDBY:
    如果(!aic3x->power)
    aic3x_set_power (编解码器、1);
    if (codec->dapm.bias_level == SND_SOC_BIAS_PREPARE &&
    aic3x->master){
    /*禁用 PLL */
    REG = SND_SoC_READ (编解码器、AIC3X_PLL_PROGA_REG);
    SND_SoC_WRITE (CODEC、AIC3X_PLL_PROGA_REG、
    REG 和~PLL_ENABLE);
    }
    休息;
    案例 SND_SOC_BIAS_OFF:
    如果(aic3x->power)
    aic3x_set_power (编解码器、0);
    休息;
    }
    codec->dapm.bias_level =电平;

    返回0;
    }

    e2e.ti.com/.../2450.tlv320aic3x.c

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

    您好!

    很抱歉耽误您的时间、我将在未来几天在这里更新。

    -mir

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

    您好、Min、

    如果您以后要设置所需的寄存器、则每次使用该器件时的软件复位应该不是问题。  

    我认为 SET_POWER 函数会在驱动器内部启用该器件的电源标志。 set_bias 函数应设置 micbias 电压电平-这些电平可在与驱动器关联的.h 文件中定义。

    很抱歉这里出现延迟、如果您还有其他问题、请告诉我。

    此致!
    MIR