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.

CCS/CC2652R: CC2652R Low Power Mode in Thread (SED)

Part Number: CC2652R
Other Parts Discussed in Thread: SYSCONFIG, ENERGYTRACE

Tool/software: Code Composer Studio

Hi

I am trying to make a OpenThread sensor with cc2652.

I have really hard time to make it go into low power mode.

The lowest current consumption I can achieve is around 60-65 uAh which is way too much.

I am trying to implement SED, I configured link as following:

otLinkModeConfig aConfig;
aConfig.mRxOnWhenIdle = false;
aConfig.mDeviceType = false;
aConfig.mNetworkData = true;
aConfig.mSecureDataRequests = true;

I do poll every 20 seconds.

I can see that MCU sleeps most of the time, but the current consumption does not go any lower. ( this is used with TI's Launchpad ).

Any ideas what can go wrong and how do I trace the place what consumes the power?

Is there any example in SDK or somwhere which can show how to use CC2652 as SED where we can see the low currents in reality not only in datasheet?

PS: on my self-made PCB the consumption is even higher - 1,3mAh, while there is no periphery soldered yet with the same hex programmed. This is really strange for me.

  • With TI LaunchPad, you can try to add CC26X2R1_LAUNCHXL_shutDownExtFlash to shutdown external flash to see if you can reduce power consumption further. For you own custom board, I suppose there is IO current leakage so I suggest you to check if you configure all of you IO well first.

  • Hi YiKai

    Yes, I was thinking of shutting the flash down. After I added CC26X2R1_LAUNCHXL_shutDownExtFlash I am now down to 13-15 uAh. Is that the minimum I can expect or do you think I can go down to let's say 1 uAh?

    Regarding my custom board, there is nothing connected to the chip, the pins are floating at the moment, so I doubt that can be a IO issue, can it? Anyway, would you suggest configure all pins (even unused) to input/pull down?

    Regards

  • When you see 13-15 uA, what's the input voltage and do you disable UART on your SED?  For you custom board, make sure you set all IO pin to unused status if the pins are floating and unused.

  • I use 3.3V, I completely disable UART and all others. I have actually removed all my GPIOs in SysConfig - the same consumption. In principle all periphery is disabled in SysConfig.

    The strange thing is that sometimes I can also see 1.3mA on Launchpad and after few resets or re-upload of the application current goes to 12-15 uA, but never on my custom board.

    PS: When I measure current I every time disconnect debugger and do a chip reset/power cycle.

  • There might be some micro current leakage on LaunchPad so I would say 12-15 uA might be feasible to see on LaunchPad. For your custom board, I guess there must be something wrong in your IO settings.

  • I've just achieved 0.3-2uA on lauchpad, I disabled everything in syscfg.

    But on the custom board with the same hex I can see minimum 1277 uA. That means that the chip consumes 1.275 mA more.

    This cannot be not due to a defect PCB, because when I put chip into reset I get 33uA as on lauchpad. So it must be something chip "generates"...

    I will try to dig into that.

  • Do you run the same SED application on both LaunchPad and your custom board to get different power consumption value?

  • Exactly, the same HEX file on both Lauchpad and my custom board.

    Additionally, I can see that if I add ADC in SysConfig the consumption will go up to 10-15 uA. I do ADC_open and ADC_close. If I only do ADC_init then the consuption will be around 50uA. Is there any way to "deinit" ADC afte close, so I can go to ~1uA?

  • You can try to set ADC pin to unused after close to see if it can go to ~1uA. Cannot help much on your custom board but I strongly suspect that it must be related to your IO pins.

  • That worked, when I set the ADC pin to unused after measurement I am back to ~ 1uA.

    I have also noticed that open drain outputs consume a lot of power, ~around 100uA, is that true? Do I need to make some changes to avoid this high cosumption?

  • I couldn’t understand your question about “open drain outputs consume a lot of power, ~around 100uA, is that true?”. Can you elaborate?

  • What I mean is that if I change some of my DO from Standard to Open Drain (and set value to high) then consumption increases by 100uA. When I change back to standard digital output - the consumption goes back to 1 uA.

  • Hi,

    When configured as Open Drain, do you see the same current consumption across the pull mode?
    - no pull (default in syscfg)
    - pull up
    - pull down

    Regards,
    Toby

  • It seems that when I use pull up, there is no increased consumption (now I have burned my launchpad, so cannot test more).

    I am now concerned about the consumption of my custom PCB. Where I have approximately 1.3mA consumption (peak is where I do send some thread packages).

    When I disable everything, run only in main (with all periphery removed in sysconfig):

    Board_initGeneral();

    BIOS_start();

    Then I have consumption around 650uA. Isn't it too high? Can it be a sensor controller or debug interface that use the power? WHen I apply LOW to Reset pin I get around 40uA (strange, why not 33uA like in lauchpad?) with 100k pullup resistor on reset.

    I saw also that sometimes after I flashed a fresh code into lauchpad I had consumptions very similar to those in my custom PCB (1.3mA). Then I had to do a couple of resets and power down/up to bring the consumption to 1uA. This is important to note in this case.

    So to my mind this is kind of initialization issue that I am missing and due to random levels on some pins I get different results.

  • Maybe you have an idea to what causes this issue with my custom board (see my prev. post).

  • Are you using Sensor Controller in your project? By default the Thread examples are not using Sensor Controller, so it should not be contributing to the overall current consumption.

    When measuring current with Energy Trace, you don't need the debugger connected. For example, when using a launchpad, all you need is GND, 3V3, and XDS110 power jumpers attached; all other jumpers removed.

    Which SDK are you using?

    Which Thread example are you using?

    Can you zip and attach the .syscfg file of that project? Then I can try to reproduce it on a Launchpad.

  • No, I do not use sensor controller at all - just thought it might be a thing that I didn't disable.

    I use SDK 3.40 and Temp Sensor example as a starting point. The sysconfig is attached.

    I was also thinking about maybe GLDO is used instead of DCDC, but in project it is enabled and I can measure ~1.62-1.65V on VDDR pins.

    temp_sensor.zip

  • I got some build errors using that syscfg file.

    Note that you need to make sure the supply is at least 1.8 V.

    Using the temp_sensor example from the 3.40 SDK, I was able to measure 0.7 uA average current on a CC26x2 launchpad.
    All jumpers are removed, except GND, 3V3, and XDS110 Power.

    Try using a default temp_sensor example, and disable the UART display: Project --> Properties --> Build --> ARM Compiler --> Predefined Symbols --> BOARD_DISPLAY_USE_UART=0

  • You have some errors probably because of UART1 DMA IDs, which are not present in SDK 3.40, TI promised to come up with the fix in the next release.

    ANYWAY, I can now achieve the low current consumption. When I tried the example temp_sensor project the consumption was low (as you also pointed out).

    Afterwards I flashed my self-made binary and the consumption remained low. As soon as I do full flash erase and upload my binary, the consumption will be high. When I flash example temp_sensor project and then my own binary the consumption will be low again.

    SO, there is something in example project that makes some settings which allow to low power consumption.... Would be nice to know which settings are affected.

    PS: EnergyTrace measurement show average of 0.6mA, while my Fluke multimeter shows average 1-3uA... Is that normal? How did you see your 0.7uA?

  • Thanks for confirming.

    Can you also try this sequence:

    1. Flash erase
    2. Flash your binary
    3. Flash temp_sensor
    4. Measure current

    Since you started from the temp_sensor example, I'd recommend performing a diff on the two projects to see any differences.

    EnergyTrace was designed to be able to measure the low currents typical of our devices. Not sure how low a current that that Fluke multimeter is designed to measure.

  • It seems that there were some issue with the OpenThread code - I created a separate thread for that on this forum.

    Regarding energy trace, well, when I connect an EnergyTrace to USB and to MCU AND do a reset of the chip (with a jumper) then it starts measuring correctly. Otherwise (if I do not make a reset) it will be around 500 uA even though the real consumption is 1uA....

    Fluke 189 is designed to measure in uAmps.

    Anyway, I've achieved a uA level consumption with a certain settings of the OpenThread, now I need to find out the answer to PollPeriod issue.

    One more thing: I've noticed is that every second some event is generated. Probably by OpenThread, which boosts consumption to around 250-500 uA and then back to 1uA.... Any idea what can it be?