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?