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.

CC2564MODA: Metallic troubles in the audio files shared with my phone and problems with pairing

Part Number: CC2564MODA
Other Parts Discussed in Thread: TLV320ADC3101, , TAS2505, CC2564

Hello, 

I have 2 problems with a design made around CC2564MODACMOG, TLV320ADC3101 and MSP430F5224IRGZ parts. 

My first problem is that sometimes, I have metallic noise mixed to my audio signal. I can't explain the origin. Unfortunatelly, I can't post my signal as I am not allowed by my customer. 

The signals look good, and some transfers are OK. I don't know in which direction I have to check. 

My other issue is for pairing. With smartphone, the pairing process is unstable. For the very first pairing step, no problem, the product is directly paired to the phone. Unfortunatelly, when I tried to re-pair the product, I always receive an error message. I have to restart the whole product and to forget it in the phone parameter to be able to pair. 

I noted an unstability when trying the module with the last Android 7 mobile phone. The double data communication (audio + data) was working on the previous (Android 6) version, but now, on Android 7, I just the audio flow, and not the data transfer anymore. Do you have any experience feedback about this point? 

Thank you for any help, my customer is hurried, and I am clearly locked with those different point at this step. I remain at your disposal for any complement, but I can't share my schematics, layout, and audio files directly on the forum for confidentiality agreements. 

With Regards, 

