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.

TAS3251EVM: No sound on EVM as I2S slave with external DAC

Part Number: TAS3251EVM
Other Parts Discussed in Thread: PCM1863

Hello,

I am trying to use the TAS3251EVM in slave configuration with an external PCM1863 ADC as I2S Master and I2C from an external MCU.
Unfortunately I can not get any sound out of the EVM.

I attached the external I2S 4-wires from the PCM1863 directly to the test-points between the heatsink and the J9 external board connector and can read them correctly with a logic analyzer.
I2C from my MCU is directly connected to the SCL and SDA test-points on the EVM. I checked the I2C data with a logic analyzer and all the registers seem to be set correctly.


The board is set up as follows:

1) J35 is set ( Slave Mode)
2) J19 isn't set (Adress 0x96 or 0x4B)
3) J3, J4, J6, J7 are set to EXT
4) J9 is set to SDIN
5) J37 I2S Select is not set (AIB I2S)
6) J22 is set to Master Mode
7) J33 is not set (XMOS disabled)
8) R54 and R55 are removed (I2C is coming from my PIC MCU)
9) S1 (DAC Mute) and S3 (Amp Reset) are set to normal and connected to MCU for control over startup sequence.

MCLK is 12.29 Mhz, LRCLK is 48kHz, BCLK is 3.07MHz.

At the output terminals I can read the 600 kHz switching frequency. My input signal is a 1kHz sine wave.

Am I missing something ? Please advice me.

Best regards



Here is the register configuration (from PPC3) and code  I am using and the start-up sequence:



cfg_reg registers[] = {
//program memory
    { 0x00, 0x00 },		
    { 0x7f, 0x00 },		//Switch to Book 0
    { 0x02, 0x11 },		//PowerDown DSP. Bit 0 not documented
    { 0x01, 0x11 },		//Reset module & registers. Bits are auto cleared
    { 0x00, 0x00 },		//Wait
    { 0x00, 0x00 },
    { 0x00, 0x00 },	
    { 0x00, 0x00 },
    { 0x03, 0x11 },		//Mute L&R
    { 0x2a, 0x00 },		//Zero Data path L&R (= mute...)
    { 0x25, 0x18 },		//Ignore MCLK error detection
    { 0x0d, 0x00 },		//Clck config..
    { 0x02, 0x00 },		//Wake up DSP
//Sample rate update
    { 0x00, 0x00 },		
    { 0x7f, 0x00 },		//Switch to Book0 ... again
    { 0x02, 0x80 },		//Reset DSP
    { 0x00, 0x00 },		
    { 0x7f, 0x00 },		//Switch to Book0 ... again
// speed 03-48k 04-96k
//dynamically reading speed
    { 0x22, 0x03 },		//Set FS Speed. Ignored in auto clock mode	
    { 0x00, 0x00 },		//Switch to Book0 ... again
    { 0x7f, 0x00 },
    { 0x02, 0x00 },		//Restart DSP
//write coefficients of various components
    { 0x00, 0x00 },		//Switch to Book8c
    { 0x7f, 0x8c },
    { 0x00, 0x1e },
    { 0x44, 0x00 },		//Vol to 0dB
    { 0x45, 0x80 },
    { 0x46, 0x00 },
    { 0x47, 0x00 },
    { 0x48, 0x00 },
    { 0x49, 0x80 },
    { 0x4a, 0x00 },
    { 0x4b, 0x00 },

//swap command
    { 0x00, 0x00 },		
    { 0x7f, 0x8c },		//Switch to Book8c
    { 0x00, 0x23 },		//Goto Page 23
    { 0x14, 0x00 },		//Write 00 00 00 01 in reg 0x14+
    { 0x15, 0x00 },
    { 0x16, 0x00 },
    { 0x17, 0x01 },

//register tuning
    { 0x00, 0x00 },		
    { 0x7f, 0x00 },		//Switch to Book0
    { 0x00, 0x00 },
    { 0x07, 0x00 },		//SDOut is post processing output	
    { 0x08, 0x20 },		//SDOut is output. No mute from PCM
    { 0x55, 0x16 },		//SDOut mux selector - DSP Boot done
    { 0x00, 0x00 },		
    { 0x7f, 0x00 },		//Switch to Book0
    { 0x00, 0x00 },
    { 0x3d, 0x24 },		//Digital volume Left	-18dB
    { 0x3e, 0x24 },		//Digital volume Right
    { 0x00, 0x00 },		
    { 0x7f, 0x00 },		//Switch to Book0
    { 0x00, 0x01 },		//Switch to Page1
    { 0x02, 0x00 },		//Analog Gain set to 0dB	
    { 0x06, 0x01 },		//Analog mute follows digital mute	


//Unmute the device
    { 0x00, 0x00 },		//Switch to Book0
    { 0x7f, 0x00 },
    { 0x03, 0x00 },		//UnMute L&R	
    { 0x2a, 0x11 },		//Enable data path (L-L & R-R)

};

   




