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.

[参考译文] TLV320DAC32:音频输出被阻止,芯片似乎被锁定

Guru**** 2390975 points
Other Parts Discussed in Thread: REG101, REG102, TLV320DAC32

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

https://e2e.ti.com/support/audio-group/audio/f/audio-forum/658204/tlv320dac32-audio-output-is-blocked-the-chip-seems-to-be-locked

部件号:TLV320DAC32
主题中讨论的其他部件:REG101REG102

在自定义板上,芯片用作插孔模拟音频输出。 MCLK未使用,仅BCLK:

我们连接外部有源扬声器。 在播放音频时,我们会关闭和打开扬声器的电源。 经过一定的尝试后,芯片不会输出任何音频。 处理器继续播放,芯片的所有寄存器的值与它工作时的值完全相同。 如果我们执行软复位+重新配置所有寄存器,这些寄存器通过复位更改了其值,芯片将返回(不停止处理器播放),并再次输出音频。 所以这个漏洞在芯片里。

我想当我们关闭/打开扬声器时,电源会出现故障,有时芯片内会出现堵塞,为什么不这样做呢。 但问题是我们无法通过软件检测到它,因为所有寄存器都有相同的值。 我认为,虽然公共小巴可能已解锁,但在登记册中却没有这方面的地位。

你知道这些麻烦吗? 是否存在我们可以读取的隐藏寄存器,以检测芯片是否真正准备就绪,我们必须重新重置它?

下面是寄存器的转储:

