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.

CC1101: Post-TX abnormal current

Part Number: CC1101
Other Parts Discussed in Thread: MSP430FR5969, ENERGYTRACE

Hi,

I'm currently sampling the CC1101  to use in one of our R&D projects with ultra-low-power targets

Right now, I'm just test the TX mode to check current profile of a buffer transmission.

Settings looks simple :

  • Datarate : 76.6kbaud
  • Frequency center : 868.8MHz
  • TX Power : 10 dBm

Main loop is :

  1. Send 10-bytes packet (+ 4Byte preamble  + 4Byte sync word)
  2. Send CC1101 Sleep as soon as it finishes
  3. Wait 100ms

I've hooked up the CC1101 (using a breakout module) with a MSP430FR5969 launchpad

I measure current with EnergyTrace on Code Composer Studio

Looking at (wake-up + pll lock + airtime), I'm expecting TX current between 2-3ms

I see a peak with that estimate duration, but after that, there is a ~18ms steady current that I do not understand (see screenshot below).

Any idea where it is coming from and why it happens ?

Thanks in advance.

  • The figure showing the current consumption is missing, please re-post the picture.  

  • Hi,

    I've edited the main post with and re-added the screenshot

  • Would you be able to share some code that would recreate this issue? 

  • Sure, I've taken a basic CC1101 library from Github (github.com/.../msp430-cc1101) to be able to evaluate the power profiles of the module.

    I went through the chip configuration that the library does and it looks ok. I modified some parts (frequency configure was for 433MHz, mine is 868MHz)

    Main is pretty simple.

    I've attached the zipped project : CC1101_Test.zip

  • I do not have the HW you are running so I cannot do any tests, and I am not able to build the code, but I have taken a look at it.

    Regarding the CC1101, you should consume around 30 mA for 2.2 ms when sending a packet. After the packet is sent, you send a SPWD strove, and this should take the CC1101 to sleep state. However, I do not see that you do anything to put the MCU in any kind of power down state, and I cannot explain the 18 ms you are referring to.

    Also, I am wondering what the unit on the y axis is? As I said, the CC1101 draws about 30 mA at +10 dBm output power.

    How does the current profile look like when you are not using the radio at all?

    while(1) {
        SpiStrobe(CC1101_SPWD);
        delay(100);
        SpiStrobe(CC1101_SIDLE);
        delay(100);
    }

    How does the power profile look like if you are going in and out of TX (a STX strobe will make the radio transmit preamble for ever if the FIFO is empty)

    while(1) {
        SpiStrobe(CC1101_SIDLE);
        delay(100);
        SpiStrobe(CC1101_STX);
        delay(100);
    }

    Siri

    How does it look

  • Hi Siri,

    Thank you for taking time to look into this.

    I'm not doing anything with the MCU (low-power state) right now. MCU is waiting in active state right now for the test. I'll implement this later. MCU power is around 3mW when main loop is empty.

    I'm not sure to understand what you mean by "y axis".

    For the first test (no radio, sleep/idle), power profile shows the 20ms current after the Idle period

    For the second test (idle/tx), we clearly see the different mode in the power profile. However, there are some steady current after the TX (6-7ms) (see below)

    So I made a third test by going between TX and Sleep with the loop doing :

    SpiStrobe(CC1101_SIDLE);
    SpiStrobe(CC1101_SPWD);
    delay(100);
    SpiStrobe(CC1101_STX);
    delay(100);

    And there, we see again the current, but with a longer duration (around 20ms) (see below)

    So it looks like the weird current is maybe not related to the TX, but to the entry within resting state (Idle/Sleep) and that its duration is depending on the chosen state

  • I am sorry that I am not able to help you with this issue. I guess that it must be related to the SW you are running or something on your HW.

    What I do not is that it does not come from the radio. If the radio is in TX state, it consumes around 30 mA. After exiting TX, the radio will enter IDLE state where it consumes 1.7 mA, and then it will enter sleep as soon as the SPWD strobe is transmitted.

    The only thing that can keep it active is the calibration of the RC OSC, if this is not done when in active. However, this only takes about 2 ms (and should not be an issue since your radio is active longer than that).

    BR

    Siri

  • Hi Siri,

    If you think it comes from my SW, do you have some simple SW that you're sure of that I may run (let's say Sleep/TX switch) ?

    Best regards,

    Romain

  • You can try something like this:

    • Init MCU
      • (Setup SPI interface and configure all IOs correctly so that they do not draw un-necessary current)
    • Init Radio with register settings from SmartRF Studio
    • Strobe STX
      • The radio will now transmit preamble forever (since the FIFO is empty)
    • Put the MSP430 in low power mode
      • The current consumption should now be around 30 mA + MSP430 sleep current

     

    • Init MCU
      • (Setup SPI interface and configure all IOs correctly so that they do not draw un-necessary current)

    • Init Radio with register settings from SmartRF Studio
    • Strobe SPWD
      • The radio will enter SLEEP
    • Put the MSP430 in low power mode
      • The current consumption should now be around 200 nA + MSP430 sleep current

     

    I would also recommend that you look at the current profile when not using accessing the CC1101 at all. After reset, the device should be in IDLE mode (consuming about 1.7 mA). How does your current profile look like now?

  • Hi Siri,

    Thank you for the answer.

    I made the 3 tests you indicated.

    For every test, there is nothing else that active SPI : no interrupt, no timer ...

    - Init SPI / IO => config CC1101 => STX => LPM3 : I get a stable 37.5mA

    - Init SPI / IO => config CC1101 => SLEEP => LPM3 : I get a stable 270nA

    - Init SPI / IO => nothing => LPM3 : I get a stable 2.0mA

    For the configuration, I took the default SmartRF Studio config (apart from changing power to 10dBm instead of 12dBm)

    I tried the previous test (STX -> IDLE -> SLEEP 100ms loop) with the SmartRF Studio and again, I get a ~40ms current after the 100ms of STX.

    Worth noting, it seems that the current is not always the same value but it look like there is a patten

    Best regards,

    Romain

  • I did some tests on the TrxEB + CC1101EM.

    First test:

    void main(void)
    {
        uint8 marcstate, fscal1;
    
        // Initialize MCU and peripherals
        initMCU();
    
        // Write radio registers
        registerConfig();
        
        while (1)
        {
            trxSpiCmdStrobe(CC1101_STX);
            waitMs(10);
            trxSpiCmdStrobe(CC1101_SIDLE);
            waitMs(10);
            trxSpiCmdStrobe(CC1101_SPWD);
            waitMs(10);
        }
    }
    

    The current profile look like this:

    I then change the code:

    void main(void)
    {
        uint8 marcstate, fscal1;
    
        // Initialize MCU and peripherals
        initMCU();
    
        // Write radio registers
        registerConfig();
        
        while (1)
        {
            trxSpiCmdStrobe(CC1101_STX);
            waitMs(10);
            trxSpiCmdStrobe(CC1101_SIDLE);
            trxSpiCmdStrobe(CC1101_SPWD);
            waitMs(10);
        }
    }
    

    As you can see, all current plots looks like expected.

    BR

    Siri

  • Hi Siri,

    Thanks for the feedback and the test you made.

    So either :

    - EnergyTrace from by devboard is not logging accuratly

    - my CC1101 board has a design fault that causes the leakage bewteen

    - the link bewteen the two creates some leakage (I/O)

    As I can't do much about the two first ones, I'll try to dig into the last one.

    Can you detail me precisely the I/O configuration (Input, Output, pull resistors) that you have for all the I/O linked to the CC1101EM ?

    Best regards,

    Romain

  • As I said, I am using the TrxEB + CC1101 EM.

    Radio config:

    #define PA_TABLE {0x50,0x00,0x00,0x00,0x00,0x00,0x00,0x00,}
    
    static const registerSetting_t preferredSettings[]=
    {
      {CC1101_IOCFG0,      0x2F},
      {CC1101_IOCFG1,      0x2F},
      {CC1101_IOCFG2,      0x2F},
      {CC1101_FIFOTHR,     0x47},
      {CC1101_PKTCTRL0,    0x05},
      {CC1101_FSCTRL1,     0x08},
      {CC1101_FREQ2,       0x21},
      {CC1101_FREQ1,       0x62},
      {CC1101_FREQ0,       0x76},
      {CC1101_MDMCFG4,     0xCA},
      {CC1101_MDMCFG3,     0x83},
      {CC1101_MDMCFG2,     0x93},
      {CC1101_DEVIATN,     0x35},
      {CC1101_MCSM0,       0x18},
      {CC1101_FOCCFG,      0x16},
      {CC1101_AGCCTRL2,    0x43},
      {CC1101_WORCTRL,     0xFB},
      {CC1101_FSCAL3,      0xE9},
      {CC1101_FSCAL2,      0x2A},
      {CC1101_FSCAL1,      0x00},
      {CC1101_FSCAL0,      0x1F},
      {CC1101_TEST2,       0x81},
      {CC1101_TEST1,       0x35},
      {CC1101_TEST0,       0x09},
    };

    MCU code taken from:

    BR

    Siri