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.

CC2541 - No luck with PM2

Hi,

my lowest power consumption achieved is 240 microAmps. I never see PM2 with less than 2 microAmps. I try to enter PM2 by switching off the RF part using following code:

     uint8 disabled = FALSE;

     GAPRole_SetParameter( GAPROLE_ADVERT_ENABLED, sizeof( uint8 ), &disabled );
     GAPRole_TerminateConnection();

The effect of this code is, that the iPhone does no longer see the device. The remaining activity is a periodic timer  of my app with 3500 ms and OSAL running the real time clock. P0.0 is configured as ADC input, but no measurements are done. P1.1 drives a current of 3 microAmps. SDA and SCL are connected to external pull-ups, but the voltage level is "HIGH" all the time. All IO are configured as output, P0, P1 and P2 are set to 0x00 (with the exception of P1.1, see above). The CC debugger is not connected during these tests, DC DD and Reset are not connected. P0.4 is configured as input with no pull-up/down. All other IO are not connected.

Question 1: Did I use the right commands to switch off any RF activity?

Question 2: Any hint what I can check?

Many thanks in advance

Thomas Treyer

  • I am able to achieve a power consumption of less than 5 microAmps now. It seems that the LDO used (TPS70925) has had a problem with reverse current protection, which I solved by adding an additional resistor. Nevertheless the current is still too high. I pinned the problem down to some current leakage of the  SDA and SCL pins. I will report later in a new post after doing some more tests.

  • Hi,

    I am working on SimpleBLEPeripheralObserver project. I have surfed through lots and lots of discussion on sensortag PM2 mode. However, I still don’t get PM2 to work. I have done some of the things that others have done, such as:

     1. define POWER_SAVING

    2. turn off advertising mode by setting:

          adv_enabled = FALSE;

          GAPRole_SetParameter(GAPROLE_ADVERT_ENABLED, sizeof(uint8), & adv_enabled);

    3. turn off scanning mode by not setting:

      if(!simpleBLEScanning){

        GAPObserverRole_StartDiscovery( DEFAULT_DISCOVERY_MODE,

                                        DEFAULT_DISCOVERY_ACTIVE_SCAN,

                                        DEFAULT_DISCOVERY_WHITE_LIST );

      }

     ---------------------------------------------------------------------------------------------------------------------

    I am sure that the following code is executed, observed by using breakpoints.

    #if defined( POWER_SAVING )

      else  // Complete pass through all task events with no activity?

      {

        osal_pwrmgr_powerconserve();  // Put the processor/system into sleep

      }

    #endif

     

    void osal_pwrmgr_powerconserve( void )

    {

      uint32        next;

      halIntState_t intState;

     

      // Should we even look into power conservation

      //if ( pwrmgr_attribute.pwrmgr_device != PWRMGR_ALWAYS_ON )

      //{

        // Are all tasks in agreement to conserve

        if ( pwrmgr_attribute.pwrmgr_task_state == 0 )

        {

          // Hold off interrupts.

          HAL_ENTER_CRITICAL_SECTION( intState );

     

          // Get next time-out

          next = osal_next_timeout();

     

          // Re-enable interrupts.

          HAL_EXIT_CRITICAL_SECTION( intState );

     

          // Put the processor into sleep mode

          OSAL_SET_CPU_INTO_SLEEP( next );

        }

      //}

    }

    #endif /* POWER_SAVING */

     -----------------------------------------------------------------------------------------------------------------------------------

    After what was done above, I still get an average of 588 microAmps on the sensortag. Anything I’m missing? Please help me! I have been struggling with this for weeks.