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.

CC2652R7: How to get into the lowest power mode?

Part Number: CC2652R7

Tool/software:

Hey,

So my team members and I have been trying to determine the lowest power consumption of the TI-CC2652R7. We started off with the project_zero example and instead of launching the project_zero thread, we launched a test thread and stopped at the semaphore. When we do our power measurements, we get an average of 9 uA. However, according to the data sheet, we should be getting 0.9 uA in Standby. I understand that there might be something wrong with our circuitry, but if you can confirm that my approach to entering the standby state is correct, that would be greatly appreciated.

int main()
{
    // Register Application callback to trap asserts raised in the Stack
    RegisterAssertCback(AssertHandler);

    Board_initGeneral();

#if !defined(POWER_SAVING)
    // Set constraints for Standby, powerdown and idle mode
    // PowerCC26XX_SB_DISALLOW may be redundant
    Power_setConstraint(PowerCC26XX_SB_DISALLOW);
    Power_setConstraint(PowerCC26XX_IDLE_PD_DISALLOW);
#endif // POWER_SAVING

    // Update User Configuration of the stack
    user0Cfg.appServiceInfo->timerTickPeriod = Clock_tickPeriod;
    user0Cfg.appServiceInfo->timerMaxMillisecond = ICall_getMaxMSecs();

    // Initialize ICall module
    ICall_init();

#ifndef STACK_LIBRARY
    {
        // Find stack entry page
        uint32_t stackAddr = findStackBoundaryAddr();

        // If we cannot find the stack start address, exit
        if (stackAddr == 0xFFFFFFFF)
            ICall_abort();

        // Set the stack image header based on the stack addr
        stackImageHeader = (imgHdr_t*)stackAddr;

        // Start tasks of external images - Priority 5
        const ICall_RemoteTask_t remoteTaskTbl[] = { (ICall_RemoteTaskEntry)(stackImageHeader->prgEntry), 5, 1000, &user0Cfg };

        // Start tasks of external images - Priority 5
        ICall_createRemoteTasksAtRuntime((ICall_RemoteTask_t*)remoteTaskTbl, (sizeof(remoteTaskTbl) / sizeof(ICall_RemoteTask_t)));
    }
#else

    // Start tasks of external images - Priority 5
    ICall_createRemoteTasks();
#endif

    // Ensure low-frequency (real-time) clock initialized with external oscillator, otherwise downstream BLE and RTOS calls won't work
    if (OSCClockSourceGet(OSC_SRC_CLK_LF) != OSC_XOSC_LF)
    {
        OSCClockSourceSet(OSC_SRC_CLK_LF, OSC_XOSC_LF);
    }

#ifdef TEST_XOSC_LF
    IOCPortConfigureSet(IOID_26, IOC_PORT_AON_CLK32K, IOC_STD_OUTPUT); // Pass-through external 32.768kHz oscillator clock signal (XOSC LF) out to TP1
    AONIOC32kHzOutputEnable();
#endif

    test(); 

    // Enable interrupts and start SYS/BIOS
    BIOS_start();

    return 0;
}

static array<uint8_t, 3092> test_stack;

void test()
{
    // Wrapper for creating a thread
    Thread(TestThread, nullptr, make_shared<Thread::Settings>(test_stack.data(), test_stack.size()));
}

void* TestThread(void* arguments)
{
    // Wrapper for creating a semaphore
    Semaphore sem;
    sem.wait();

    return nullptr;
}


Best Regards,
Kenneth T.