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.

TAS5805M: TAS5805

Part Number: TAS5805M
Other Parts Discussed in Thread: TAS5805

Hello!
When we used the TAS5805M, we found that when the digital volume register, DIG_VOL_CTL Register (Offset = 4Ch), was set, there was a "beep" sound from time to time. Finally, it is determined that the “嗒” sound comes out when the set value changes from 0x22 to 0x23. The set value will also come out from 0x22 to 0x23 from low to high. Only the left channel will have a “beep” sound, right sound No way.
This 嗒 sound is easier to hear when playing lighter music. This phenomenon can be reproduced on the demo board. This phenomenon is easier to copy when playing the first 50 seconds of the attached music.
We think it is the BUG of FW of TAS5805M, please help confirm!
Please help me to see what can be done to avoid this "squeaky" sound!

  • can you share us regsiter config or *.H file of your test? we will review what is happening. you can also attach audio you recorded of this "beep". TAS5805 had run robust listening/audio test, this behavior first report.
  • dear all
    This is the register setting, please help us to check

    /****************************************************************************
    ; EDIGI TECHNOLOGY Co., LTD.
    ;****************************************************************************/

    #define MAX_VOL 14
    #define VOL_MID 7

    #define TAS5805M_I2C_DEVICE_ADDR 0x5a
    #define TAS5805M_DEVICE_CTRL_2 0x03
    #define TAS5805M_DIG_VOL_CTRL 0x4C

    #define DigitalGain_Start_Tweeter 7
    BYTE_ROM Volume_Table[15] =
    {
    255,90, 77, 65, 55,
    46, 38, 31, 25, 20,
    16, 12, 8, 4, 0
    };

    extern U8 I2C_Write_n_Byte(U8 DevAddr,U8 addr,U8* dat,U16 n);

    U8 VolumeIndex;

    //=================================================
    // TAS5805M_Volume_UpDwn_Set
    //=================================================
    void TAS5805M_Volume_UpDwn_Set(void)
    {
    U16 tmp16;
    U8 DigitalGain;
    tmp16=Volume_Table[VolumeIndex];
    tmp16+=DigitalGain_Start_Tweeter;
    if(tmp16>255)tmp16=255;
    DigitalGain=tmp16;
    I2C_Write_n_Byte(TAS5805M_I2C_DEVICE_ADDR,TAS5805M_DIG_VOL_CTRL,&DigitalGain,1);
    }

    void TAS5805M_IC_Ini(void)
    {
    U8 DeviceCtrl2;
    VolumeIndex=VOL_MID;
    TAS5805M_PDN_L();//set PDL low
    Delay_1Ms(5);
    TAS5805M_PDN_H();//set PDL high
    Delay_1Ms(1);
    DeviceCtrl2=0x03;
    I2C_Write_n_Byte(TAS5805M_I2C_DEVICE_ADDR,TAS5805M_DEVICE_CTRL_2,&DeviceCtrl2,1);
    Delay_1Ms(5);
    TAS5805M_Volume_UpDwn_Set();
    }
    void TAS5805M_Volume_Up(void)
    {
    VolumeIndex++;
    if(VolumeIndex>MAX_VOL)VolumeIndex=MAX_VOL;
    TAS5805M_Volume_UpDwn_Set();
    }
    void TAS5805M_Volume_Down(void)
    {
    if(VolumeIndex!=0)VolumeIndex--;
    TAS5805M_Volume_UpDwn_Set();
    }
  • Hi customer,

    When you set volume of TAS5805, you need to write registers to TAS5805. Volume locates at book 8c/ page 2a, hence you need to switch book/page and then you can write certain 32bit (4 8-bit registers) value to volume. Please refer to :
    static void tas5805m_set_volume(struct snd_soc_codec *codec, int vol)
    {
    unsigned int index;
    uint32_t volume_hex;
    uint8_t byte4;
    uint8_t byte3;
    uint8_t byte2;
    uint8_t byte1;

    index = get_volume_index(vol);
    volume_hex = tas5805m_volume[index];

    byte4 = ((volume_hex >> 24) & 0xFF);
    byte3 = ((volume_hex >> 16) & 0xFF);
    byte2 = ((volume_hex >> 8) & 0xFF);
    byte1 = ((volume_hex >> 0) & 0xFF);

    //w 58 00 00 page 0
    snd_soc_write(codec, TAS5805M_REG_00, TAS5805M_PAGE_00);
    //w 58 7f 8c book 8c
    snd_soc_write(codec, TAS5805M_REG_7F, TAS5805M_BOOK_8C);
    //w 58 00 2a page 2a
    snd_soc_write(codec, TAS5805M_REG_00, TAS5805M_PAGE_2A);
    //w 58 24 xx xx xx xx 32bit volume value for left channel
    snd_soc_write(codec, TAS5805M_REG_24, byte4);
    snd_soc_write(codec, TAS5805M_REG_25, byte3);
    snd_soc_write(codec, TAS5805M_REG_26, byte2);
    snd_soc_write(codec, TAS5805M_REG_27, byte1);
    //w 58 28 xx xx xx xx 32bit volume value for left channel
    snd_soc_write(codec, TAS5805M_REG_28, byte4);
    snd_soc_write(codec, TAS5805M_REG_29, byte3);
    snd_soc_write(codec, TAS5805M_REG_2A, byte2);
    snd_soc_write(codec, TAS5805M_REG_2B, byte1);
    }

    Regards,
    Alix Wan.
  • Hello!
    What is the relationship between the value of register 0x24/0x25/0x25/0x27 and register 0x28/0x0x29/0x2A/0x2B of book 0x8C page 0x2A and volume (dB)? How to convert?