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.

TLV320AIC3104: Output noise

Part Number: TLV320AIC3104

Tool/software:

Dear users,

I am using TLV320AIC3014 for audio playing. The codec is connected to a Bluetooth module (that is based on CSR8675) via I2s.
Configuration:

  • 32 bit, stereo, 48kHz
  • bluetooth is the I2S master
  • BCLK is 3.072MHz
  • BCLK is used as clock
  • fs ref (48kHz) is generated with PLL from BCLK
  • L/R LOP/LOM is used as output
  • BCLK is present if music is being played. If playing is stopped, the bluetooth module will not generate clock
  • DAC_L1 and DAC_R1 paths are used
  • Output gain is set to 0dB
  • Analog supply (3.3V) is filtered with a 10R+10uF low pass filter.

Issue: there is about 500mVpp noise (it seems to be white noise) on the output if BCLK is present. 


If DACs are not powered or output mixers are disabled, there is no noise on the output. So I think that noise source is the DAC. I tried to add low pass filter to the output, but it did not helped. I tried with external oscillator instead of BCLK as clock source, but nothing changed.


My reg config:

writeByteCodec(PAGE_SELECT,0);
writeByteCodec(CODEC_SAMPLE_RATE_SELECT,0);//sample rate 48kHz for ADC and DAC
writeByteCodec(CLOCK,0);//CODEC_CLKIN uses PLLDIV_OUT
writeByteCodec(CLOCK_GENERATION_CONTROL,0b10100010);//CLKDIV_IN uses MCLK|PLLCLK_IN uses BCLK|reserved
writeByteCodec(AUDIO_CODEC_OVERFLOW_FLAG,1);//PLL R = 1
writeByteCodec(PLL_PROGRAMMING_B,32<<2);//PLLJ=32
writeByteCodec(PLL_PROGRAMMING_A, 0b10000001);//PLLEN=1|PLLQ=0000|PLLP=001

writeByteCodec(CODEC_DATA_PATH_SETUP,0b00001010);
writeByteCodec(AUDIO_SERIAL_DATA_INTERFACE_CONTROL_B,0b00110000);//mode=I2S|word lenght=32bit
writeByteCodec(AUDIO_SERIAL_DATA_INTERFACE_CONTROL_C,1);//data offset=1 clock

writeByteCodec(DAC_POWER_AND_OUTPUT_DRIVER_CONTROL,0b11000000);//Left dac powered | right dac powered
writeByteCodec(82,0b10000000);
writeByteCodec(92,0b10000000);

writeByteCodec(DAC_OUTPUT_SWITCHING_CONTROL,0b00000001);
writeByteCodec(LEFT_DAC_DIGITAL_VOLUME_CONTROL,0b00000000);//left dac not muted|gain 0dB
writeByteCodec(RIGHT_DAC_DIGITAL_VOLUME_CONTROL,0b00000000);
writeByteCodec(LEFT_LOPM_OUTPUT_LEVEL_CONTROL,0b00001001);//LEFT LOP gain 0dB|unmuted|fully powered
writeByteCodec(RIGHT_LOPM_OUTPUT_LEVEL_CONTROL,0b00001001);

writeByteCodec(109,0b01000000);//DAC current to max.


Do you have any idea?

  • 1kHz sine wave played:



    Playing stopped or silence played:

  • Hi Balint,

    Could you give more detail on the low pass filter that you tried?

    I also see you added an additional offset on the data line. I just want to double check that you intend for the data to be offset by 2 bits, 1 for I2S format, 1 additional per Interface Control C.

    Also would you be able to take an FFT of the signal using your scope or some other tool to confirm that it's white noise?

    Thanks,
    Jeff McPherson

  • Hello,

    I have done some FFT measurements,and it seems that is problem is out of band noise.

    There are two different recommendations for filtering in TI application notes.
    This one in SLAA749 does nothing with the noise: (this is what I tried before writing to this forum the first time)



    CH1: output of TLV, CH2: output of DC blocking capacitor
    FFTs are the same, filter does nothing.



    This one in SLEA048:

    This worked well:


    It is much better, but still there is some noise on the output, and it can be heared on the amplifier. Maybe I'll try to add 2nd order passive RC LP. Do you have recommendation for this?

    I2S offset topic:
    Are you totally sure that the I2S setting already involve the 1 clock offset? Output amplitude was a bit low, and I added one offset (or 1 plus offset), and this solved this issue. If there was no offset by default, that means that all I2S samples are divided by 2. (because communication is set to 32 bit, but the master sends 24 bit audio with 0 padding on LSBs, so without any offset, MSB in the codec would be always 0)