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 DOESN'T ENTER IN POWER DOWN MODE

Other Parts Discussed in Thread: CC1101, TEST2

Hello!

I am working in a project that use a PIC16f1829 to comunicate via SPI with CC1101, I can transmit and receive packets with CC1101, but the goal of the project is to use the CC1101 in low-power mode, so after I configured the CC1101 I need to put him in lowest power mode, but this is not occur, I had verified if the strobe commands are ok, after I send the strobe commands I read the marcstate register to verify if the command was sucessfull always rigth, but when I send SPWD I can't read the status of CC1101, because this will wake-up the radio and I what is wrong in my firmware.

Here is the configuration of registers:

void ConfigureRF (void){


            halRfWriteReg(IOCFG0,0x06);  //GDO0 Output Pin Configuration
            halRfWriteReg(FIFOTHR,0x47); //RX FIFO and TX FIFO Thresholds
            halRfWriteReg(PKTCTRL0,0x05);//Packet Automation Control
            halRfWriteReg(FSCTRL1,0x06); //Frequency Synthesizer Control
            halRfWriteReg(FREQ2,0x21);   //Frequency Control Word, High Byte
            halRfWriteReg(FREQ1,0xE3);   //Frequency Control Word, Middle Byte
            halRfWriteReg(FREQ0,0x8E);   //Frequency Control Word, Low Byte
            halRfWriteReg(MDMCFG4,0x8A); //Modem Configuration
            halRfWriteReg(MDMCFG3,0x75); //Modem Configuration
            halRfWriteReg(MDMCFG2,0x13); //Modem Configuration
            halRfWriteReg(MDMCFG1,0x23); //Modem Configuration
            halRfWriteReg(MDMCFG0,0x2F); //Modem Configuration
            halRfWriteReg(MCSM1,0x00);   //Main Radio Control State Machine Configuration
            halRfWriteReg(MCSM0,0x18);   //Main Radio Control State Machine Configuration
            halRfWriteReg(FOCCFG,0x16);  //Frequency Offset Compensation Configuration
            halRfWriteReg(AGCCTRL2,0x43);//AGC Control
            halRfWriteReg(WORCTRL,0xFB); //Wake On Radio Control
            halRfWriteReg(FSCAL3,0xE9);  //Frequency Synthesizer Calibration
            halRfWriteReg(FSCAL2,0x2A);  //Frequency Synthesizer Calibration
            halRfWriteReg(FSCAL1,0x00);  //Frequency Synthesizer Calibration
            halRfWriteReg(FSCAL0,0x1F);  //Frequency Synthesizer Calibration
            halRfWriteReg(TEST2,0x81);   //Various Test Settings
            halRfWriteReg(TEST1,0x35);   //Various Test Settings
            halRfWriteReg(TEST0,0x09);   //Various Test Settings




            halRfWriteReg(PATABLE,0x8E);   //0dbm (1mW)
}

Send strobe Commands:

unsigned char Strobe (unsigned char strobe){
    unsigned char status;

            CSn = 0;                            //Chip Select
            while(SO);                            //Wait MISO - low
            status = SPI_Write(strobe);           
            CSn = 1;                            //Chip Select
            Wait();
            return status;
}

void main(){

    InicializaCC1101();
    while (status != 1){
        status = ReadReg(MARCSTATE);
        DelayMs(5);    
        Strobe(SIDLE);
    }
    status = Strobe(SPWD); // Standby

}

Thanks,

