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.

CC2640R2F: CC2640R2FRSMR low power still have much current

Part Number: CC2640R2F
Other Parts Discussed in Thread: SYSCONFIG, , ENERGYTRACE, CC2640, CC2652R, CC2642R, LAUNCHXL-CC26X2R1, LAUNCHXL-CC2640R2, TMDSEMU110-U

refer to https://e2e.ti.com/support/wireless-connectivity/bluetooth-group/bluetooth/f/bluetooth-forum/996426/cc2640r2f-cc2640r2frsmr-not-work-properly/3696346#3696346

I buy a new module from another vendor, now it can run and adv.

I put LOW_POWER in project config, it still have 0.7A.  it is only a module, wihtout any other things.

have tried make all pin init with INPUT and NO PULL, no help. 

if I comment out the adv part, then current goes down.

how can I make it run in LOW_POWER?

  • correction: not 0.7A, but 0.7mA.  

    but what is expected is some uA, not more than 10uA, right?

  • Hello dsp,

    Are you measuring the current on custom hardware, or on a launchpad? From your linked post, it looks like this is on custom hardware.

    In case you haven't seen this already, please refer to: 

    I put LOW_POWER in project config, it still have 0.7A.  it is only a module, wihtout any other things.

    I don't see this defined in the default simple_peripheral project. Can you clarify which SDK version you are using?

    but what is expected is some uA, not more than 10uA, right?

    Please see the datasheet here. The device will draw ~10 mA during an active TX. Can you verify the device is going to standby? The current in standby mode should be ~1 uA. You will have to disable all UART and other peripherals to see this.

    I have assigned your post to an expert to help further.

  • yes it is on a custom board, minimum system, and I mean average current, measured by multimeter, when board is in adv state, have not test it when connected.

    i am using sdk 4_40,  sorry it is my mistake in writing. in fact it is POWER_SAVING.

    i have not found where to config TX power, interval etc.

  • Both TX Power and the advertising interval can be configured in sysconfig.

  • ^Disregard the above - we don't use sysconfig for the CC2640R2F. You can alter the default tx power DEFAULT_TX_POWER in ble_user_config.c in the simple peripheral example.

    You can alter the interval by following this post:

    https://e2e.ti.com/support/wireless-connectivity/bluetooth-group/bluetooth/f/bluetooth-forum/684969/cc2640r2f-dynamically-adjusting-advertising-interval-at-run-time

  • change DEFAULT_TX_POWER from 7 to 0, current change from 0.7mA to 0.55mA.

    when try follow the post you said to change adv parameter, got:

    Error[Pe020]: identifier "GAPROLE_ADVERT_ENABLED" is undefined C:\ti\simplelink_cc2640r2_sdk_4_40_00_10\examples\rtos\CC2640R2_LAUNCHXL\ble5stack\simple_peripheral\src\app\simple_peripheral.c 653 Error[Pe020]: identifier "TGAP_LIM_DISC_ADV_INT_MIN" is undefined C:\ti\simplelink_cc2640r2_sdk_4_40_00_10\examples\rtos\CC2640R2_LAUNCHXL\ble5stack\simple_peripheral\src\app\simple_peripheral.c 654 Error[Pe020]: identifier "TGAP_LIM_DISC_ADV_INT_MAX" is undefined C:\ti\simplelink_cc2640r2_sdk_4_40_00_10\examples\rtos\CC2640R2_LAUNCHXL\ble5stack\simple_peripheral\src\app\simple_peripheral.c 655 Error[Pe020]: identifier "TGAP_GEN_DISC_ADV_INT_MIN" is undefined C:\ti\simplelink_cc2640r2_sdk_4_40_00_10\examples\rtos\CC2640R2_LAUNCHXL\ble5stack\simple_peripheral\src\app\simple_peripheral.c 656 Error[Pe020]: identifier "TGAP_GEN_DISC_ADV_INT_MAX" is undefined C:\ti\simplelink_cc2640r2_sdk_4_40_00_10\examples\rtos\CC2640R2_LAUNCHXL\ble5stack\simple_peripheral\src\app\simple_peripheral.c 657

  • Hi,

    Remove any codes that opens and uses the UART such as Display_open() and Display_printf().

    -kel

  • Oh I'm sorry that didn't work. It looks like you're using the BLE5 example. In that case, you'll want to alter the DEFAULT_DESIRED_MIN_CONN_INTERVAL and DEFAULT_DESIRED_MAX_CONN_INTERVAL in simple_peripheral.c.

    I would also echo what kel is saying. I think it's unlikely that changing the connection interval will be able to reduce your power from the 550's of uA to 1 uA. You may be unintentionally bringing your device out of standby to draw that much current. I would suggest measuring with more sophisticated equipment than a multimeter. Potentially the energytrace portion of the CC26X2 launchpad or a full power analyzer if you have access in order to better isolate the timing of the issue.

  • tried, no change.

    Remove any codes that opens and uses the UART such as Display_open() and Display_printf().
  • have changed DEFAULT_DESIRED_MIN_CONN_INTERVAL etc help little. 

    I understand measure equipment is important, but i have experience at earlier cc2640 ble4, we use same measure method and get about 60uA. so I think the equipment can let us have basic information.

    could you please do a same test? using multimeter? 

  • how can I turn on and off the adv to test and compare?  as there is no GAPROLE_ADVERT_ENABLED defined.

    i have tried to move this:

    GAP_DeviceInit(GAP_PROFILE_PERIPHERAL, selfEntity, addrMode, NULL);

    to the clock handle after 5s,  it show only 30uA in previous 5s after power on, and then goes up to 5mA.

  • Hi DSP,

    So I want to reiterate that this method with a multimeter is not a very precise way to measure power. I would highly highly consider using a power analyzer or the energytrace section on one of our newer launchpads (any CC26X2 device should have it). With a better measurement you will get more accurate, precise results. Using a multimeter here takes a detailed current consumption profile and reduces it down to a single, possibly misleading number.

    We have a guide on how to accurately measure device power consumption that you can find here. This will give you an accurate, precise and repeatable measurement procedure.

    https://www.ti.com/lit/an/swra478d/swra478d.pdf?ts=1624028763098&ref_url=https%253A%252F%252Fwww.google.com%252F

    If you do chose to go down this route though and continue measuring on a multimeter, you can see the absolute minimum current consumption by running the code in TI Drivers/empty. In that project, remove the GPIO_init() call, remove the LED call and just have it in sleep. You may also want to  change the time variable to like 120 so its explicitly in sleep for 2 minutes. When this test is run, ensure that the only jumpers on the launchpad are the GND and 3.3V.

    If you want to see the current consumption when the device is not advertising, comment out the GapAdv_enable function calls in simple_peripheral.c. You'll have to comment out everything that references it too, and comment out the SimplePeripheral_performPeriodicTask function that occurs every 5 seconds. You'll also need to comment out every reference to SP_PERIODIC_EVT. This may cause errors if any references are missed, but those should be easy to resolve by following the console errors.

  • Hi dsp999,

    Using multimeter what you can do is put the device in shutdown mode. If you are able to measure the shutdown current of 0.1 uA or very close to that then your board can achieve low power consumption. 

    https://www.youtube.com/watch?v=908dlHPbjMc

    -kel

  • ok, for GapAdv_enable, can I use GapAdv_disable instead? for example I plan to add GapAdv_disable in the 5s event.

    for SP_PERIODIC_EVT, I don't think it affect the measure as it is 5s event, right? if I get larger current every 5s it is easy understand.

    also, I have bought some power analyzer device, in shipping.

  • how to put the device in shutdown mode?

  • Hi dsp999,

    At simple peripheral periodic event handler I call this below. Refer to pinShutdown example program.

    /* Configure DIO for wake up from shutdown */
        PINCC26XX_setWakeup(ButtonTableWakeUp);
    
        /* Go to shutdown */
        Power_shutdown(0, 0);
    
        /* Should never get here, since shutdown will reset. */
        while (1);

    Looking at your CC2640R2F module board, most likely it will be able to achieve already low power consumption. if you have UART port open, that will add to base current consumption.

    At the youtube video I shared, I put the device in shutdown mode and was able to measure 0.1uA shutdown current which is according to datasheet. My cheap multimeter is able to measure this shutdown mode current because the current is steady. It is not able to measure standby mode current because it is not steady and my multimeter does not have enough resolution.

    However, if you have access to high end Fluke multimeter you will be able to measure the average standby mode current that is if you disable advertising. I have done this before and it works.

    Base from the document swra478d the recommended tool to use in measuring low power consumptions is a Keysight DC Power Analyzer, but that is very expensive.

    -kel

  • I put Power_shutdown(0, 0); in the 5s event, and have bought a device to measure current. see attached picture.

    from this picture, we know: at first, every 100ms there is a 6mA burst which means it is adv? and is it right POWER_SAVING?

    after 5s, it goes into shutdown, but still average 100uA.

    what to do next?

  • The 6mA burst seems to be advertising event. Using multimeter what shutdown current do you read? 100 uA shutdown current is very high for me. Do you have any external circuitry attached to your board? How do you power your board?

    -kel

  • I agree with kel's analysis above. If you have pictures of your schematic/layout then maybe we can isolate why you're seeing the high shutdown current.

  • 6mA is adv, but this value is reasonable or abnormal? 

    100uA is definitely abnormal.  this module is minimum system without any other external circuit.  it is powered by the measure device.

    I can take a photo later.

  • Hi,

    I did some captures using EnergyTrace plugged to a LAUNCHXL-CC2640R board and got a few interesting results.

    Running an unmodified simple_peripheral example from SDK 4.40.04.04 with everything disconnected - i.e., all jumpers isolating the device, the Vsense jumper positioned to the "up" position (so the buffers are isolated) and the LED jumpers isolating them. I also removed the JTAG debugger cable from the board. All this to minimize the leakage at all costs. 

    With this, I got a very small quiescent current (average of 40 μA) between the 100ms advertisement spikes.

    Overall capture

    Zoom into the standby zone

    Using the Pin Shutdown, the current consumption gets down to the noise level.

    A zoom down to the lowest level.

    With this as a baseline on a common hardware, I echo the others' recommendations and be sure to remove all sources of leakage possible if you want to evaluate the lowest level to be reached by your application.

    The launchpad schematics (available here) can help provide some guidance on what circuitry was removed with the jumpers I changed.

    Hope this helps,

    Rafael

  • thanks for the detail test.  some questions:

    1, sdk 4.40, simple_peripheral sample ,do you have POWER_SAVING definition in the project?

    2, the Y axis is current in nA?  not uA?  I think we can ignore current smaller than 1uA.

    so your test is confirming us that at standby or shutdown, the current is under 1uA, right?

    so it should be under 1uA between each adv peak?

    3, still need confirm what current is reasonable when in adv (peak current) every 100ms etc.

  • 1. will need to comment.

    2. The Y-axis is in nA, but you can see the numbers have it well in the uA range because it's up to the 1000's of nA. The testing Rafael conducted confirms that at standby the current is under 1 uA. I should definitely be under 1 uA between the peaks.

    3. We can see the advertising events (the higher spikes in Rafael's first plot) show about 8400 nA (8.4 uA) drawn. The other 5-6 uA events are the VDDR recharge. You can learn more about this in the current measurement documentation.

  • Hi dsp999,

    I suspect that 100uA shutdown current you are reading is caused by your XDS110 connection.

    Looking at your board, most likely you would be able to achieve shutdown current according to datasheet 0.1uA. If you watch my shared youtube video again, I am powering using 2xAA battery, P3 and P4 jumpers are removed, then I measure shutdown current using multimeter.

    -kel

  • Kel makes an excellent point above. You'll need to make sure your XDS is disconnected to minimize your measured current consumption.

  • sorry my picture mislead you, there is no xds110 connected, although cable there.  when measured, it is powered by the measuring device.

    so now simply saying there is two major problem:

    1, my current when shutdown is 100uA, it should be under 1uA

    2, current is 6mA when adv peak, should be 8uA

    from where to check/improve?

  • Hi dsp999,

    Can you measure the shutdown current using multimeter.

    -kel

  • Hi dsp999,

    I would recommend trying to replicate the setup that described above. Perhaps you can replicate his results with the launchpad first to ensure that the problem is not with the setup, then see what happens when you connect your board to 3V3 and GND instead of the connecting the launchpad IC. Include pictures too if in doubt so we can help debug and flag anything suspicious.

    Best,

    Nate

  • I have such a CC2652R launchpad, is it ok for such test? or should I purchase a CC2640R2 launchpad?

  • That's fine too. Just be sure you're comparing with the appropriate datasheet numbers.

  • Hi,

    1, sdk 4.40, simple_peripheral sample ,do you have POWER_SAVING definition in the project?

    I have the POWER_SAVING defined in the project.

    there is no xds110 connected, although cable there.

    I would remove the cable and power cycle the board. The reasons are:

    - If the XDS110 was connected once to load or debug the program, it would have powered up the Debug Subsystem. Power cycling the board will power off this subsystem. 

    - Some of the XDS110 pins have pull ups/downs that will definitely increase the power consumption of the board - a minimal margin in active mode, but a severe increase when you are trying to measure standby/shutdown modes. Physically removing the cable will remove that.

    Can you measure the shutdown current using multimeter.

    Care must be taken when measuring current with a multimeter, as its burden voltage may throw off some numbers.

    I have such a CC2652R launchpad, is it ok for such test? or should I purchase a CC2640R2 launchpad?

    As  mentioned, the CC26x2 board features EnergyTrace and therefore can perform measurements. You can connect the two to load code and debug as shown in the photo below. In the photo two connections are shown: power and the XDS110 JTAG signals to the CC2640R2 Launchpad.

    To make measurements, disconnect the IDC cable.

    Hope this helps,

    Rafael

  • Can you measure the shutdown current using multimeter

    yes we have just performed such a test, using multimeter, powered by AA battery 3.3V, on two module.

    1, average current is higher than 500uA in adv 5s, then 377uA when shutdown

    2, average current is higher than 500uA in adv 5s, then 173uA when shutdown

    which is the same result tested by device.   see picture attached.

  • Hi dsp999,

    Can you verify your setup by measuring the shutdown current of the launchpad? This will help us figure out whether the issue is with your setup, the software or the hardware. You can run the pinshutdown example in CCS, verify that your shutdown current is the same as the datasheet value with energytrace like did. Then, measure that same shutdown current with your multimeter setup. If that works fine, then run the shutdown code on your PCB and measure it with both energytrace and your multimeter. This will help us get to the root of the problem.

    Best,

    Nate

  • Hi dsp999,

    Share your test program, From one of your post I remember frederikg mentioned your board don't have a DC DC recharge circuitry.

    Care must be taken when measuring current with a multimeter, as its burden voltage may throw off some numbers.

    Measuring the shutdown current using multimeter is just to know the base current consumption of the board. Would be better to use a Keysight DC Power Analyzer to do this as recommended at TI documentation. But, it's very expensive.

    This is the shutdown current I measure using the CC2640R2F Launchpad running on simple peripheral then putting it to shutdown mode after 5 seconds. 0.1 uA is shutdown current according to datasheet. At one of my product development custom CC2640R2F board with accelerometer we were also able to achieve the same shutdown current. If I remember correctly the same value won't be achieved using pinShutdown example program.

    -kel

  • yes your memory is right.  now I have two modules, one with DCDC(shutdown current 173uA), one is LDO(shutdown current 377uA),  follow the sample and guide all function is right now, adv ok, shutdown ok.   only problem is current measure.  

    I will try launchpad.   

  • Dear all, I have just tested on the CC2640R2 custom board (not launchpad but one mimimum system custom board here), and got that shutdown current is under 1uA.  so the measure system is ok.

    any suggestion how to find problem? 

    now the main problem is that you have not released any CC2640R2FRSMR dsk board and sample project, there is no direct reference.

  • Hi DSP,

    Let me make sure I understand correctly:

    You have two custom PCB's with a CC2640R2 module placed on each. You are able to achieve <1 uA on one of these custom boards in shutdown, but you're asking how to get that same <1 uA reading on the same board running your custom code? Is that correct, or am I misunderstanding?

    If that is the case, I would echo 's earlier recommendation of running the unmodified simple_peripheral example on your custom board from SDK 4.40.04.04 with everything disconnected. If you can run this example and mimic his results of a 0.1 uA shutdown current, then I'd try to find the discrepancies between the simple_peripheral settings and the settings you have in your custom project. I would use EnergyTrace (which is built into the CC2652R Launchpad you have available) to get a more detailed look at the current consumption too if your initial results don't match what you're expecting.

    In general - I know this must be frustrating to keep going back and forth with us. We're doing our best to help you find the root cause of this issue, but one thing that helps us do our jobs better is more pictures. When you post results, including pictures of the boards and the measurement method helps us avoid confusion and isolate the issue more efficiently. If you can follow 's example of posting pictures of every result and setup, I think we can go much faster at resolving this issue.

    Best,

    Nate

  • to clarify, I have tested on 3 boards, 1, CC2640R2,  2, CC2640R2FRSMR with LDO (no DCDC),  3, CC2640R2FRSMR with DCDC.

    all are tested on 4.40 sdk sample code (add shutdown code),    2&3 with minimum modify for CC2640R2FRSMR (remove ext flash and uart etc, add shutdown after 5s).

    all boards are minimum system, that is, no connection to external things.

    test results: 1, under 1uA     2, 377uA   3, 173uA    (average)

    I think the main problem now is that you don't have CC2640R2FRSMR sample code and dsk board. 

  • Hi DSP999,

    I don't think your picture attached correctly.

    As Clemént said in this other post, we don't currently have a launchpad for the CC2640R2FRSMR. described his sample code in detail for you. The fact that you're using a RSM vs RGZ package shouldn't make a difference here.

    We cannot continue to support you until you have mimicked 's  setup with Energytrace measurements and posted your results here. This will give us the granularity we need to isolate your problem.

  • here I have tested on this launchpad(see attached picture), sdk 4.40 sample project, simple_peripheral, I modify:

    1, add POWER_SAVING, default no POWER_SAVING.

    2, add shutdown after 5s

    program it to the chip on board, through the XDS110 on board, and then remove all jumpers.

    measure current, is 5mA, no adv, no change after 5s.

    don't know why.

    then I go back to the custom board here and modify the pin definition to PULL_DOWN, (earlier test it is NO_PULL), now I got <1uA current after 5s when shutdown.

    so now here shutdown current is ok on custom board.

    question:

    1, how to make the adv current under 10uA?   now it is 6mA adv peak, average 0.6mA

    2, can I config the program and chip wake up automatic and periodic after shutdown?

  • Your LED jumpers are connected.

    Please use energytrace to do these measurements and post the screenshots so we can see the results over time. 

  • have removed all jumpers,  current >5mA.   

    see the picture attached.  is that "energytrace" data? or have to be in some special device/IDE?

    here I don't have CCS yet, we have been using IAR for some time.

  • I've mimicked your setup locally, and it has confirmed the results that Rafael obtained. I used the latest SDK (5.10) on a CC2642R launchpad. I've made no modifications to the code.

    Simple_peripheral.c

    Perhaps your issue is using IAR instead of CCS. CCS is free online to download. Perhaps your current measurements aren't sampling quickly enough to capture the behavior seen in our screenshots. Please mimic our setup in CCS and run your measurements to see if they're comparable.

  • Hi,

    Your photographs show the LAUNCHXL-CC26X2R1 board and two J clips connected somewhere outside of the field, which we can't tell.

    As a comparison, my photograph (and the diagram at the end of this post) shows the LAUNCHXL-CC26X2R1 in the following configuration:

    - its USB port is connected to the host PC that is running CCS and its EnergyTrace feature. Power to the system is provided via this USB connection.
    - wires connected from the 3V3 and GND lines of this board to the other board LAUNCHXL-CC2640R2. This other board contains the CC2640R2F device that you want to measure (it may even be your target board).

    Note that all jumpers are disconnected on the LAUNCHXL-CC26X2R1 board so it only powers the device of interest CC2640R2F on the LAUNCHXL-CC2640R2. Similarly, all the jumpers (except the LED jumpers) are disconnected on the LAUNCHXL-CC2640R2.

    To get a very accurate reading of the standby/shutdown modes, these two LED jumpers must be removed as well. If you are measuring power in your own board, be mindful that other circuits tied to the device will consume power as well, unless you have a way to fully isolate the device from its surrounding circuitry. 

    This will allow the LAUNCHXL-CC26X2R1 to measure the current consumed by the CC2640R2F device that is present on the LAUNCHXL-CC2640R2 (or your own board).

    To configure EnergyTrace, check the resource sent by Ammar at the second post of this thread. 

    Hope this helps,

    Rafael

  • thanks very much for the detail explain and picture, :)  I really need some effort to understand and set up it.

    for a much effective way, how about that you do a test for the hex I have built? ( I can attach it)   if it is ok in your testing, then problem must be on hardware side, if it is not ok, then we just need to check software side,  is that right?

  • Hi,

    Please do attach it, but make sure it is the version with the POWER_SAVING defined. Also, be sure it runs on the Launchpad board (otherwise a measurement will not be possible).

    That will help isolate the root cause of the problem.

    Regards,

    Rafael

  • ok, we can start it here. 

    SDK 4.40, IAR8.32, 

    C:\ti\simplelink_cc2640r2_sdk_4_40_00_10\examples\rtos\CC2640R2_LAUNCHXL\ble5stack\simple_peripheral

    out of box without any modify (no POWER_SAVING)

    after build and program it to the launchpad, no adv.

    this is the hex

    and these are attached pictures.

    where is the problem? are the jumpers correct?

  • You say you're using the SDK for the CC2640, yet the board you're running the code on is a CC2642. These are not compatible devices. You'll need to run code from the CC26X2 library.

    You need to remove all the jumpers except for power and gnd when you're taking your current measurement. You're still connected to 5V, RX, TX, RST, TMS and TCK, as well as both LED's on the bottom. You'll need to keep these jumpers connected while flashing your board, but afterwards, you must remove them for an accurate measurement.

  • for the last test, it is not for current, it is for checking is it working properly. earlier I have asked whether the sample can run on that board(marked as CC2642R1/CC2652R1), someone said yes.  so.... I must buy a CC2640 launchpad to go on?