page0 / reg0 = 0x0
page0 / reg1 = 0x0
page0 / reg2 = 0x0
page0 / reg3 = 0x91
page0 / reg4 = 0x80
page0 / reg5 = 0x0
page0 / reg6 = 0x0
page0 / reg7 = 0x8a
page0 / reg8 = 0x0
page0 / reg9 = 0x0
page0 / reg10 = 0x0
page0 / reg11 = 0x1
page0 / reg12 = 0x5
page0 / reg13 = 0x0
page0 / reg14 = 0x0
page0 / reg15 = 0x0
page0 / reg16 = 0x0
page0 / reg17 = 0x0
page0 / reg18 = 0x0
page0 / reg19 = 0x0
page0 / reg20 = 0x0
page0 / reg21 = 0x0
page0 / reg22 = 0x0
page0 / reg23 = 0x0
page0 / reg24 = 0x0
page0 / reg25 = 0x2
page0 / reg26 = 0x0
page0 / reg27 = 0x0
page0 / reg28 = 0x0
page0 / reg29 = 0x0
page0 / reg30 = 0x0
page0 / reg31 = 0x0
page0 / reg32 = 0x0
page0 / reg33 = 0x0
page0 / reg34 = 0x0
page0 / reg35 = 0x0
page0 / reg36 = 0x0
page0 / reg37 = 0xd0
page0 / reg38 = 0xc
page0 / reg39 = 0x0
page0 / reg40 = 0x0
page0 / reg41 = 0x0
page0 / reg42 = 0x50
page0 / reg43 = 0x5a
page0 / reg44 = 0x5a
page0 / reg45 = 0x76
page0 / reg46 = 0x76
page0 / reg47 = 0x80
page0 / reg48 = 0x76
page0 / reg49 = 0x76
page0 / reg50 = 0x76
page0 / reg51 = 0xF
page0 / reg52 = 0x76
page0 / reg53 = 0x76
page0 / reg54 = 0x76
page0 / reg55 = 0x76
page0 / reg56 = 0x76
page0 / reg57 = 0x76
page0 / reg58 = 0x6
page0 / reg59 = 0x76
page0 / reg60 = 0x76
page0 / reg61 = 0x76
page0 / reg62 = 0x76
page0 / reg63 = 0x76
page0 / reg64 = 0x80
page0 / reg65 = 0xF
page0 / reg66 = 0x76
page0 / reg67 = 0x76
page0 / reg68 = 0x76
page0 / reg69 = 0x76
page0 / reg70 = 0x76
page0 / reg71 = 0x76
page0 / reg72 = 0x6
page0 / reg73 = 0x0
page0 / reg74 = 0x0
page0 / reg75 = 0x0
page0 / reg76 = 0x0
page0 / reg77 = 0x0
page0 / reg78 = 0x0
page0 / reg79 = 0x0
page0 / reg80 = 0x0
page0 / reg81 = 0x0
page0 / reg82 = 0x0
page0 / reg83 = 0x0
page0 / reg84 = 0x0
page0 / reg85 = 0x0
page0 / reg86 = 0x0
page0 / reg87 = 0x0
page0 / reg88 = 0x0
page0 / reg89 = 0x0
page0 / reg90 = 0x0
page0 / reg91 = 0x0
page0 / reg92 = 0x0
page0 / reg93 = 0x0
page0 / reg94 = 0xc6
page0 / reg95 = 0xc
page0 / reg96 = 0x0
page0 / reg97 = 0x0
page0 / reg98 = 0x0
page0 / reg99 = 0x0
page0 / reg100 = 0x0
page0 / reg101 = 0x0
page0 / reg102 = 0xa2
Page1 / reg0 = 0x1
Page1 / reg1 = 0x6b
Page1 / reg2 = 0xe3
Page1 / reg3 = 0x96
Page1 / reg4 = 0x66
Page1 / reg5 = 0x67
Page1 / reg6 = 0x5d
Page1 / reg7 = 0x6b
Page1 / reg8 = 0xe3
Page1 / reg9 = 0x96
Page1 / reg10 = 0x66
Page1 / reg11 = 0x67
Page1 / reg12 = 0x5d
Page1 / reg13 = 0x7d
Page1 / reg14 = 0x83
Page1 / reg15 = 0x84
Page1 / reg16 = 0xee
Page1 / reg17 = 0x7d
Page1 / reg18 = 0x83
Page1 / reg19 = 0x84
Page1 / reg20 = 0xee
Page1 / reg21 = 0x39
Page1 / reg22 = 0x55
Page1 / reg23 = 0xf3
Page1 / reg24 = 0x2D
Page1 / reg25 = 0x53
Page1 / reg26 = 0x7E
Page1 / reg27 = 0x6b
Page1 / reg28 = 0xe3
Page1 / reg29 = 0x96
Page1 / reg30 = 0x66
Page1 / reg31 = 0x67
Page1 / reg32 = 0x5d
Page1 / reg33 = 0x6b
Page1 / reg34 = 0xe3
Page1 / reg35 = 0x96
Page1 / reg36 = 0x66
Page1 / reg37 = 0x67
Page1 / reg38 = 0x5d
Page1 / reg39 = 0x7d
Page1 / reg40 = 0x83
Page1 / reg41 = 0x84
Page1 / reg42 = 0xee
Page1 / reg43 = 0x7d
Page1 / reg44 = 0x83
Page1 / reg45 = 0x84
Page1 / reg46 = 0xee
Page1 / reg47 = 0x39
Page1 / reg48 = 0x55
Page1 / reg49 = 0xf3
Page1 / reg50 = 0x2D
Page1 / reg51 = 0x53
Page1 / reg52 = 0x7E
Page1 / reg53 = 0x7f
Page1 / reg54 = 0xff

我们尝试激活输出短路检测,但未检测到,并且没有任何更改。

故障不明显重现,这取决于扬声器,我们需要关闭/打开几个扬声器。 但在客户方面,他们使用专业的音频放大器,有时面临相同的问题。 我们花了很长时间才找到来源,但现在,没有您的帮助,我们无法继续...

此致。