Nicolas 

  • Nicolas,

    This could be due to improper I2S line configuration.

    Can you share which I2S/PCM parameters are you using on both CC2564MODA and TLV320ADC3101 side?

    Best regards,
    Vihang
  • Hello Vihang,

    About the parameters, they are configured as follow:


    For TLV320ADC3101:



    static void ConfigureCodecTLV(void)
    {
    /* Start of TLV320ADC3101 Interfaces Setup */
    /* AUD_nRESET, I2C */
    // TLV320ADC3101 AUD_nRESET - P1.7
    P1DIR |= BIT7; // P1.7 = Output
    P1OUT &= ~BIT7; // P1.7 = Low (TLV320ADC3101 OFF)
    // TLV320ADC3101 I2C IOs - MSP_SDA P3.0, MSP_SCL P3.1
    P3SEL |= (BIT0 + BIT1); // P3.0,1 = USCI_B0 Mode, SDA and SCL
    // TLV320ADC3101 I2C Module - USCI_B0
    UCB0CTL1 |= UCSWRST; // Hold module in reset state
    UCB0CTL0 = UCMST + UCMODE_3 + UCSYNC; // I2C Master, 7-bit Address, Synchronous Mode
    UCB0CTL1 = UCSSEL_2 + UCSWRST; // SMCLK Source, keep SW reset
    UCB0BR0 = 19; // fSCL = SMCLK/20 = 400kHz
    UCB0BR1 = 0; // fSCL = 8MHz/20 = 400kHz
    UCB0I2CSA = 0x18; // Slave Address is 018 -> 0011 000
    UCB0CTL1 &= ~UCSWRST; // Enable module
    UCB0IE |= UCTXIE; // Enable USCI_B0 TX interrupt
    UCB0IE |= UCRXIE; // Enable USCI_B0 RX interrupt
    /* End of TLV320ADC3101 Interfaces Setup */

    // Turn TLV320ADC3101 device On
    __delay_cycles(800000); // Wait 100ms before turning TLV320ADC3101
    P1OUT |= BIT7; // P1.7 = High (TAS2505 ON)
    }






    For Bluetooth, this is my main thread (HFP communication):

    static void MainThread(void)
    {
    int Result;
    BTPS_Initialization_t BTPS_Initialization;
    HCI_DriverInformation_t HCI_DriverInformation;
    HCI_HCILLConfiguration_t HCILLConfig;
    HCI_Driver_Reconfigure_Data_t DriverReconfigureData;

    /* Flag that sleep is not currently enabled. */
    SleepEnabled = FALSE;

    /* Configure the UART Parameters. */
    HCI_DRIVER_SET_COMM_INFORMATION(&HCI_DriverInformation, 1, 115200, cpHCILL_RTS_CTS);
    HCI_DriverInformation.DriverInformation.COMMDriverInformation.InitializationDelay = 100;

    /* Set up the application callbacks. */
    BTPS_Initialization.GetTickCountCallback = GetTickCallback;
    BTPS_Initialization.MessageOutputCallback = DisplayCallback;

    /* Initialize the application. */
    if((Result = InitializeApplication(&HCI_DriverInformation, &BTPS_Initialization)) > 0)
    {
    /* Save the Bluetooth Stack ID. */
    BluetoothStackID = (unsigned int)Result;

    /* Register a sleep mode callback if we are using HCILL Mode. */
    if((HCI_DriverInformation.DriverInformation.COMMDriverInformation.Protocol == cpHCILL) || (HCI_DriverInformation.DriverInformation.COMMDriverInformation.Protocol == cpHCILL_RTS_CTS))
    {
    HCILLConfig.SleepCallbackFunction = HCI_Sleep_Callback;
    HCILLConfig.SleepCallbackParameter = 0;
    DriverReconfigureData.ReconfigureCommand = HCI_COMM_DRIVER_RECONFIGURE_DATA_COMMAND_CHANGE_HCILL_PARAMETERS;
    DriverReconfigureData.ReconfigureData = (void *)&HCILLConfig;

    /* Register the sleep mode callback. Note that if this */
    /* function returns greater than 0 then sleep is currently */
    /* enabled. */
    Result = HCI_Reconfigure_Driver(BluetoothStackID, FALSE, &DriverReconfigureData);
    if(Result > 0)
    {
    /* Flag that sleep mode is enabled. */
    SleepEnabled = TRUE;
    }
    }

    HAL_SetLedState(BT_WAIT_t);

    /* Add the idle function (which determines if LPM3 may be entered)*/
    /* to the scheduler. */
    if(BTPS_AddFunctionToScheduler(IdleFunction, NULL, 0))
    {
    BTPS_AddFunctionToScheduler(StateFunction, NULL, 100);
    /* Loop forever and execute the scheduler. */
    while(1)
    {
    BTPS_ExecuteScheduler();

    }
    }
    }
    }


    Do you need anything else? (If not published, I can send to you my whle project if needed)

    With Regards,

    N.Vandeputte
  • Nicolas,

    The code above does not cover the call to HCI_VS_Codec_Config command, which configures the I2S interface of the CC2564.

    Moreover, the ConfigureCodecTLV() function above is just configuring the I2C interface of the MSP430 to control the TLV320ADC3101. What I2S parameters does the TLV320ADC3101 use?

    I sent you connection request on e2e portal. You can share your project privately from there.

    Moreover, can you please do a PCM loopback test to check if the noise still exists?


    Best regards,
    Vihang

  • Hello Vihang,

    I want to send you my whole project, but did not find the way to "share my project privately". I can't see what is you request on E2E portal. Could you please tell me how to do precisely?

    Thank you,

    With Regards,

    Nicolas
  • Nicolas,

    After reviewing the source code, it appears that you have initialization settings for the I2S interface on the TLV320ADC3101 side, but there is no call to the VS_PCM_Codec_Config() to configure the I2S/PCM interface of the CC2564MODA. You need to call this API with proper parameters when you

    1. At initilization between the Openstack() and HAL_ConfigureCodec() calls.
    2. every time you are changing between WBS and NBS. You can just call the VS_PCM_Codec_Config() before calling the VS_EnableWBS() and VS_DisableWBS() in your callbacks.

    This is most likely the reason for the metallic noise you are getting. Please let me know how it goes.

    Best regards,
    Vihang
  • Dear Vihang, 

    Thank you for your proposal,

    I will test and see if the behaviour is now improved, as done as it happened "some times" only. 

    With Regards, 

    N.Vandeputte