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.

tas2505的spk+/spk1输出为方波,使用tinyplay波形音频文件speaker无声音输出

Other Parts Discussed in Thread: TAS2505

采用tas2505作为AMP,驱动链接:https://github.com/dangtranhieu2012/tas2505-linux-driver/blob/master/tas2505.c

平台采用高通QCS610,测量芯片I2S四路信号都有,但Spk+/Spk-输出波形为方波,使用tinyplay播放wav文件也没有声音输出。

I2C寄存器设置采用 slau472.pdf Page 49 4.0.7 Example

  • 您好,
    可以附上Spk+和Spk-差分输出波形吗
  • 您好:

    波形请见附件。

    另外我们这边比较紧急,方便留一下您的联系方式么,比如手机或者固定电话?

  • 输出有信号,您的负载参数是怎样的呢,可以把原理图附上来吗
    在论坛上可以准确的查看问题、图片、文档等信息,可以更详细分析问题,另外也方便其他用户参考类似问题的解决方法,这也是为什么公司开设网站论坛做支持的原因,因此建议在论坛上讨论分析解决问题,若比较紧急我会对于您的信息尽快给您以反馈
  • R3306是NC的是吗,
    建议您去掉R3314看一下是否有声音输出,R3314和R3317是用来检测输出电压的吗,不建议加这个电路,因为R3314和R3317对于SPKM相当于单端负载,并且tas2505有以下负载诊断功能:
    – 输出至 GND 短路
    – 终端至终端短路
    – 输出至电源短路
    – 过热
    – 直流输入
  • 您好:

    我这边尝试单独卸掉R3314,单独卸掉R3317,同时卸掉R3314和R3317,波形和之前一样,并且没有声音输出。以下是我这边寄存器的配置,您可以帮忙check一下么?

    static const struct reg_default tas2505_reg_defaults[] = {
    { TAS2505_PAGECTL, 0x00 },
    { TAS2505_RESET, 0x01 },
    { TAS2505_PAGECTL, 0x01 },
    { TAS2505_LDO_CTRL, 0x00 },
    { TAS2505_REF_POR_LDO_BGAP_CTRL, 0x10 },
    { 1 * 128 + 0x09 , 0x03 },
    { 1 * 128 + 0x0C , 0x04 },
    { 1 * 128 + 0x16 , 0x00 },
    { 1 * 128 + 0x18 , 0x80 },
    { 1 * 128 + 0x09 , 0x23 },
    { 1 * 128 + 0x10 , 0x00 },
    { TAS2505_SPKVOL1 , 0x00 },
    { TAS2505_SPKVOL2 , 0x10 },
    { TAS2505_SPKAMPCTRL1 , 0x02 },
    };

    I2C寄存器设置采用 slau472.pdf Page 51 4.0.9 Example

  • 再向您确认一下,您上面附的示波器波形是Spk+和Spk-的单端信号,还是Spk+和Spk-的差分信号呢,信号频率大约为300KHZ吗?
    您的speaker参数是怎样的呢,多少Ω的呢
  • 您好:

    是SPk+/-的单端信号,频率300KHz,是8欧的

  • 目测看您测得的Spk+和Spk-的单端信号是一样的,这样的话,差分信号就是0,speaker上就没有驱动信号。
    您寄存器配置可以读出来吗,以确认已经正确配置进去?
    这应该不是您完整的寄存器配置,您可以参考手册 slau472.pdf示例配置
  • 我上述参考的就是slau472.pdf Page 51
    4.0.9 Example Register Setup to Play AINL and AINR Through Headphone/Speaker Outputs

    另外我们这个适合于哪一个exsample,可以给一个么?
  • 您MCLK, BCLK, WCLK 频率分别是多少呢
    我找到一个客户的寄存器配置,您可以参考下:
    #define TAS2505_REG(page, reg) ((page * 128) + reg)
    #define TAS2505_PAGECTL TAS2505_REG(0, 0)
    #define TAS2505_RESET TAS2505_REG(0, 1)
    #define TAS2505_CLKMUX TAS2505_REG(0, 4)
    #define TAS2505_PLLPR TAS2505_REG(0, 5)
    #define TAS2505_PLLJ TAS2505_REG(0, 6)
    #define TAS2505_PLLDMSB TAS2505_REG(0, 7)
    #define TAS2505_PLLDLSB TAS2505_REG(0, 8)
    #define TAS2505_NDAC TAS2505_REG(0, 11)
    #define TAS2505_MDAC TAS2505_REG(0, 12)
    #define TAS2505_DOSRMSB TAS2505_REG(0, 13)
    #define TAS2505_DOSRLSB TAS2505_REG(0, 14)
    #define TAS2505_IFACE1 TAS2505_REG(0, 27)
    #define TAS2505_IFACE2 TAS2505_REG(0, 28)
    #define TAS2505_IFACE3 TAS2505_REG(0, 29)
    #define TAS2505_BCLKNDIV TAS2505_REG(0, 30)
    #define TAS2505_DACFLAG1 TAS2505_REG(0, 37)
    #define TAS2505_DACFLAG2 TAS2505_REG(0, 38)
    #define TAS2505_STICKYFLAG1 TAS2505_REG(0, 42)
    #define TAS2505_INTFLAG1 TAS2505_REG(0, 43)
    #define TAS2505_STICKYFLAG2 TAS2505_REG(0, 44)
    #define TAS2505_INTFLAG2 TAS2505_REG(0, 46)
    #define TAS2505_DACINSTRSET TAS2505_REG(0, 60)
    #define TAS2505_DACSETUP1 TAS2505_REG(0, 63)
    #define TAS2505_DACSETUP2 TAS2505_REG(0, 64)
    #define TAS2505_DACVOL TAS2505_REG(0, 65)
    #define TAS2505_REF_POR_LDO_BGAP_CTRL TAS2505_REG(1, 1)
    #define TAS2505_LDO_CTRL TAS2505_REG(1, 2)
    #define TAS2505_PLAYBACKCONF1 TAS2505_REG(1, 3)
    #define TAS2505_HPPOWERUP TAS2505_REG(1, 9)
    #define TAS2505_OUTPUTMODE TAS2505_REG(1, 10)
    #define TAS2505_MIXPOUTPUT TAS2505_REG(1, 12)
    #define TAS2505_P1R16 TAS2505_REG(1, 16)
    #define TAS2505_HPGAIN TAS2505_REG(1, 22)
    #define TAS2505_P1R24 TAS2505_REG(1, 24)
    #define TAS2505_SPKAMPCTRL1 TAS2505_REG(1, 45)
    #define TAS2505_SPKVOL1 TAS2505_REG(1, 46)
    #define TAS2505_SPKVOL2 TAS2505_REG(1, 48)
    #define TAS2505_DACANLGAINFLAG TAS2505_REG(1, 63)
    static const struct reg_default tas2505_reg_defaults[] = {
    { TAS2505_LDO_CTRL, 0x00 },
    { TAS2505_CLKMUX, 0x03 },
    { TAS2505_PLLPR, 0x91 },
    { TAS2505_PLLJ, 0x04 },
    { TAS2505_PLLDMSB, 0x00 },
    { TAS2505_PLLDLSB, 0x00 },
    { TAS2505_NDAC, 0x84 },
    { TAS2505_MDAC, 0x82 },
    { TAS2505_DOSRMSB, 0x00 },
    { TAS2505_DOSRLSB, 0x80 },
    { TAS2505_IFACE1, 0x00 },
    { TAS2505_IFACE2, 0x00 },
    { TAS2505_DACINSTRSET, 0x02 },
    { TAS2505_REF_POR_LDO_BGAP_CTRL, 0x10 },
    { TAS2505_OUTPUTMODE, 0x00 },
    { TAS2505_MIXPOUTPUT, 0x04 },
    { TAS2505_HPGAIN, 0x00 },
    { TAS2505_P1R24, 0x00 },
    { TAS2505_HPPOWERUP, 0x20 },
    { TAS2505_P1R16, 0x00 },
    { TAS2505_SPKVOL1, 0x00 },
    { TAS2505_SPKVOL2, 0x10 },
    { TAS2505_SPKAMPCTRL1, 0x02 },
    { TAS2505_DACSETUP1, 0x90 },
    { TAS2505_DACVOL, 0x00 },
    { TAS2505_DACSETUP2, 0x04 },
    };
  • Amy Luo 说:
    您MCLK, BCLK, WCLK 频率分别是多少呢
    我找到一个客户的寄存器配置,您可以参考下:
    #define TAS2505_REG(page, reg) ((page * 128) + reg)
    #define TAS2505_PAGECTL TAS2505_REG(0, 0)
    #define TAS2505_RESET TAS2505_REG(0, 1)
    #define TAS2505_CLKMUX TAS2505_REG(0, 4)
    #define TAS2505_PLLPR TAS2505_REG(0, 5)
    #define TAS2505_PLLJ TAS2505_REG(0, 6)
    #define TAS2505_PLLDMSB TAS2505_REG(0, 7)
    #define TAS2505_PLLDLSB TAS2505_REG(0, 8)
    #define TAS2505_NDAC TAS2505_REG(0, 11)
    #define TAS2505_MDAC TAS2505_REG(0, 12)
    #define TAS2505_DOSRMSB TAS2505_REG(0, 13)
    #define TAS2505_DOSRLSB TAS2505_REG(0, 14)
    #define TAS2505_IFACE1 TAS2505_REG(0, 27)
    #define TAS2505_IFACE2 TAS2505_REG(0, 28)
    #define TAS2505_IFACE3 TAS2505_REG(0, 29)
    #define TAS2505_BCLKNDIV TAS2505_REG(0, 30)
    #define TAS2505_DACFLAG1 TAS2505_REG(0, 37)
    #define TAS2505_DACFLAG2 TAS2505_REG(0, 38)
    #define TAS2505_STICKYFLAG1 TAS2505_REG(0, 42)
    #define TAS2505_INTFLAG1 TAS2505_REG(0, 43)
    #define TAS2505_STICKYFLAG2 TAS2505_REG(0, 44)
    #define TAS2505_INTFLAG2 TAS2505_REG(0, 46)
    #define TAS2505_DACINSTRSET TAS2505_REG(0, 60)
    #define TAS2505_DACSETUP1 TAS2505_REG(0, 63)
    #define TAS2505_DACSETUP2 TAS2505_REG(0, 64)
    #define TAS2505_DACVOL TAS2505_REG(0, 65)
    #define TAS2505_REF_POR_LDO_BGAP_CTRL TAS2505_REG(1, 1)
    #define TAS2505_LDO_CTRL TAS2505_REG(1, 2)
    #define TAS2505_PLAYBACKCONF1 TAS2505_REG(1, 3)
    #define TAS2505_HPPOWERUP TAS2505_REG(1, 9)
    #define TAS2505_OUTPUTMODE TAS2505_REG(1, 10)
    #define TAS2505_MIXPOUTPUT TAS2505_REG(1, 12)
    #define TAS2505_P1R16 TAS2505_REG(1, 16)
    #define TAS2505_HPGAIN TAS2505_REG(1, 22)
    #define TAS2505_P1R24 TAS2505_REG(1, 24)
    #define TAS2505_SPKAMPCTRL1 TAS2505_REG(1, 45)
    #define TAS2505_SPKVOL1 TAS2505_REG(1, 46)
    #define TAS2505_SPKVOL2 TAS2505_REG(1, 48)
    #define TAS2505_DACANLGAINFLAG TAS2505_REG(1, 63)
    static const struct reg_default tas2505_reg_defaults[] = {
    { TAS2505_LDO_CTRL, 0x00 },
    { TAS2505_CLKMUX, 0x03 },
    { TAS2505_PLLPR, 0x91 },
    { TAS2505_PLLJ, 0x04 },
    { TAS2505_PLLDMSB, 0x00 },
    { TAS2505_PLLDLSB, 0x00 },
    { TAS2505_NDAC, 0x84 },
    { TAS2505_MDAC, 0x82 },
    { TAS2505_DOSRMSB, 0x00 },
    { TAS2505_DOSRLSB, 0x80 },
    { TAS2505_IFACE1, 0x00 },
    { TAS2505_IFACE2, 0x00 },
    { TAS2505_DACINSTRSET, 0x02 },
    { TAS2505_REF_POR_LDO_BGAP_CTRL, 0x10 },
    { TAS2505_OUTPUTMODE, 0x00 },
    { TAS2505_MIXPOUTPUT, 0x04 },
    { TAS2505_HPGAIN, 0x00 },
    { TAS2505_P1R24, 0x00 },
    { TAS2505_HPPOWERUP, 0x20 },
    { TAS2505_P1R16, 0x00 },
    { TAS2505_SPKVOL1, 0x00 },
    { TAS2505_SPKVOL2, 0x10 },
    { TAS2505_SPKAMPCTRL1, 0x02 },
    { TAS2505_DACSETUP1, 0x90 },
    { TAS2505_DACVOL, 0x00 },
    { TAS2505_DACSETUP2, 0x04 },
    };

    您好:

    我这边在寄存器初始化的时候使用上述配置,在tas2505_power_on中snd_soc_write(codec, TAS2505_RESET, 1);之后重新写了一组寄存器

    static const struct reg_default tas2505_reg_initials[] = {
    //{ 0x00, 0x00 },
    //{ 0x01, 0x01 },
    //{ 0x00, 0x01 },
    { 0x80 + 0x02, 0x04 },
    //{ 0x00, 0x00 },
    { 0x04, 0x03 },
    { 0x05, 0x94 },
    { 0x06, 0x07 },
    { 0x07, 0x00 },
    { 0x08, 0x00 },
    // 15ms delay
    { 0x0B, 0x82 },
    { 0x0C, 0x87 },
    { 0x0D, 0x00 },
    { 0x0E, 0x80 },
    { 0x19, 0x00 },
    { 0x1A, 0x01 },
    { 0x1B, 0x20 },
    { 0x1C, 0x00 },
    { 0x1D, 0x00 },
    { 0x1E, 0x01 },
    { 0x1F, 0x00 },
    { 0x20, 0x00 },
    { 0x21, 0x00 },
    { 0x22, 0x00 },
    { 0x30, 0x00 },
    { 0x31, 0x00 },
    { 0x34, 0x00 },
    { 0x35, 0x12 },
    { 0x36, 0x02 },
    { 0x37, 0x02 },
    { 0x38, 0x02 },
    { 0x3C, 0x01 },
    { 0x3F, 0x91 },
    //{ 0x00, 0x01 },
    { 0x80 + 0x01, 0x00 },
    { 0x80 + 0x03, 0x00 },
    { 0x80 + 0x0A, 0x00 },
    { 0x80 + 0x0B, 0x00 },
    { 0x80 + 0x0C, 0x16 },
    { 0x80 + 0x16, 0x75 },
    { 0x80 + 0x18, 0x00 },
    { 0x80 + 0x09, 0x00 },
    { 0x80 + 0x10, 0x40 },
    { 0x80 + 0x2E, 0x00 },
    { 0x80 + 0x30, 0x10 },
    { 0x80 + 0x2D, 0x02 },
    //{ 0x00, 0x00 },
    { 0x41, 0x00 },
    { 0x40, 0x04 },
    };

    就可以进行播放了,我想请问TAS2505_RESET寄存器设定1之后会把之前的设置清除么?

  • 是的,将P0-R1寄存器bit D0置1可以 复位内部寄存器值。
  • 果然是这样,我在复位内部寄存器值之后重新设定寄存器就生效了,非常感谢!