此致。

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

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

    我将尝试帮助您找到解决此问题的方法。
    我想尝试以下几种方法:
    -出现问题时,请写入以下寄存器,查看是否会使设备恢复正常播放:
    第0页注册37 位D6和D7
    将1写入这些位
    第0页注册51 位D0
    将1写入此位
    第0页注册器65 位D0
    将1写入此位

    -我还想尝试写下以下内容,看看设备是否能够承受扬声器开/关转换问题。
    第0页Reg 37 位D5-D4
    在这些位中写入10
    第0页注册器38 位D5-D3
    将010写入这些位

    最后一件事是更改以下内容:
    第0页注册器14 位D7
    将1写入此位

    如果以上任何一项有助于解决问题,请告诉我。

    此致,
    Ivan Salazar
    应用工程师-低功率音频和执行器
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好Ivan:

    我在失败后尝试了三次测试,我也尝试了三次测试,但都没有解除芯片的阻塞。

    因此,目前唯一解除阻止的序列是:

            Snd_SOC_WRITE (SAVE_CODEC,AIC3X_RESET,0x80);
    Udelay (100);
    Snd_SOC_WRITE (SAVE_CODEC,AIC3X_CLKGEN_CTRL_REG,0xA2); // 102
    Snd_SOC_WRITE (SAVE_CODEC,AIC3X_PLL_PROGA_REG,0x91);   // 3.
    Snd_SOC_WRITE (SAVE_CODEC,AIC3X_PLL_PROGB_REG,0x80);   // 4.
    snd_so_write(save_codec, AIC3X_codec_datapath_REG, 0x8A);  // 7.
    Snd_SOC_WRITE (SAVE_CODEC,AIC3X_CODCOD_DFILT_CTRL,0x05);    // 12.
    Snd_SOC_WRITE (SAVE_CODEC,HPLCOM_CFG,0xD0);    // 37
    Snd_SOC_WRITE (SAVE_CODEC,HPRCOM_CFG,0x0C);    // 38
    Snd_SOC_WRITE (SAVE_CODEC,HPOUT_POP_REDUCATION,0x50);   // 42
    Snd_SOC_WRITE (SAVE_CODEC,LDAC_VOL,0x45);  // 43
    Snd_SOC_WRITE (SAVE_CODEC,RDAC_VOL,0x45);  // 44

    Snd_SOC_WRITE (SAVE_CODEC,LINE2L_2_HPLOUT_VOL,0x76);   // 45
    Snd_SOC_WRITE (SAVE_CODEC,PGAL_2_HPLOUT_VOL,0x76); // 46
    Snd_SOC_WRITE (SAVE_CODEC,DACL1_2_HPLOUT_VOL,0x80);    // 47
    Snd_SOC_WRITE (SAVE_CODEC,LINE2R_2_HPLOUT_VOL,0x76);   // 48
    Snd_SOC_WRITE (SAVE_CODEC,PGAR_2_HPLOUT_VOL,0x76); // 49
    Snd_SOC_WRITE (SAVE_CODEC,DACR1_2_HPLOUT_VOL,0x76);    // 50
    Snd_SOC_WRITE (SAVE_CODEC,HPLOUT_CTRL,0x0F);   // 51

    Snd_SOC_WRITE (SAVE_CODEC,LINE2L_2_HPLCOM_VOL,0x76);   // 52
    Snd_SOC_WRITE (SAVE_CODEC,PGAL_2_HPLCOM_VOL,0x76); // 53
    Snd_SOC_WRITE (SAVE_CODEC,DACL1_2_HPLCOM_VOL,0x76);    // 54
    Snd_SOC_WRITE (SAVE_CODEC,LINE2R_2_HPLCOM_VOL,0x76);   // 55
    Snd_SOC_WRITE (SAVE_CODEC,PGAR_2_HPLCOM_VOL,0x76); // 56
    Snd_SOC_WRITE (SAVE_CODEC,DACR1_2_HPLCOM_VOL,0x76);    // 57
    Snd_SOC_WRITE (SAVE_CODEC,HPLCOM_CTRL,0x06);   // 58

    Snd_SOC_WRITE (SAVE_CODEC,LINE2L_2_HPROUT_VOL,0x76);   // 59
    Snd_SOC_WRITE (SAVE_CODEC,PGAL_2_HPROUT_VOL,0x76); // 60
    Snd_SOC_WRITE (SAVE_CODEC,DACL1_2_HPROUT_VOL,0x76);    // 61
    Snd_SOC_WRITE (SAVE_CODEC,LINE2R_2_HPROUT_VOL,0x76);   // 62
    Snd_SOC_WRITE (SAVE_CODEC,PGAR_2_HPROUT_VOL,0x76); // 63
    Snd_SOC_WRITE (SAVE_CODEC,DACR1_2_HPROUT_VOL,0x80);    // 64
    Snd_SOC_WRITE (SAVE_CODEC,HPROUT_CTRL,0x0F);   // 65

    Snd_SOC_WRITE (SAVE_CODEC,LINE2L_2_HPRCOM_VOL,0x76);   // 66
    Snd_SOC_WRITE (SAVE_CODEC,PGAL_2_HPRCOM_VOL,0x76); // 67
    Snd_SOC_WRITE (SAVE_CODEC,DACL1_2_HPRCOM_VOL,0x76);    // 68
    Snd_SOC_WRITE (SAVE_CODEC,LINE2R_2_HPRCOM_VOL,0x76);   // 69
    Snd_SOC_WRITE (SAVE_CODEC,PGAR_2_HPRCOM_VOL,0x76); // 70
    Snd_SOC_WRITE (SAVE_CODEC,DACR1_2_HPRCOM_VOL,0x76);    // 71
    Snd_SOC_WRITE (SAVE_CODEC,HPRCOM_CTRL,0x06);   // 72
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    英尼斯,

    在我重新查看此设备文档时,我想到了另一个可能的测试。 请尝试以下操作:
    第0页注册51位D0
    将0写入此位
    第0页注册器65位D0
    将0写入此位
    第0页注册51位D0
    将1写入此位
    第0页注册器65位D0
    将1写入此位

    在问题发生之前和之后,您还可以阅读第0页注册94和第0页注册95吗?

    此致,
    Ivan Salazar
    应用工程师-低功率音频和执行器
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    它不会改变任何东西。

    Page0,reg94=0xc0,reg95=0x00 (之前和之后,因为问题发生后没有任何寄存器发生更改)。

    此致。

    Olivier。

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

    如果Page 0 Reg 94 = 0xC0,则意味着HPLOUT和HPROUT未通电。 在播放时是否真的如此?
    此外,在您的原始帖子中,您在获得的寄存器转储中包括了以下内容:
    page0 / reg94 = 0xc6
    page0 / reg95 = 0xc
    第一行意味着DAC和HPxOUT实际上已通电。 但第二条线意味着在HPxOUT上检测到短路,如果发生短路事件,则必须关闭并重新打开输出驱动器(关闭/打开)。

    此致,
    Ivan Salazar
    应用工程师-低功率音频和执行器
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    很抱歉,我犯了一个错误。
    测试前:
    page0 / reg94 = 0xc6
    page0 / reg95 = 0xc
    测试后:
    page0 / reg94 = 0xc0
    page0 / reg95 = 0x0

    对于短路检测,当page0/reg95=0xc时,音频正常。 我们对page0/reg38.d2=0进行了编程,因为我们认为这是问题的根源,但它没有任何改变。 使用此类reg38编程,在短路检测后,输出应恢复正常,否? 即使我们不清理状态? 我们现在可以测试什么?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好Ivan:

    根据数据表,reg95 = 0xc = 0x0c不报告短路检测,而只是HPxCOM已完全通电。
    因此,我们的问题不是由于短路,而是由于我们现在无法检测到的其它原因,因为所有寄存器的值都与所有寄存器正常时的值相同。
    你对它有什么想法吗? 为了能够通过软件检测问题,我们可以尝试更改配置中的哪些内容?

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

    很难确定导致设备停止工作的原因,因为无法重新创建设备,并且注册器似乎没有发出可信的通知(这似乎不正常)。
    应该禁用HPxCOM,因为它们未被使用。 尽管从上述寄存器设置中,这些设置应已被禁用:
    page0 / reg58 = 0x6
    page0 / reg72 = 0x6
    那么,为什么这些在Reg 95上显示为完全通电?

    从上一个帖子:
    很抱歉,我犯了一个错误。
    测试前:
    page0 / reg94 = 0xc6
    page0 / reg95 = 0xc
    测试后:
    page0 / reg94 = 0xc0
    page0 / reg95 = 0x0
    那么Reg 94在我建议的测试之前是0xC6,在测试之后是0xC0?

    我认为这主要与输出级有关,因为问题是由下一级(外部放大器或扬声器)的连接/断开引起的,对吗? 因此,这不应影响DAC或PLL。

    此致,
    Ivan Salazar
    应用工程师-低功率音频和执行器
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    Olivier

    距离上次沟通已有一周。 这个问题最终解决了吗? 如果您有更多问题,请回答或创建新线程。 您还可以共享电子邮件地址,以便我可以直接联系您(如果更适合您)。

    此致,
    Ivan Salazar
    应用工程师-低功率音频和执行器
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    伊万

    不,我们的问题没有解决。 要确定哪个阶段被阻止,我尝试以下测试:

    -关闭电源/打开HPxOUT (reg51.d0和reg65.d0)->无效果
     
    -关闭电源/打开xDAC (reg37.d7和reg37.d6)->无效

    -禁用/启用PLL (reg3.D7)->无效

    因此,我发现解除阻止芯片的唯一方法是全局软件重置(reg1.D7)。 在不同的内部块上,此复位的真正目的是什么?
    是否可以分别将其应用于每个块?

    事实上,为了解决这个问题,我有两个解决方案:
     —更改配置,使问题不再发生
     —更改配置,以便可以检测到问题(然后应用软复位以重新启动芯片)
     
    我需要一些提示来找出当前寄存器值中的错误或与我们的原理图不匹配的错误。 第一步是找出与哪一个内部块有关。

    此致,

    Olivier

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我找到了另一种解决方案(不是全局重置)来解锁TLV320DAC32:
    只需使用已有的值再次设置这5个寄存器
    reg47 = 0x80 ->将DAC_L路由到HPLOUT
    reg51 = 0x0F ->打开HPLOUT电源
    reg64 = 0x80 ->将DAC_R路由到HPROUT
    reg65 = 0x0F ->加电HPROUT
    reg37 = 0xE0 ->打开DAC_L和DAC_R电源

    如果我不再设置路由(reg47和reg64),则不起作用。
    所以我猜这个问题是由从DAC到HPOUT的路由丢失引起的。
    是否有方法检查内部工艺路线的状态?
    Reg47和Reg64仅用于配置路由,但它们不反映其当前状态,是吗?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    伊万
    由于显然无法检测到问题(您对我的上一个帖子没有回复),我们已实施以下解决方法以避免丢失模拟输出信号:
    我们每10秒再次写入5个寄存器
    reg47 = 0x80
    reg51 = 0x0F
    reg64 = 0x80
    reg65 = 0x0F
    reg37 = 0xE0

    我们的设备每周7天,每天24小时工作。 因此,我们需要知道这样做是否有降低TLV320ADC32使用寿命的风险?
    是否限制了内部控制寄存器(如闪存)的写入周期数?

    提前感谢您的回答,这对我们来说非常重要

    Olivier

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

    很遗憾,我无法找到方法来检测您遇到的故障。 这种情况超出了设备的常规使用范围,因此结果也可能无法预测。
    没有关于有限的写入周期数的信息,但是可能的写入周期数应该很高。

    此致,
    Ivan Salazar
    应用工程师-低功率音频和执行器