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.

Compiler/CC2564: How to reduce the power consumption of CC2564B

Part Number: CC2564

Tool/software: TI C/C++ Compiler

Dear teams,

Have a nice day!

My customer is using STM32F103+CC2564B for their scanner gun. They used SPPLEDEMO and placed HID into it. Currently, there has three different mode, but not enabled at the same time. The freeRTOS's tickless mode has been enabled. The power consumption for different mode are nearly same with 20mA current when used for broadcasting. When it has connected, it has 27mA current consumption. Customer has tried to used "sniff" mode, but it does not works. Now, they try to let the stm32 enter "stop" mode, but it takes some time and Bluetooth will be disconnected.

So, they have tried to reduce the power consumption to minimum from hardware side. Do we have any way to reduce the power consumption further from software part?

Thanks!

Dylan (FAE)

  • Hi Dylan,

    Hope you're having a great day too!

    I have assigned an expert to help you on this issue. To clarify, which SDK version is the customer using?

    Best Regards,

    Jenny

  • Hi Jenny,

    Customer told me they used the general version SDK for STM32. 

    Kind regards

    Dylan

  • Hi Jenny,

    Are there any update?

    Dylan

  • Do, you have HCILL enabled? HCILL protocol allows the MCU and the controller to enter/leave low power states with a handshake. 

    Also, Did they enable low power modes on the controller?

    Thanks

  • Hi Nagalla,

    I checked the code and found the function VS_Enable_Sleep_Mode, which is consistent with the HCI command mentioned in your email. However, after sending VS_Enable_Sleep_Mode( BluetoothStackID ,1 ), the return value is 0, which means the transmission is successful, but there is no change in power consumption. Is the command correct? Do other parameters need to be set?
    The function code is as follows. If Sniff mode is used, how should several parameters of Sniff mode be set to ensure the lowest power consumption, and is there any range for the parameters?

                  /* The following function prototype represents the vendor specific   */

       /* function which is used to enable/disable the HCILL low power      */

       /* protocol for the Local Bluetooth Device specified by the Bluetooth*/

       /* Protocol Stack that is specified by the Bluetooth Protocol Stack  */

       /* ID.  The second parameter specifies whether to enable (TRUE) or   */

       /* disable (FALSE) the HCILL low power protocol.  This function      */

       /* returns zero if successful or a negative return error code if     */

       /* there was an error.                                               */

    int BTPSAPI VS_Enable_Sleep_Mode(unsigned int BluetoothStackID, Boolean_t Enable)

    {

       int    ret_val;

       Byte_t Length;

       Byte_t Status;

       Byte_t ReturnBuffer[8];

       Byte_t CommandBuffer[SLEEP_MODE_CONFIGURATIONS_COMMAND_SIZE];

       Byte_t OGF;

       Word_t OCF;

     

       /* Before continuing, make sure the input parameters appear to be    */

       /* semi-valid.                                                       */

       if(BluetoothStackID)

       {

          /* Format the command to send.                                    */

          ASSIGN_HOST_BYTE_TO_LITTLE_ENDIAN_UNALIGNED_BYTE(&(CommandBuffer[0]), 1);

          ASSIGN_HOST_BYTE_TO_LITTLE_ENDIAN_UNALIGNED_BYTE(&(CommandBuffer[1]), ((Enable == TRUE)?1:0));

          ASSIGN_HOST_BYTE_TO_LITTLE_ENDIAN_UNALIGNED_BYTE(&(CommandBuffer[2]), 0);

          ASSIGN_HOST_BYTE_TO_LITTLE_ENDIAN_UNALIGNED_BYTE(&(CommandBuffer[3]), 0xFF);

          ASSIGN_HOST_BYTE_TO_LITTLE_ENDIAN_UNALIGNED_BYTE(&(CommandBuffer[4]), 0xFF);

          ASSIGN_HOST_BYTE_TO_LITTLE_ENDIAN_UNALIGNED_BYTE(&(CommandBuffer[5]), 0xFF);

          ASSIGN_HOST_BYTE_TO_LITTLE_ENDIAN_UNALIGNED_BYTE(&(CommandBuffer[6]), 0xFF);

          ASSIGN_HOST_WORD_TO_LITTLE_ENDIAN_UNALIGNED_WORD(&(CommandBuffer[7]), 0x0000);

     

          /* Send the command to set the sleep mode configuration.          */

          Length  = sizeof(ReturnBuffer);

          OGF     = VS_COMMAND_OGF(VS_SLEEP_MODE_CONFIGURATIONS_COMMAND_OPCODE);

          OCF     = VS_COMMAND_OCF(VS_SLEEP_MODE_CONFIGURATIONS_COMMAND_OPCODE);

     

          ret_val = HCI_Send_Raw_Command(BluetoothStackID, OGF, OCF, SLEEP_MODE_CONFIGURATIONS_COMMAND_SIZE, (Byte_t *)(CommandBuffer), &Status, &Length, ReturnBuffer, TRUE);

     

          /* Map the return results into an error code.                     */

          ret_val = MapSendRawResults(ret_val, Status, Length, ReturnBuffer);

       }

       else

          ret_val = BTPS_ERROR_INVALID_PARAMETER;

     

       /* Return the result the caller.                                     */

       return(ret_val);

    }

    BR

    Brandon

  • Hi team,

    any update for now?

    BR

    Brandon.

  • How are you measuring the power? Is it across only CC2564C or the entire board i.e MCU+BTcontroller. If it is the later, ensure that the MCU is also entering low power modes.

    Thanks