void init_registers(cfg_reg *r, int n)
 {
    int i = 0;

    while (i < n) {
        switch (r[i].command) {
        case CFG_META_SWITCH:
            // Used in legacy applications.  Ignored here.
            break;
        case CFG_META_DELAY:
            __delay_ms(r[i].param);
            break;
         case CFG_META_BURST:
             I2C1_Send_PA((unsigned char *)&r[i+1], r[i].param);
            i +=  (r[i].param + 1)/2;
            break;
        default:
            I2C1_Send_PA(r[i].offset, r[i].value);
            break;
        }
        i++;
    }
 }



void PA_startup_sequence()
{
    reset_sequence();
    
    __delay_ms(50);
    
    init_registers(registers, sizeof(registers)/sizeof(registers[0]));
    
    __delay_ms(400);

    //adjust_volume();
    
    //Enable the amplifier output stage by setting the RESET_AMP pin high.
    PA_RESET_SetHigh();

    // Enable DAC
    PA_DAC_MUTE_SetHigh();

}
void shutdown_sequence()
{
  //code for shutdown_sequence
    PA_RESET_SetLow();
}

//code for fault_sequence
void fault_sequence()
{
  // Wait until system temperature gets back to normal temperature: /CLIP_OTW high
  while (PA_OTW_GetValue() == 0)
  {
    __delay_ms(100);
  }
  PA_RESET_SetLow();
  __delay_ms(10);
  PA_RESET_SetHigh();
}

void reset_sequence()
{
  PA_RESET_SetLow(); // Set Amp reset pin low
  PA_DAC_MUTE_SetLow(); // Set Dac mute pin low
}

  • Hi Sebastian.

    It seems that your connection and I2C communication are normal.

    You can only connect I2S externally on the EVM board and keep the others including I2C unchanged. I2C is set up using PPC3 and see if it works fine in this case.

    If it works fine in this case, then there may be an unexpected problem with the I2C write.

    BR.

    Wei Qiu.

  • Hi,

    Thanks for your response. By connecting the I2S externally, do you mean to the AIB connector (PIN11,13,15,17) or can I connect to the test points directly (without using the MUX) and use the PPC3?

    Best regards,
    SW

  • Hi Sebastian

    Yes, you can connect to the test point without mux directly and using PPC3 to transfer i2c signal.

    thanks.

    Jesse

  • Can you advice me how to set the jumpers on the board (slave, clock,adress, Mux...) and settings in PPC3 if I apply the I2S signal directly to the testpoints ?
    Do I need to set the input in PPC3 to AIB if I use the test-points (which are behind the MUX) as signal input ? The MCKL is not required and can be connected to GND right ?
    I unfortunately still can not get any sound. 
    Thanks,
    SW

  • Hi Sebastian

    Regarding your earliest configuration, I found a problem with setting J14 instead of J35 when setting the amp to slave mode.

    May I ask you a question that do your board work normally before? If you haven't tried it, our suggestion is that you first follow the user guide of the EVM board to set up to verify whether there is a problem with the board. TAS3251 Evaluation Module (Rev. B)

    In the case that the board can work normally, only connect the I2S and try to keep the others unchanged.

    If you need, we can provide the schematic and layout of this EVM board for your reference.

    My email is wei-qiiu@ti.comIf you have any other questions, feel free to ask.

    BR.

    Wei Qiu.