Giovani

  • You write that you are not able to enter power down. How do you know? What is the power consumption?

  • Because the power consumption is over 200uA, instead of 45 uA this is when I retreat the cc1101 from the board.

    Thanks,

    Giovani

  • First, where does the current go? Is it actually going to the CC1101? Is one or more GDO set in a state that causes slightly higher current consumption?

    If your board uses 200uA this is far less than the IDLE current consumption or any other state indicating that CC1101 is in correct state but some current is flowing somewhere else. To help you further I would need to know exactly which currents and voltages tat are measured where and a schematic.

  • The current is going to CC1101.

    Now, in the last test I configured CC1101, when I read the marcstate it returned 0x0F (RX_RST), I had tried with Strobe(SIDLE), but still continue in state RX_RST, what can I do when in this state, I think this is one of the problems that causing excessive current consuption.

  • Ter,

    another thing that looks strange is that we had produced 100 boards first just a few consumes (3) the current calculated 35-45uA, but all others doesn't and this cause us think that the problem was in firmware, in the initialization of CC1101. I don't know why this occurred, if you could help me I will be so grateful.

    Thanks,

    Giovani

  • If some of your boards can achieve the expected current draw and others don't, you may be fighting leakage currents. One thing you could try is to clean one of the boards with higher current and see if the current drops. It might be the solder flux or other contaminates on the board are causing the excess current.

  • How do you know that the current goes to CC1101?

    Note that the SO pin is high Z when not used and if the corresponding input in the MCU is set as input this input will get a not defined level causing higher current consumption.

  • Thanks Timothy, after I had cleaned the boards the current is 20uA this is excellent, thank you very much.

    And TER thanks for your help another thing was the SO pin, after your suggest the current not floating any more, but I didn't find in the datasheet of CC1101.

    Thanks very much for help,

    Giovani

  • Dear TI support team and experts.


    I have a question about state change of CC1101 RF device.
    I am developing RFID reader/tag using STM32L152VBT6 and TI CC1101 using SPI1 interface.
    I would like to change the CC1101 state to power down mode and normal tx/rx mode.

    I used the following codes.

    However, the CC1101 device sends/receives packets normally when the CC1101 is in power down mode.
    Would you advice me how can I change the state of CC1101 into power down mode successfully?

    I will appreciate to you if I can be given any suggestion & advices.

    void BSP_433_PowerOn     (void)
    {
       SPI_FLASH_CS_LOW();  // SPI1 interface.
       while (GPIO_ReadInputDataBit(GPIOE,GPIO_Pin_14) );  // wait until SO becomes 0.  
       SPI_FLASH_CS_HIGH(); // SPI1 interface.

    //   halRfWriteRfSettings() ;
        halSpiWriteBurstReg(CCxxx0_PATABLE, PaTabel, 8);
        halSpiWriteReg(CCxxx0_TEST2,    rfSettings.TEST2);
        halSpiWriteReg(CCxxx0_TEST1,    rfSettings.TEST1);
        halSpiWriteReg(CCxxx0_TEST0,    rfSettings.TEST0);
       
       halSpiStrobe(CCxxx0_SFRX);                // Flush RX buffer
       halSpiStrobe(CCxxx0_SIDLE);               // IDLE
       halSpiStrobe(CCxxx0_SRX);                  // Receive state.
    }

    void BSP_433_PowerOff    (void)
    {
       halSpiStrobe(CCxxx0_SIDLE); // go to IDLE state.
       halSpiStrobe(CCxxx0_SFRX); // Flush RX buffer.
       halSpiStrobe(CCxxx0_SPWD); // CC1101 enters power down mode when CS becomes high.
       OSTimeDlyHMSM(0, 0, 0, 100);  // wait for 100 ms.
    }

    Thank you very much in advance.

    Sincerely Yours,

    Ick-Sung Choi.

  • If you send/ receive a packet you are not in power down. What is not clear from your code above is when you call the BSP_433_Poweroff function.

  • Dear TER.

    There are 3 tasks for RFID communication.

    Send_packet_task(), Receive_packet_task(), and power_control_task().

    "Send_packet_task()" task sends packet to TI CC1101.

    "Receive_packet_task()" task receives packet from TI CC1101.

    "power_control_task()" controls the state of TI CC1101.

    This task calls  BSP_433_PowerOff() function and  "BSP_433_PowerOn ()" function as follows.

    power_control_task()
    {
       ...
        while(TRUE) {
           OSTimeDlyHMSM(0, 0, 5, 0);     
           BSP_433_PowerOn ();
           OSTimeDlyHMSM(0, 0, 5, 0);     
           BSP_433_PowerOff ();  
        }
    }

    Thank you very much for your kind supports.

    Sincerely Yours,

    Ick-Sung Choi.

     

  • If I understand your code correctly you spend 50% of the time in active and 50% of the time in power down. If you measure the power consumption using a scope, does the current go to ~0 for half the time or how does it look like? What have you done on the debugging front to find out what the chip do when you issue the BSP_44_PowerOff()?

  • Dear TER.

    Thank you very much for your kind advices.

    I does not have scope for debugging.
    I used two tags (tag A and monitor tag) for testing.
    The monitor tag receives the packets from tag A successfully even though the tag A is in Power off state.

    Thank you very much.
    Sincerely Yours,

    Ick-Sung Choi.

  • If you don't have a scope or other instruments for debugging it is hard for me to help you. A CC1101 will not be able to receive anything if it is in power down. The question is why it does not enter power down. 

    - Either you never issue the PWD strobe even though it looks like it from your code

    - Or you have some traffic on the SPI line that pulls the chip directly out of sleep .

  • Dear TER.

    Thank you very much for your kind advices.

    May I send packets when CC1101 is in power off state?
    In my current implementation, the tag sends packet periodically always (eventhough CC1101 is in power off state).
    Is it the problem not to change the CC1101 state into power off state?

    Thank you very much.
    Sincerely Yours,

    Ick-Sung Choi.

  • Power down for CC1101 means that ALL internal modules are turned off. Hence the chip will not do anything when in this mode. If you send a strobe to CC1101 it will wake up again.

    If your tag (transmitter) sends packets with a given interval you have to wake up the CC1101 (receiver) before the transmitter will start sending to ensure that you receive the packet. To do this you have to have some sort of time synched system where the receiver knows when the transmitter will send a packet. If that is not possible the receiver have to be in continuous RX.

  • Dear TER.
    Thank you very much for your kind advices.
    I modified my code that CC1101 does not send/receive any packet in power off state as you advised.
    It works well.
    I can also see that the power consumption is reduced in power off state.

    Thank you very much.
    Sincerely Yours,

    Ick-Sung Choi.