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.

CC2500 Will not go to sleep

Other Parts Discussed in Thread: CC2500

Hello, this is our first post here.

Our design includes a CC2500 for communication. We send it an SIDLE 
command followed by an SPWD to put it to sleep. We then try communicating 
with it
and sure enough we get an interrupt on the GDO0 line to tell us that a 
packet is available. The SIDLE should remove any possibility of a wake on 
radio occuring thus we can't understand why we can still communicate. When 
we try to talk to it, it received the message that it is sent.
Any help is appreciated.

Oliver
 

 

  • Hi.

    Don't have a good explanation here. As you say, issuing a SIDLE will remove the possibility of WOR occuring. I assume you have read the datasheet which states that SPWD will first be executed when CSn goes high? What is the status byte returned when issuing the SPWD command?The 4 msb should be 0s.

  • You write “then try to communicating with it”

    If this implies pulling CSn low, the Circuit naturally reenter active mode.

     

    If you are testing in SmartRF studio you also need to turn of SPI polling

    Settings>Polling Interval>Never

     

    Monitoring current consumption is the only method to observe if the transceiver enter WOR or sleep mode. Any other activity will activate it, causing it to leave low power mode.

      

     

  • I am finding a similar problem with the CC2500.

     

    I have a loop that you can see in the code below.

     

    I am monitoring the current drawn by the board. If I issue an SPWD strobe shortly after power-up, in the beginning of the main() function, then the radio chip goes to sleep, and the total power consumption is extremely low.

    But if I issue the SPWD strobe in the loop below, the board continues to draw 26 mA continuously.  It does not reduce in current for the 4 seconds that it is waiting between transmits.

    I am using the EZ430-RF2500 board for this. Do you have any ideas?  Thanks.

    Sage

     

       while(1)

      {

     

        // acquire sensor data

        sensorsAllAcq(&SensorData);

     

        // flush transmit buffer

        halRfStrobe( CC2500_SFTX );       

     

        // Turn on Tx mode

        halRfStrobe( CC2500_STX );

     

        // Pack the data into the payload packet

        PackPayload (&Payload, &SensorData);

     

     

        for (i=0; i<20000; i++){i=i+1;}

     

        // Transmit the data

        halRfWriteFifo( (uint8*) &Payload, sizeof(struct_Payload) );

        for (i=0; i<5000; i++){i=i+1;}

     

        // Power down the radio chip

        halRfStrobe(CC2500_SIDLE); // switch to IDLE state first

        for (i=0; i<100; i++){i=i+1;}

        halRfStrobe(CC2500_SPWD);

     

        // delay 'n' times 4 seconds until next sense event

        for (i = 0; i<n; i++)

        {

          __bis_SR_register(LPM3_bits + GIE);     // Enter LPM3, enable interrupts

          BLINK_RED(3000);

        } // delay loop

     

      } // while

  • I had similar problem and spent pretty lot time on it. In case if someone would use search and find this topic here is the solution for my case. First of all as it was written, it is necessary to set and keep high level for CE after SPWD to  have readio in sleep mode. But I also had to set some delays (after receiving status via SPI that shows that the data was received by radio. I have not measured acurately what their value should be, I simply set very big ones as it is ok for my case) between sending SIDLE and SPWD strobes and between SPWD and switching CE to high. Suppose the accurate values for this delays could be found somewhere in datasheet.

  • Could you tell me how can I measure the current so as to verify that my radio is/is not in idle or sleep state?

    Moreover, lets make sure that i've understood the actions to be taken in order to get in Sleep Mode:

    1) give SIDLE  command strobe

    2)wait a bit

    3)give SPWD command strobe

    4)wait a bit

    5) set CSn high 

    Is that all? Are we done?

    **What about that polling thing from the smartRF studio? Is there another register that

    I should make sure that its  value doesn't provoke polling?

     

    I would be grateful if I got some answers here.

    Thanks a lot ! 

  • Panos Markopoulos said:

    Could you tell me how can I measure the current so as to verify that my radio is/is not in idle or sleep state?


    To measure the consumed current you should insert a serial resistor of several Ohms in Vcc or Gnd circuit (the results should be the same). If you use Rf2500, suppose, the easiest way is to make a fuse with resistor and insert it instead of jumper on battery board. (although, it is better to use some stabilized voltage for measurements, or, at least to control the Vcc). After that you can connect the oscilloscope to this resistor and see the picture. You will hardly be able to measure the sleep mode current (as voltage would be to small), but at least you would be able to detect when radio is sleeping, when it is in idle mode and when it is in RX/TX.
    For more details - look SLAA378B, page 11.

    Panos Markopoulos said:

    Moreover, lets make sure that i've understood the actions to be taken in order to get in Sleep Mode:

    1) give SIDLE  command strobe

    2)wait a bit

    3)give SPWD command strobe

    4)wait a bit

    5) set CSn high

    Is that all? Are we done?

    As for the sleep procedure, seems all is correct (if you already have selected chip before). As for me, I am using the following simple code: (with RF2500 boards)

    P3OUT &= ~0x01; //chip select
    UCB0TXBUF = 0x36; //IDLE RADIO STROBE
    while (!(IFG2 & UCB0TXIFG));
    while (!(IFG2 & UCB0RXIFG));
    UCB0TXBUF = 0x39; //LPM RADIO STROBE
    while (!(IFG2 & UCB0TXIFG));
    while (!(IFG2 & UCB0RXIFG));
    P3OUT |= 0x01;

    But it would be better to check with oscilloscope if all is ok. And test the communication with radio - for example try to write something to radio register and the read it back to make sure that communication is working.

    Panos Markopoulos said:

    **What about that polling thing from the smartRF studio? Is there another register that

    I should make sure that its  value doesn't provoke polling?

     

     I suppose, there should not be any polling issues, as wake-on-radio requires special strobe. But again, better to check with oscilloscope.

  • Thanks Dragker.

    Your post was realy helpful.