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.

Reduction of power consumption in cc3200

Other Parts Discussed in Thread: CC3200, ENERGIA, CC3200-LAUNCHXL

Hi.

Myself S. Janarthanan,i am working on project in cc3200 which send sensor data for a particular interval of time and sleeps.

The power consumption on my board goes to 150mA on working that is using wifi,and comes to 4 mA on sleep,i can not reduce more than this power consumption,

i need to go below 1mA,can any one suggest me a way to do it?

I made most of the GPIO pins as PULLDOWN. i am new to this can some one guide me?

  • I am trying to do something similar, i have tried the LPDS mode and i have followed the GPIO parking recommendations in the docs. However, the chip current in the Launch pad is not going below 4.1mA. 

    I am measuring the above current in J12. The code is written in energia.

    Much appreciate any help on this matter.

  • Just an update on the above, I moved to using CCS (from energia) and tried out the idle_profile_nonos. The HW is CC3200 Launchpad XL.

    After the cc_idle_task_pm(); is invoked i still read 3.76mA? I am not sure what i am missing. I am trying to bring the power down to 1mA is that possible?

    Hibernate works fine, the only problem is i have a sensor connected to my board and even though i have a GPIO to switch the sensor off, once i go in to hibernate i lose the GPIO state and my sensor comes ON and starts drawing power.

    Can any PM framework experts help me out here.

  • Janarthanan, Which board are you using for these measurements? TI's LP or your custom board?
    Junaith, Which measurement equipment are you using to measure the LPDS currents? Can you please send a screen capture of this equipment showing above current numbers?

    -/Praneet
  • Yes,am using custom board. In that I pulled most of the GPIO's to ground, but the processor itself consumes 4.1mA

  • Thanks. Can you please answer the second part of my questions as well?

    -/Praneet
  • please find the picture below. The multimeter can measure a max of 400mA in the current mode i have set. Code is idle_profile_nonos (SDK 1.1.0)

  • I have shown a video link of my video,which will show the power consumption of my board,see it and let me know what other details you want.

    Thanx in advance :-)

    https://youtu.be/gdJEOK9VwoQ

  • Janarthanan, Junaith,

    In 'Idle Connected' mode, the device wakes up intermittently (usually 100ms) to receive the beacon and then enters LPDS. Multimeter cannot be used for these measurements - Please refer 'processors.wiki.ti.com/.../CC3200_Current_Measurements' for details on the current measurement methods on CC3200-LAUNCHXL board.

    -/Praneet
  • Praneet thanks for the response, i am interested in keeping it in LPDS for 15 minutes or so, can u suggest an example. I dont want the network, i just want to save power.

    Also whats the expected current in LPDS mode for LAUNCHXL (only the chip).

    thanks

    Junaith

  • Junaith, You can use 'idle_profile' sample application of the SDK w/o the part of code that configures the device to connect to an AP for putting the device in LPDS (.i.e. both NWP and APPS subsystem in LPDS mode). Please refer section 4.9 of CC3200's datasheet for the expected current numbers.

    -/Praneet
  • Praneet, My custom board has similar pins and config's as TI cc3200 board,i have turned off all other peripherals,and then putting the processor to LPDS mode,but still the processor itself consumes 4mA. I have shown the code which i used in my device.

    pinMode(5, INPUT_PULLDOWN); //GPIO_06
    pinMode(30, INPUT_PULLDOWN); //GPIO_00
    pinMode(28, INPUT_PULLDOWN); //GPIO_30
    pinMode(12, INPUT_PULLDOWN); //GPIO_01
    pinMode(23, INPUT_PULLDOWN); //GPIO_02 
    pinMode(25, INPUT_PULLDOWN); //GPIO_03
    pinMode(26, INPUT_PULLDOWN); //GPIO_04
    pinMode(24, INPUT_PULLDOWN); //GPIO_05
    pinMode(34, INPUT_PULLDOWN); //GPIO_07
    pinMode(27, INPUT_PULLDOWN); //GPIO_08
    pinMode(37, INPUT_PULLDOWN); //GPIO_09
    pinMode(9, INPUT_PULLDOWN); //GPIO_10
    pinMode(10, INPUT_PULLDOWN); //GPIO_11 
    pinMode(4, INPUT_PULLDOWN); //GPIO_12
    pinMode(3, INPUT_PULLDOWN); //GPIO_13
    pinMode(7, INPUT_PULLDOWN); //GPIO_14
    pinMode(14, INPUT_PULLDOWN); //GPIO_15
    pinMode(15, INPUT_PULLDOWN); //GPIO_16
    pinMode(18, INPUT_PULLDOWN); //GPIO_17
    pinMode(11, INPUT_PULLDOWN); //GPIO_22
    pinMode(32, INPUT_PULLDOWN); //GPIO_23
    pinMode(31, INPUT_PULLDOWN); //GPIO_24
    pinMode(35, INPUT_PULLDOWN); //GPIO_28
    pinMode(PIN_19, INPUT_PULLDOWN);
    pinMode(PIN_20, INPUT_PULLDOWN);
    pinMode(PIN_21, INPUT_PULLDOWN);
    pinMode(PIN_45, INPUT_PULLDOWN);
    pinMode(PIN_11, INPUT_PULLDOWN);
    pinMode(PIN_12, INPUT_PULLDOWN);
    pinMode(PIN_13, INPUT_PULLDOWN);
    pinMode(PIN_14, INPUT_PULLDOWN);

    PRCMLPDSWakeupSourceEnable(PRCM_LPDS_TIMER);
    PRCMLPDSIntervalSet(Timer10Sec);
    PRCMLPDSEnter();


    --------------------- energia prcm.c

    //*****************************************************************************
    //
    //! Puts the system into Low Power Deel Sleep (LPDS) power mode.
    //!
    //! This function puts the system into Low Power Deel Sleep (LPDS) power mode.
    //! A call to this function never returns and the execution starts from Reset.
    //! \sa PRCMLPDSRestoreInfoSet().
    //!
    //! \return None.
    //
    //*****************************************************************************
    void
    PRCMLPDSEnter()
    {
    volatile unsigned long ulDelay;

    //
    // Check if flash exists
    //
    if(HWREG((GPRCM_BASE +
    GPRCM_O_GPRCM_EFUSE_READ_REG2) & 0x00110000) == 0x00110000)
    {

    //
    // Disable the flash
    //
    FlashDisable();
    }

    #ifndef KEEP_TESTPD_ALIVE

    //
    // Disable TestPD
    //
    HWREG(0x4402E168) |= (1<<9);
    #endif

    //
    // Set bandgap duty cycle to 1
    //
    HWREG(HIB1P2_BASE + HIB1P2_O_BGAP_DUTY_CYCLING_EXIT_CFG) = 0x1;

    //
    // Request LPDS
    //
    HWREG(ARCM_BASE + APPS_RCM_O_APPS_LPDS_REQ)
    = APPS_RCM_APPS_LPDS_REQ_APPS_LPDS_REQ;

    __asm(" nop\n"
    " nop\n"
    " nop\n"
    " nop\n");

    }

    Praneet,Let me know,if  find any loop holes in my code.
  • Is your device connected to AP?

    -/Praneet
  • yes praneet
  • Janarthanan,

    Then, as I pointed in my earlier post, multimeter cannot be used for these measurements since the current is non-static in this mode and the device wakes up intermittently from LPDS (usually 100ms) to receive the beacon - Please refer 'processors.wiki.ti.com/.../CC3200_Current_Measurements' for details on the current measurement methods while in 'Idle Connected' mode.

    -/Praneet
  • Here u go, i have modified the idle_profile code the firmware will directly go try to go in to LPDS mode and wont wait for Serial commands. I have attached the code for your reference, I dont see any difference, i still measure 3.8mA. Far off from 0.25mA specified in the datasheet. 

    how do we confirm that the code places the chip in the right mode (esp the cc_idle_task_pm).

    Is it possible for someone to confirm that the attached code consumes 3.8mA

    //*****************************************************************************
    //
    // Copyright (C) 2014 Texas Instruments Incorporated - http://www.ti.com/ 
    // 
    // 
    //  Redistribution and use in source and binary forms, with or without 
    //  modification, are permitted provided that the following conditions 
    //  are met:
    //
    //    Redistributions of source code must retain the above copyright 
    //    notice, this list of conditions and the following disclaimer.
    //
    //    Redistributions in binary form must reproduce the above copyright
    //    notice, this list of conditions and the following disclaimer in the 
    //    documentation and/or other materials provided with the   
    //    distribution.
    //
    //    Neither the name of Texas Instruments Incorporated nor the names of
    //    its contributors may be used to endorse or promote products derived
    //    from this software without specific prior written permission.
    //
    //  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 
    //  "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 
    //  LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
    //  A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 
    //  OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 
    //  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 
    //  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
    //  DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
    //  THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
    //  (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
    //  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    //
    //*****************************************************************************
    
    //*****************************************************************************
    //
    // Application Name     - Idle Profile Non Os
    // Application Overview - Idle profile enables the user to measure current 
    //                        values, power consumption and other such parameters 
    //                        for CC3200, when the device is essentially idle(both 
    //                        NWP and APPS subsystems in low power deep sleep 
    //                        condition). The other main objective behind this 
    //                        application is to introduce the user to the easily 
    //                        configurable power management framework. This
    //                        example is for non os environment.
    // Application Details  -
    // http://processors.wiki.ti.com/index.php/CC32xx_Idle_Profile_NonOS_Application
    // or
    // docs\examples\CC32xx_Idle_Profile_NonOS_Application.pdf
    //
    //*****************************************************************************
    
    //****************************************************************************
    //
    //! \addtogroup idle_profile_nonos
    //! @{
    //
    //****************************************************************************
    
    // Standard includes
    #include <stdio.h>
    #include <string.h>
    #include <stdbool.h>
    
    //driverlib includes
    #include "hw_ints.h"
    #include "hw_types.h"
    #include "hw_memmap.h"
    #include "interrupt.h"
    #include "prcm.h"
    #include "utils.h"
    #include "rom.h"
    #include "rom_map.h"
    
    // Simplelink includes
    #include "simplelink.h"
    
    //middleware includes
    #include "cc_types.h"
    #include "cc_pm.h"
    #include "cc_pm_ops.h"
    
    // Common interface includes
    #include "uart_if.h"
    #include "udma_if.h"
    
    #include "pinmux.h"
    #include "common.h"
    
    #define APPLICATION_VERSION "1.1.1"
    
    //
    // Values for below macros shall be modified as per access-point(AP) properties
    // SimpleLink device will connect to following AP when application is executed
    //
    #define GPIO_SRC_WKUP           PRCM_LPDS_GPIO13  
    #define LPDS_DUR_SEC            20
    #define FOREVER                 1
    #define BUFF_SIZE               1472
    
    #define WK_LPDS 				0   /*Wake from LPDS */
    #define WK_HIB					1   /*Wake from Hibernate */
    
    /* commands */
    #define APP_SLEEP				0x8     
    #define APP_SEND				0x10
    #define APP_RECV				0x20
    #define APP_ERROR				0x40
    
    /* udp transmission related parameters */
    #define IP_ADDR                 0xFFFFFFFF /* broadcast */
    #define PORT_NUM                5001
    #define BUF_SIZE                1400
    #define UDP_PACKET_COUNT        1000
    
    enum ap_events{
        EVENT_CONNECTION = 0x1,
        EVENT_DISCONNECTION = 0x2,
        EVENT_IP_ACQUIRED = 0x4,
        WDOG_EXPIRED = 0x8,
        CONNECTION_FAILED = 0x10
    };
    
    //****************************************************************************
    //                      LOCAL FUNCTION PROTOTYPES
    //****************************************************************************
    void sl_WlanEvtHdlr(SlWlanEvent_t *pSlWlanEvent);
    void sl_NetAppEvtHdlr(SlNetAppEvent_t *pNetAppEvent);
    static void DisplayBanner();
    static long WlanConnect();
    void WlanDisconnect();
    static void BoardInit();
    void SwitchToStaMode(int iMode);
    
    //*****************************************************************************
    //                 GLOBAL VARIABLES -- Start
    //*****************************************************************************
    #ifndef USE_TIRTOS
    #if defined(ccs) || defined(gcc)
    extern void (* const g_pfnVectors[])(void);
    #endif
    #if defined(ewarm)
    extern uVectorEntry __vector_table;
    #endif
    #endif
    
    unsigned long g_ulIpAddr = 0;
    unsigned long g_ulStatus = 0;
    char g_cErrBuff[100];
    unsigned long  g_ulDestinationIp = IP_ADDR;        // Client IP address
    unsigned int   g_uiPortNum = PORT_NUM;
    unsigned long  g_ulPacketCount = UDP_PACKET_COUNT;
    char g_cBsdBuf[BUF_SIZE];
    
    //*****************************************************************************
    //                 GLOBAL VARIABLES -- End
    //*****************************************************************************
    
    //*****************************************************************************
    //                      Local Function Prototypes
    //*****************************************************************************
    extern void lp3p0_setup_power_policy(int power_policy);
    extern int platform_init();
    extern int set_rtc_as_wk_src(int pwr_mode, unsigned long time_interval,
                                 bool is_periodic);
    extern int set_gpio_as_wk_src(int pwr_mode, unsigned long wk_pin,
                                  unsigned long trigger_type);
    extern void set_host_irq_as_lpds_wk_src();
    
    //*****************************************************************************
    //
    //! DisplayBanner
    //!
    //! \param  none
    //!
    //! \return none
    //!
    //*****************************************************************************
    static void
    DisplayBanner()
    {
        UART_PRINT("\n\n\n\r");
        UART_PRINT("\t\t   *********************************************\n\r");
        UART_PRINT("\t\t     CC3200 Idle Profile Non Os Application   \n\r");
        UART_PRINT("\t\t   *********************************************\n\r");
        UART_PRINT("\n\n\n\r");
    
    }
    
    //*****************************************************************************
    //
    //! Application defined idle task hook
    //! 
    //! \param  none
    //! 
    //! \return none
    //!
    //*****************************************************************************
    void SimpleLinkSyncWaitLoopCallback()
    {
        //
        // setting host IRQ as a wake up src
        //
    	set_host_irq_as_lpds_wk_src(true);
        
        //
        // executing idle task
        //
        cc_idle_task_pm();
        
        //
        // removing host IRQ as a wake ip src
        //
        set_host_irq_as_lpds_wk_src(false);
    }
    
    //****************************************************************************
    //
    //! \brief This function handles WLAN events
    //!
    //! \param[in]  pSlWlanEvent is the event passed to the handler
    //!
    //! \return    None
    //
    //****************************************************************************
    void sl_WlanEvtHdlr(SlWlanEvent_t *pSlWlanEvent)
    {
        switch(pSlWlanEvent->Event)
        {
        case SL_WLAN_CONNECT_EVENT:
            UART_PRINT("C\n\r");
            break;
        case SL_WLAN_DISCONNECT_EVENT:
            UART_PRINT("D\n\r");
            break;
        default:
            break;
        }
    }
    
    //****************************************************************************
    //
    //! \brief This function handles events for IP address acquisition via DHCP
    //!           indication
    //!
    //! \param[in]    pNetAppEvent is the event passed to the handler
    //!
    //! \return     None
    //
    //****************************************************************************
    void sl_NetAppEvtHdlr(SlNetAppEvent_t *pNetAppEvent)
    {
        switch(pNetAppEvent->Event)
        {
        case SL_NETAPP_IPV4_IPACQUIRED_EVENT:
        case SL_NETAPP_IPV6_IPACQUIRED_EVENT:
            g_ulIpAddr = pNetAppEvent->EventData.ipAcquiredV4.ip;
            g_ulStatus = 1;
            UART_PRINT("IP: %d.%d.%d.%d \n\r",(g_ulIpAddr&0xFF000000)>>24,
                                  (g_ulIpAddr&0x00FF0000)>>16,
                                  (g_ulIpAddr&0x0000FF00)>>8,
                                  (g_ulIpAddr&0x000000FF));
            break;
        default:
            break;
        }
    }
    
    //*****************************************************************************
    //
    //! This function gets triggered when HTTP Server receives Application
    //! defined GET and POST HTTP Tokens.
    //!
    //! \param pSlHttpServerEvent Pointer indicating http server event
    //! \param pSlHttpServerResponse Pointer indicating http server response
    //!
    //! \return None
    //!
    //*****************************************************************************
    void sl_HttpServerCallback(SlHttpServerEvent_t *pSlHttpServerEvent,
                               SlHttpServerResponse_t *pSlHttpServerResponse)
    {
    }
    
    //*****************************************************************************
    //
    //! This function handles socket events indication
    //!
    //! \param[in]      pSock - Pointer to Socket Event Info
    //!
    //! \return None
    //!
    //*****************************************************************************
    void SimpleLinkSockEventHandler(SlSockEvent_t *pSock)
    {
        //
        // This application doesn't work w/ socket - Events are not expected
        //
    
    }
    
    //****************************************************************************
    //
    //!  \brief Connecting to a WLAN Accesspoint
    //!
    //!   This function connects to the required AP (SSID_NAME) with Security
    //!   parameters specified in te form of macros at the top of this file
    //!
    //!   \param[in]              None
    //!
    //!   \return       status value
    //!
    //!   \warning    If the WLAN connection fails or we don't aquire an IP
    //!            address, It will be stuck in this function forever.
    //
    //****************************************************************************
    static long WlanConnect()
    {
        SlSecParams_t secParams = {0};
        long lRetVal = 0;
    
        secParams.Key = (signed char*)SECURITY_KEY;
        secParams.KeyLen = strlen(SECURITY_KEY);
        secParams.Type = SECURITY_TYPE;
    
        lRetVal = sl_WlanConnect((signed char*)SSID_NAME, strlen(SSID_NAME), 0, \
                                        &secParams, 0);
        ASSERT_ON_ERROR(lRetVal);
    
        while(g_ulStatus != 1)
        {
            // Wait for WLAN Event
            _SlNonOsMainLoopTask();
        }
    
        return SUCCESS;
    }
    
    //*****************************************************************************
    //
    //! Board Initialization & Configuration
    //!
    //! \param  None
    //!
    //! \return None
    //
    //*****************************************************************************
    static void
    BoardInit(void)
    {
    /* In case of TI-RTOS vector table is initialize by OS itself */
    #ifndef USE_TIRTOS
      //
      // Set vector table base
      //
    #if defined(ccs) || defined(gcc)
        IntVTableBaseSet((unsigned long)&g_pfnVectors[0]);
    #endif
    #if defined(ewarm)
        IntVTableBaseSet((unsigned long)&__vector_table);
    #endif
    #endif
      //
      // Enable Processor
      //
      MAP_IntMasterEnable();
      MAP_IntEnable(FAULT_SYSTICK);
    
      PRCMCC3200MCUInit();
    }
    
    //*****************************************************************************
    //
    //! Check the device mode and switch to STATION(STA) mode
    //! restart the NWP to activate STATION mode
    //!
    //! \param  iMode (device mode)
    //!
    //! \return None
    //
    //*****************************************************************************
    void SwitchToStaMode(int iMode)
    {
        if(iMode != ROLE_STA)
        {
            sl_WlanSetMode(ROLE_STA);
            MAP_UtilsDelay(80000);
            sl_Stop(10);
            MAP_UtilsDelay(80000);
            sl_Start(NULL,NULL,NULL);
        }
    
    }
    
    //*****************************************************************************
    //
    //! Parse the input string command
    //! 
    //! \param  buff is the input buffer cmd to be parsed 
    //! \param  cmd is the pointer to the cmd code for the input command
    //!
    //!\return  None
    //
    //*****************************************************************************
    void ParseCmd(char* buff, signed char*cmd)
    {
    	if(strcmp(buff, "sleep") == 0){
    		*cmd = APP_SLEEP;
    	}else if(strcmp(buff, "send") == 0){
    		*cmd = APP_SEND;
    	}else if(strcmp(buff, "recv") == 0){
    		*cmd = APP_RECV;
    	}else{
    		*cmd = APP_ERROR;
    	}
    }
    
    //****************************************************************************
    //                            MAIN FUNCTION
    //****************************************************************************
    int main(void)
    {
        long lRetVal;
    	char cCmdBuff[20];
    	signed char cCmd = APP_SLEEP;
    
        SlSockAddrIn_t  sAddr;
        SlSockAddrIn_t  sLocalAddr;
        SlSockAddrIn_t  sBrdAddr;
        int             iCounter;
        int             iAddrSize;
        int             iSockID;
        int             iStatus;
        long            lLoopCount = 0;
        short           sTestBufLen;
        struct SlTimeval_t timeVal;
    
        //
        // Board Initialization
        //
        BoardInit();
        
        //
    	// uDMA Initialization
    	//
    	//UDMAInit();
        
        //
        // Configure the pinmux settings for the peripherals exercised
        // Note: pinmux has been modified after the output from pin mux tools
        // to enable sleep clk for the peripherals exercised
        //
        PinMuxConfig();
    
        //
    	// Initialize the platform
    	//
    	platform_init();
    
        //
        // Initialise the UART terminal
        //
        //InitTerm();
    
        //
    	// Display banner
    	//
        DisplayBanner();
        UART_PRINT("About to start sl_Start function \n\r");
    
    #if 0
    	//
        // starting the simplelink
        //
    	lRetVal = sl_Start(NULL, NULL, NULL);
    	if (lRetVal < 0)
    	{
    		UART_PRINT("Failed to start the device \n\r");
    		LOOP_FOREVER();
    	}
    
        //
        // Swtich to STA mode if device is not
        //
        SwitchToStaMode(lRetVal);
        
        //
        // set connection policy
        //
        sl_WlanPolicySet(SL_POLICY_CONNECTION, 
                                    SL_CONNECTION_POLICY(0, 0, 0, 0, 0), NULL, 0);
    	//
    	// Set the power management policy of NWP
    	//
    	lRetVal = sl_WlanPolicySet(SL_POLICY_PM, SL_NORMAL_POLICY, NULL, 0);
    
        UART_PRINT("Trying to Connect to AP: %s ...\r\n",SSID_NAME);
    
        //
        //Connecting to WLAN AP
        //
        lRetVal = WlanConnect();
        if(lRetVal < 0)
        {
            UART_PRINT("Failed to establish connection w/ an AP \n\r");
            LOOP_FOREVER();
        }
    
        // filling the buffer
        for (iCounter=0 ; iCounter<BUF_SIZE ; iCounter++)
        {
            g_cBsdBuf[iCounter] = (char)(iCounter % 10);
        }
        
    	sTestBufLen  = BUF_SIZE;
    	//filling the UDP server socket address
    	sLocalAddr.sin_family = SL_AF_INET;
    	sLocalAddr.sin_port = sl_Htons((unsigned short)PORT_NUM);
    	sLocalAddr.sin_addr.s_addr = 0;
    
    	//filling the UDP server socket address
    	sBrdAddr.sin_family = SL_AF_INET;
    	sBrdAddr.sin_port = sl_Htons((unsigned short)PORT_NUM);
    	sBrdAddr.sin_addr.s_addr = sl_Htonl((unsigned int)g_ulDestinationIp);
    
    	iAddrSize = sizeof(SlSockAddrIn_t);
    
    	// creating a UDP socket
    	iSockID = sl_Socket(SL_AF_INET,SL_SOCK_DGRAM, 0);
    
        /* setting time out for socket recv */
        timeVal.tv_sec =  5;             // Seconds
        timeVal.tv_usec = 0;             // Microseconds. 10000 microseconds resolution
        sl_SetSockOpt(iSockID,SL_SOL_SOCKET,SL_SO_RCVTIMEO, (_u8 *)&timeVal, sizeof(timeVal));
    
        // binding the UDP socket to the UDP server address
        iStatus = sl_Bind(iSockID, (SlSockAddr_t *)&sLocalAddr, iAddrSize);
        if( iStatus < 0 )
        {
            // error
            sl_Close(iSockID);
            ASSERT_ON_ERROR(iStatus);
        }
    #endif
    	//
    	// setting Apps power policy
    	//POWER_POLICY_HIBERNATE
        //POWER_POLICY_STANDBY
    	lp3p0_setup_power_policy(POWER_POLICY_STANDBY);
    	do{
    		UART_PRINT("enter one of the following command:\n\r");
    		UART_PRINT("sleep - for putting the system into LPDS mode\n\r");
    		UART_PRINT("        GPIO 13 and timer(5 sec) are the wk source configured\n\r");
    		UART_PRINT("recv  - for receiving 1000 UDP packets\n\r");
    		UART_PRINT("send  - for broadcasting 1000 UDP packets\n\r");
    		set_rtc_as_wk_src(WK_LPDS, LPDS_DUR_SEC, false);
    		set_gpio_as_wk_src(WK_LPDS, GPIO_SRC_WKUP, PRCM_LPDS_FALL_EDGE);
    		lp3p0_back_up_soc_data();
    		Utils_SpiFlashDeepPowerDown();
    		cc_idle_task_pm();
    	} while(FOREVER);
    	
        /*do{
            
    		UART_PRINT("cmd#");
    		//
    		// get cmd over UART
    		//
    		GetCmd(cCmdBuff, 20);
    
    		//
    		// parse the command
    		//
    		ParseCmd(cCmdBuff, &cCmd);
    
    		if(cCmd == APP_SLEEP)
    		{
    			//
    			// set timer and gpio as wake src
    			//
    			set_rtc_as_wk_src(WK_LPDS, LPDS_DUR_SEC, false);
    			set_gpio_as_wk_src(WK_LPDS, GPIO_SRC_WKUP, PRCM_LPDS_FALL_EDGE);
    			cc_idle_task_pm();
    		}
    		else if(cCmd == APP_RECV)
    		{
    			lLoopCount = 0;
    		    /// waits for 1000 packets from a UDP client
    		    while (lLoopCount < g_ulPacketCount)
    		    {
    		        iStatus = sl_RecvFrom(iSockID, g_cBsdBuf, sTestBufLen, 0,
    		                     ( SlSockAddr_t *)&sAddr, (SlSocklen_t*)&iAddrSize );
    
    				if( iStatus < 0 )
    				{
    					//error
    					break;
    				}
    				lLoopCount++;
    		    }
    		    UART_PRINT("Recieved %u packets successfully \n\r",lLoopCount);
    		    if(lLoopCount != g_ulPacketCount)
    		    {
                    if(iStatus == SL_EAGAIN)
                    {
                        UART_PRINT("timed out\n\r");
                    }
                    else
                    {
                        UART_PRINT("recv error: %d\n\r", iStatus);
                    }
    		    }
    		}
    		else if(cCmd == APP_SEND)
    		{
    			lLoopCount = 0;
    		    // sending 1000 packets to the UDP server
    		    while (lLoopCount < g_ulPacketCount)
    		    {
    		        // sending packet
    		        iStatus = sl_SendTo(iSockID, g_cBsdBuf, sTestBufLen, 0,
    		                                (SlSockAddr_t *)&sBrdAddr, iAddrSize);
    		        if( iStatus <= 0 )
    		        {
    		            // error
    		            UART_PRINT("send error\n\r");
                        break;
    		        }
    		        lLoopCount++;
    		    }
    		    UART_PRINT("Sent %u packets successfully\n\r",lLoopCount);
    		}
    	}while(FOREVER);*/
    }
    

  • Junaith, PFA the modified 'main.c' of 'idle_profile_nonos' application of the SDK - Use the same for your measurements and share the results.

    -/Praneet
  • Junaith, PFA the modified 'main.c' of 'idle_profile_nonos' application of the SDK - Use the same for your measurements and share the results

    -/Praneet

    //*****************************************************************************
    //
    // Copyright (C) 2014 Texas Instruments Incorporated - http://www.ti.com/
    //
    //
    //  Redistribution and use in source and binary forms, with or without
    //  modification, are permitted provided that the following conditions
    //  are met:
    //
    //    Redistributions of source code must retain the above copyright
    //    notice, this list of conditions and the following disclaimer.
    //
    //    Redistributions in binary form must reproduce the above copyright
    //    notice, this list of conditions and the following disclaimer in the
    //    documentation and/or other materials provided with the
    //    distribution.
    //
    //    Neither the name of Texas Instruments Incorporated nor the names of
    //    its contributors may be used to endorse or promote products derived
    //    from this software without specific prior written permission.
    //
    //  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
    //  "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
    //  LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
    //  A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
    //  OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
    //  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
    //  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
    //  DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
    //  THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
    //  (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
    //  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    //
    //*****************************************************************************
    
    //*****************************************************************************
    //
    // Application Name     - Idle Profile Non Os
    // Application Overview - Idle profile enables the user to measure current
    //                        values, power consumption and other such parameters
    //                        for CC3200, when the device is essentially idle(both
    //                        NWP and APPS subsystems in low power deep sleep
    //                        condition). The other main objective behind this
    //                        application is to introduce the user to the easily
    //                        configurable power management framework. This
    //                        example is for non os environment.
    // Application Details  -
    // http://processors.wiki.ti.com/index.php/CC32xx_Idle_Profile_NonOS_Application
    // or
    // docs\examples\CC32xx_Idle_Profile_NonOS_Application.pdf
    //
    //*****************************************************************************
    
    //****************************************************************************
    //
    //! \addtogroup idle_profile_nonos
    //! @{
    //
    //****************************************************************************
    
    // Standard includes
    #include <stdio.h>
    #include <string.h>
    #include <stdbool.h>
    
    //driverlib includes
    #include "hw_ints.h"
    #include "hw_types.h"
    #include "hw_memmap.h"
    #include "interrupt.h"
    #include "prcm.h"
    #include "utils.h"
    #include "rom.h"
    #include "rom_map.h"
    
    // Simplelink includes
    #include "simplelink.h"
    
    //middleware includes
    #include "cc_types.h"
    #include "cc_pm.h"
    #include "cc_pm_ops.h"
    
    // Common interface includes
    #include "uart_if.h"
    #include "udma_if.h"
    
    #include "pinmux.h"
    #include "common.h"
    
    #define APPLICATION_VERSION "1.1.1"
    
    //
    // Values for below macros shall be modified as per access-point(AP) properties
    // SimpleLink device will connect to following AP when application is executed
    //
    #define GPIO_SRC_WKUP           PRCM_LPDS_GPIO13
    #define LPDS_DUR_SEC            5
    #define FOREVER                 1
    #define BUFF_SIZE               1472
    
    #define WK_LPDS                 0   /*Wake from LPDS */
    #define WK_HIB                  1   /*Wake from Hibernate */
    
    /* commands */
    #define APP_SLEEP               0x8
    #define APP_SEND                0x10
    #define APP_RECV                0x20
    #define APP_ERROR               0x40
    
    /* udp transmission related parameters */
    #define IP_ADDR                 0xFFFFFFFF /* broadcast */
    #define PORT_NUM                5001
    #define BUF_SIZE                1400
    #define UDP_PACKET_COUNT        1000
    
    enum ap_events{
        EVENT_CONNECTION = 0x1,
        EVENT_DISCONNECTION = 0x2,
        EVENT_IP_ACQUIRED = 0x4,
        WDOG_EXPIRED = 0x8,
        CONNECTION_FAILED = 0x10
    };
    
    //****************************************************************************
    //                      LOCAL FUNCTION PROTOTYPES
    //****************************************************************************
    void sl_WlanEvtHdlr(SlWlanEvent_t *pSlWlanEvent);
    void sl_NetAppEvtHdlr(SlNetAppEvent_t *pNetAppEvent);
    static void DisplayBanner();
    static long WlanConnect();
    void WlanDisconnect();
    static void BoardInit();
    void SwitchToStaMode(int iMode);
    
    //*****************************************************************************
    //                 GLOBAL VARIABLES -- Start
    //*****************************************************************************
    #ifndef USE_TIRTOS
    #if defined(ccs) || defined(gcc)
    extern void (* const g_pfnVectors[])(void);
    #endif
    #if defined(ewarm)
    extern uVectorEntry __vector_table;
    #endif
    #endif
    
    unsigned long g_ulIpAddr = 0;
    unsigned long g_ulStatus = 0;
    char g_cErrBuff[100];
    unsigned long  g_ulDestinationIp = IP_ADDR;        // Client IP address
    unsigned int   g_uiPortNum = PORT_NUM;
    unsigned long  g_ulPacketCount = UDP_PACKET_COUNT;
    char g_cBsdBuf[BUF_SIZE];
    
    //*****************************************************************************
    //                 GLOBAL VARIABLES -- End
    //*****************************************************************************
    
    //*****************************************************************************
    //                      Local Function Prototypes
    //*****************************************************************************
    extern void lp3p0_setup_power_policy(int power_policy);
    extern int platform_init();
    extern int set_rtc_as_wk_src(int pwr_mode, unsigned long time_interval,
                                 bool is_periodic);
    extern int set_gpio_as_wk_src(int pwr_mode, unsigned long wk_pin,
                                  unsigned long trigger_type);
    extern void set_host_irq_as_lpds_wk_src();
    
    //*****************************************************************************
    //
    //! DisplayBanner
    //!
    //! \param  none
    //!
    //! \return none
    //!
    //*****************************************************************************
    static void
    DisplayBanner()
    {
        UART_PRINT("\n\n\n\r");
        UART_PRINT("\t\t   *********************************************\n\r");
        UART_PRINT("\t\t     CC3200 Idle Profile Non Os Application   \n\r");
        UART_PRINT("\t\t   *********************************************\n\r");
        UART_PRINT("\n\n\n\r");
    
    }
    
    //*****************************************************************************
    //
    //! Application defined idle task hook
    //!
    //! \param  none
    //!
    //! \return none
    //!
    //*****************************************************************************
    void SimpleLinkSyncWaitLoopCallback()
    {
        //
        // setting host IRQ as a wake up src
        //
        set_host_irq_as_lpds_wk_src(true);
    
        //
        // executing idle task
        //
        cc_idle_task_pm();
    
        //
        // removing host IRQ as a wake ip src
        //
        set_host_irq_as_lpds_wk_src(false);
    }
    
    //****************************************************************************
    //
    //! \brief This function handles WLAN events
    //!
    //! \param[in]  pSlWlanEvent is the event passed to the handler
    //!
    //! \return    None
    //
    //****************************************************************************
    void sl_WlanEvtHdlr(SlWlanEvent_t *pSlWlanEvent)
    {
        switch(pSlWlanEvent->Event)
        {
        case SL_WLAN_CONNECT_EVENT:
            UART_PRINT("C\n\r");
            break;
        case SL_WLAN_DISCONNECT_EVENT:
            UART_PRINT("D\n\r");
            break;
        default:
            break;
        }
    }
    
    //****************************************************************************
    //
    //! \brief This function handles events for IP address acquisition via DHCP
    //!           indication
    //!
    //! \param[in]    pNetAppEvent is the event passed to the handler
    //!
    //! \return     None
    //
    //****************************************************************************
    void sl_NetAppEvtHdlr(SlNetAppEvent_t *pNetAppEvent)
    {
        switch(pNetAppEvent->Event)
        {
        case SL_NETAPP_IPV4_IPACQUIRED_EVENT:
        case SL_NETAPP_IPV6_IPACQUIRED_EVENT:
            g_ulIpAddr = pNetAppEvent->EventData.ipAcquiredV4.ip;
            g_ulStatus = 1;
            UART_PRINT("IP: %d.%d.%d.%d \n\r",(g_ulIpAddr&0xFF000000)>>24,
                                  (g_ulIpAddr&0x00FF0000)>>16,
                                  (g_ulIpAddr&0x0000FF00)>>8,
                                  (g_ulIpAddr&0x000000FF));
            break;
        default:
            break;
        }
    }
    
    //*****************************************************************************
    //
    //! This function gets triggered when HTTP Server receives Application
    //! defined GET and POST HTTP Tokens.
    //!
    //! \param pSlHttpServerEvent Pointer indicating http server event
    //! \param pSlHttpServerResponse Pointer indicating http server response
    //!
    //! \return None
    //!
    //*****************************************************************************
    void sl_HttpServerCallback(SlHttpServerEvent_t *pSlHttpServerEvent,
                               SlHttpServerResponse_t *pSlHttpServerResponse)
    {
    }
    
    //*****************************************************************************
    //
    //! This function handles socket events indication
    //!
    //! \param[in]      pSock - Pointer to Socket Event Info
    //!
    //! \return None
    //!
    //*****************************************************************************
    void SimpleLinkSockEventHandler(SlSockEvent_t *pSock)
    {
        //
        // This application doesn't work w/ socket - Events are not expected
        //
    
    }
    
    //****************************************************************************
    //
    //!  \brief Connecting to a WLAN Accesspoint
    //!
    //!   This function connects to the required AP (SSID_NAME) with Security
    //!   parameters specified in te form of macros at the top of this file
    //!
    //!   \param[in]              None
    //!
    //!   \return       status value
    //!
    //!   \warning    If the WLAN connection fails or we don't aquire an IP
    //!            address, It will be stuck in this function forever.
    //
    //****************************************************************************
    static long WlanConnect()
    {
        SlSecParams_t secParams = {0};
        long lRetVal = 0;
    
        secParams.Key = (signed char*)SECURITY_KEY;
        secParams.KeyLen = strlen(SECURITY_KEY);
        secParams.Type = SECURITY_TYPE;
    
        lRetVal = sl_WlanConnect((signed char*)SSID_NAME, strlen(SSID_NAME), 0, \
                                        &secParams, 0);
        ASSERT_ON_ERROR(lRetVal);
    
        while(g_ulStatus != 1)
        {
            // Wait for WLAN Event
            _SlNonOsMainLoopTask();
        }
    
        return SUCCESS;
    }
    
    //*****************************************************************************
    //
    //! Board Initialization & Configuration
    //!
    //! \param  None
    //!
    //! \return None
    //
    //*****************************************************************************
    static void
    BoardInit(void)
    {
    /* In case of TI-RTOS vector table is initialize by OS itself */
    #ifndef USE_TIRTOS
      //
      // Set vector table base
      //
    #if defined(ccs) || defined(gcc)
        IntVTableBaseSet((unsigned long)&g_pfnVectors[0]);
    #endif
    #if defined(ewarm)
        IntVTableBaseSet((unsigned long)&__vector_table);
    #endif
    #endif
      //
      // Enable Processor
      //
      MAP_IntMasterEnable();
      MAP_IntEnable(FAULT_SYSTICK);
    
      PRCMCC3200MCUInit();
    }
    
    //*****************************************************************************
    //
    //! Check the device mode and switch to STATION(STA) mode
    //! restart the NWP to activate STATION mode
    //!
    //! \param  iMode (device mode)
    //!
    //! \return None
    //
    //*****************************************************************************
    void SwitchToStaMode(int iMode)
    {
        if(iMode != ROLE_STA)
        {
            sl_WlanSetMode(ROLE_STA);
            MAP_UtilsDelay(80000);
            sl_Stop(10);
            MAP_UtilsDelay(80000);
            sl_Start(NULL,NULL,NULL);
        }
    
    }
    
    //*****************************************************************************
    //
    //! Parse the input string command
    //!
    //! \param  buff is the input buffer cmd to be parsed
    //! \param  cmd is the pointer to the cmd code for the input command
    //!
    //!\return  None
    //
    //*****************************************************************************
    void ParseCmd(char* buff, signed char*cmd)
    {
        if(strcmp(buff, "sleep") == 0){
            *cmd = APP_SLEEP;
        }else if(strcmp(buff, "send") == 0){
            *cmd = APP_SEND;
        }else if(strcmp(buff, "recv") == 0){
            *cmd = APP_RECV;
        }else{
            *cmd = APP_ERROR;
        }
    }
    
    //****************************************************************************
    //                            MAIN FUNCTION
    //****************************************************************************
    int main(void)
    {
        long lRetVal;
        char cCmdBuff[20];
        signed char cCmd = APP_SLEEP;
    
        SlSockAddrIn_t  sAddr;
        SlSockAddrIn_t  sLocalAddr;
        SlSockAddrIn_t  sBrdAddr;
        int             iCounter;
        int             iAddrSize;
        int             iSockID;
        int             iStatus;
        long            lLoopCount = 0;
        short           sTestBufLen;
        struct SlTimeval_t timeVal;
    
        //
        // Board Initialization
        //
        BoardInit();
    
        //
        // uDMA Initialization
        //
        UDMAInit();
    
        //
        // Configure the pinmux settings for the peripherals exercised
        // Note: pinmux has been modified after the output from pin mux tools
        // to enable sleep clk for the peripherals exercised
        //
        PinMuxConfig();
    
        //
        // Initialize the platform
        //
        platform_init();
    
        //
        // Initialise the UART terminal
        //
        InitTerm();
    
        //
        // Display banner
        //
        DisplayBanner();
    
        //
        // starting the simplelink
        //
        lRetVal = sl_Start(NULL, NULL, NULL);
        if (lRetVal < 0)
        {
            UART_PRINT("Failed to start the device \n\r");
            LOOP_FOREVER();
        }
    
        //
        // Swtich to STA mode if device is not
        //
        SwitchToStaMode(lRetVal);
    
        //
        // set connection policy
        //
        sl_WlanPolicySet(SL_POLICY_CONNECTION,
                                    SL_CONNECTION_POLICY(0, 0, 0, 0, 0), NULL, 0);
        //
        // Set the power management policy of NWP
        //
        lRetVal = sl_WlanPolicySet(SL_POLICY_PM, SL_NORMAL_POLICY, NULL, 0);
    
        UART_PRINT("Trying to Connect to AP: %s ...\r\n",SSID_NAME);
    
    #if 0
        //
        //Connecting to WLAN AP
        //
        lRetVal = WlanConnect();
        if(lRetVal < 0)
        {
            UART_PRINT("Failed to establish connection w/ an AP \n\r");
            LOOP_FOREVER();
        }
    
        // filling the buffer
        for (iCounter=0 ; iCounter<BUF_SIZE ; iCounter++)
        {
            g_cBsdBuf[iCounter] = (char)(iCounter % 10);
        }
    
        sTestBufLen  = BUF_SIZE;
        //filling the UDP server socket address
        sLocalAddr.sin_family = SL_AF_INET;
        sLocalAddr.sin_port = sl_Htons((unsigned short)PORT_NUM);
        sLocalAddr.sin_addr.s_addr = 0;
    
        //filling the UDP server socket address
        sBrdAddr.sin_family = SL_AF_INET;
        sBrdAddr.sin_port = sl_Htons((unsigned short)PORT_NUM);
        sBrdAddr.sin_addr.s_addr = sl_Htonl((unsigned int)g_ulDestinationIp);
    
        iAddrSize = sizeof(SlSockAddrIn_t);
    
        // creating a UDP socket
        iSockID = sl_Socket(SL_AF_INET,SL_SOCK_DGRAM, 0);
    
        /* setting time out for socket recv */
        timeVal.tv_sec =  5;             // Seconds
        timeVal.tv_usec = 0;             // Microseconds. 10000 microseconds resolution
        sl_SetSockOpt(iSockID,SL_SOL_SOCKET,SL_SO_RCVTIMEO, (_u8 *)&timeVal, sizeof(timeVal));
    
        // binding the UDP socket to the UDP server address
        iStatus = sl_Bind(iSockID, (SlSockAddr_t *)&sLocalAddr, iAddrSize);
        if( iStatus < 0 )
        {
            // error
            sl_Close(iSockID);
            ASSERT_ON_ERROR(iStatus);
        }
    #endif //APK
    
        //
        // setting Apps power policy
        //
        lp3p0_setup_power_policy(POWER_POLICY_STANDBY);
    
        UART_PRINT("enter one of the following command:\n\r");
        UART_PRINT("sleep - for putting the system into LPDS mode\n\r");
        //UART_PRINT("        GPIO 13 and timer(5 sec) are the wk source configured\n\r");
        UART_PRINT("        GPIO 13/SW3 is the wk source configured\n\r");
        //UART_PRINT("recv  - for receiving 1000 UDP packets\n\r");
        //UART_PRINT("send  - for broadcasting 1000 UDP packets\n\r");
    
        do{
    
            UART_PRINT("cmd#");
            //
            // get cmd over UART
            //
            GetCmd(cCmdBuff, 20);
    
            //
            // parse the command
            //
            ParseCmd(cCmdBuff, &cCmd);
    
            if(cCmd == APP_SLEEP)
            {
                //
                // set timer and gpio as wake src
                //
                //set_rtc_as_wk_src(WK_LPDS, LPDS_DUR_SEC, false);
                set_gpio_as_wk_src(WK_LPDS, GPIO_SRC_WKUP, PRCM_LPDS_FALL_EDGE);
                cc_idle_task_pm();
            }
    #if 0
            else if(cCmd == APP_RECV)
            {
                lLoopCount = 0;
                /// waits for 1000 packets from a UDP client
                while (lLoopCount < g_ulPacketCount)
                {
                    iStatus = sl_RecvFrom(iSockID, g_cBsdBuf, sTestBufLen, 0,
                                 ( SlSockAddr_t *)&sAddr, (SlSocklen_t*)&iAddrSize );
    
                    if( iStatus < 0 )
                    {
                        //error
                        break;
                    }
                    lLoopCount++;
                }
                UART_PRINT("Recieved %u packets successfully \n\r",lLoopCount);
                if(lLoopCount != g_ulPacketCount)
                {
                    if(iStatus == SL_EAGAIN)
                    {
                        UART_PRINT("timed out\n\r");
                    }
                    else
                    {
                        UART_PRINT("recv error: %d\n\r", iStatus);
                    }
                }
            }
            else if(cCmd == APP_SEND)
            {
                lLoopCount = 0;
                // sending 1000 packets to the UDP server
                while (lLoopCount < g_ulPacketCount)
                {
                    // sending packet
                    iStatus = sl_SendTo(iSockID, g_cBsdBuf, sTestBufLen, 0,
                                            (SlSockAddr_t *)&sBrdAddr, iAddrSize);
                    if( iStatus <= 0 )
                    {
                        // error
                        UART_PRINT("send error\n\r");
                        break;
                    }
                    lLoopCount++;
                }
                UART_PRINT("Sent %u packets successfully\n\r",lLoopCount);
            }
    #endif //APK
        }while(FOREVER);
    }
    

  • Praneet,I saw your link,and programmed the device without connecting to AP,and then sleeping the device in LPDS mode,still i am in 4mA
  • Please measure the current w/ the application that I shared in my last post, and share the numbers.

    FYI - On CC3200-LAUNCHXL_Rev4.1, I'm seeing below numbers w/ my sample application.

    -/Praneet

  • Thank you praneet. I have used your code and pulled down my board amps consumption to 0.28mA by using the code in CCS.

    I wanna do that in energia,can you figure a way for this?

    Thx in advance.

  • I've not worked w/ Energia and cannot comment. We will move this thread to appropriate forum.

    -/Praneet
  • Hi Janarthanan,

    Are you using Energia?

    Robert

  • HI Robert,

    Yes I am using energia.

  • Hi Praneet,
    Yes I am using Energia for my prototypes for now. As I am planning to deploy and collect some data from my sensors it will be helpful for me to lower the power consumption as much as possible in the sleep mode. I am using the calls in driverlib/prcm.c for LPDS mode, but the current is very high (4mA) even after the chip going in to LPDS mode.



    I noticed that you guys have ported some of the power manager code in the hardware/common folder in Energia 15. However, I don’t think its fully functional, I get linker error. I am not sure what im missing. Could you please help with the right example.
  • Parneet, thanks for the pointer, i was able to reduce the power consumption to 0.27mA
  • Hi Robert, i had the same question as Janarthanan on Energia 15, do you guys have the power management implemented in Energia. I just started playing around recently, looks like a great way to prototype and validate concepts.

    Please let us know about the PM details.

    Junaith
  • Energia does not have power management implemented at the moment. You could however use simpelink API's in Energia to put the cc3200 into low power. Simply include the header file. Parneet can probably give pointers for what API's to use.
  • Parneet could you advice on the modules that need to be ported for Power Management Framework. I am trying to get PM working in Energia.

  • Janarthanan, I am working on putting the low power modes into Energia. It seems that you already have something working. Could you please share your code? This will help me a lot with speeding things up.

    Thanks!

    Robert From Energia