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.

TLV320AIC3254: 192kHz Sample rate setting on PurePath Studio

Part Number: TLV320AIC3254
Other Parts Discussed in Thread: TPA3005D2

Hi,

We use TLV320AIC3254 with 16kHz sample rate on our products.

And we would like to modify the current 16kHz design to 192kHz sample rate for new production.

We set the PLL as below (using MCLK=16MHz) via PurePath Studio based on the section 2.7.1 of the ARG.

They meets the PLL clock range and also (PLL_CLKIN/P) condition.

But it does not work.

reg[  0][  5] = 0x91 ; P=1, R=1, J=5
reg[  0][  6] = 0x05 ; P=1, R=1, J=5
reg[  0][  7] = 0x0e ; D=3760
reg[  0][  8] = 0xb0 ; D=3760
reg[  0][  4] = 0x03 ; PLL_clkin = MCLK, codec_clkin = PLL_CLK, PLL on
reg[  0][254] = 0x0a ; Delay 10ms for PLL to lock
reg[  0][ 12] = 0x87 ; MDAC = 7, divider powered on
reg[  0][ 13] = 0x00 ; DOSR = 32(MSB)
reg[  0][ 14] = 0x20 ; DOSR = 32(LSB)
reg[  0][ 18] = 0x87 ; NADC = 7, divider powered on
reg[  0][ 19] = 0x82 ; MADC = 2, divider powered on
reg[  0][ 20] = 0x20 ; AOSR = 32
reg[  0][ 11] = 0x82 ; NDAC = 2, divider powered on

reg[  0][  27] = 0x0C    ; Change MCLK-> input, BCLK, WCLK, output to FPGA
reg[  0][  26] = 0x81        ; Powerup WCLK output module
reg[  0][  30] = 0x84        ; Powerup BCLK  output module and
reg[  0][  33] = 0x00        ; set WCLK source to ADC_FS

Do you have any other consideration about settings?

And could you give me the advice how to decide BCLK divider "N" value?

If that helps, we use TLV320AIC3254 for our current production with the following settings (MCLK=16MHz). It works well.

reg[  0][  5] = 0xD1 ; P=5, R=1, J=32
reg[  0][  6] = 0x20 ; P=5, R=1, J=32
reg[  0][  7] = 0x00 ; D=0000
reg[  0][  8] = 0x00 ; D=0000
reg[  0][  4] = 0x03 ; PLL_clkin = MCLK, codec_clkin = PLL_CLK, PLL on
reg[  0][254] = 0x0a ; Delay 10ms for PLL to lock
reg[  0][ 12] = 0x8A ; MDAC = 10, divider powered on
reg[  0][ 13] = 0x00 ; DOSR = 128(MSB)
reg[  0][ 14] = 0x80 ; DOSR = 128(LSB)
reg[  0][ 18] = 0x85 ; NADC = 5, divider powered on
reg[  0][ 19] = 0x8A ; MADC = 10, divider powered on
reg[  0][ 20] = 0x80 ; AOSR = 128
reg[  0][ 11] = 0x85 ; NDAC = 5, divider powered on

reg[  0][  27] = 0x0C    ; Change MCLK-> input, BCLK, WCLK, output to FPGA
reg[  0][  26] = 0x81        ; Powerup WCLK output module
reg[  0][  30] = 0x90        ; Powerup BCLK  output module and
reg[  0][  33] = 0x00        ; set WCLK source to ADC_FS

Best regards,

  • User, 

    Your first configuration may not be working due to the low DSP clock.  12.288Mhz for the DSP clock is pretty low. I don't know what your process flow looks like, but you would run out of instructions pretty quick.  Can you be more specific about what isn't working?  

    Regarding your second configuration,  it seems like it is set up for 16khz.  Note that the DSP clock in this case is still running at 20.48Mhz, and processing less Data (16khz vs 192khz)

    I would recommend the following clock settings for 192k,  with a 16Mhz input. 

    P=1

    R=1

    J=6

    D= 9120

    NDAC =2

    NADC=2

    MADC=9

    MDAC=9

    AOSR=32

    DOSR=32

    This will run the DSP clock at its maximum frequency,  giving you the most possible  instructions 

    Regarding the BCLK N value,  this value should be selected based of of the BCLK_DIV CLOCK 

    IF you choose the ADCMODCLK for example, for 192k you would be running at 192k*32 = 6.144Mhz. Now if you need I2S with 16bits per word,  you would need 16 * 2*192k= 6.144Mhz So N=1

    Obviously this is the limit when using the ADCMODCLK,  so if you needed 32 bits per channel,  then you would require a BCLK = 12.288Mhz,  in which case you would use a different input for the BCLK_DIVIDER such as ADC_CLK.  Which is running at ADC_MOD_CLK * M.  

    For the settings I provided,  this is 55.296Mhz. The issue here is that 55.296Mhz is not evenly divisible by 12.288.  so either you need to run BCLK higher than 12.288Mhz to accommodate this and have some pad bits after the audio data (certainly acceptable to do),  or you would need to change the ADC_CLK.  for example if I changed MDIV to 8 instead (and then changed D to 1440 to adjust the PLL_OUT)  then our ADC_CLK = 49.152Mhz which is evenly divisable 49.152/12.288= N = 4. 

    Does that make sense?  

    best regards,

    -Steve wilson

  • Thanks, Steve.

    It is very clear and understandable.

    I tried with the codec setting based on your recommendation.

    i) P=1, R=1, J.D=6.912, N=2, M=9, DOSR/AOSR=32, BCLK N=1

    ii) P=1, R=1, J.D=6.144, N=2, M=8, DOSR/AOSR=32, BCLK N=4

    I could see that wclk run 192kHz with oscilloscope in both cases.

    But HPL output is observed like below and it does not work.

    We configure the ADC channel for a differential electret microphone.

    (MIC --> CODEC IN3 -- I2S --> FPGA -- I2S --> CODEC HPL--> Power AMP(TPA3005D2) --> speaker)

    It seems when MIC input is active, power amp goes shutdown with the input from CODEC as below.

    They works well at 16kHz.

    When HPL output behave like below?

    Best regards,

    Kazue Ozono

  • Ozono-san, 

    1. Is it possible that the process flow uses components that are not available for FS=192k?  

    2. can you share the process flow?  if you prefer to share privately please PM me. 

    best regards,

    -Steve Wilson