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: Not transmitting (but receiving) after SLEEP state

Part Number: CC1101
Other Parts Discussed in Thread: SIMPLICITI

Hi

I use a CC1101 connected to PIC24FJ using SimpliciTI stack (IAR version 1.2.0 rev. E). This stack has been lightly modified to match PIC SPI

CC11 is correctly initialized using function SMPL_Init(...).

Reception is OK when putting radio to RX using function: SMPL_Ioctl(IOCTL_OBJ_RADIO, IOCTL_ACT_RADIO_RXON, 0);

Transmission is OK with function: SMPL_Send(...)

So far so good, but problem occurs if I put CC11 to sleep using: SMPL_Ioctl(IOCTL_OBJ_RADIO, IOCTL_ACT_RADIO_SLEEP, 0);

After going to SLEEP, then IDLE and RXON, CC1101 is able to receive correctly but cannot respond.

More precisely, function MRFI_Transmit failed after multiple try due to CCA process. I discovered that GDO0 interruption does not occurs when transmitting.

I can confirm that nothing is emitted thanks to a CC1101 eval board "sniffing" the radio.

I have checked everything said in related post.

MISO line is handled by SimpliciTI stack when waking up from SLEEP slate.

I'm only using PA_TABLE[0].

Does anyone see where the problem is?

Many thanks

  • Unfortunately I do not have any HW that I can run testing on with the CC1101, but I can give you some debugging hints.

    Are you able to transmit after SLEEP if you are not using CCA? (use txType = MRFI_TX_TYPE_FORCED instead of MRFI_TX_TYPE_CCA). If this works, the problem is not related to TX, but to the CCA algorithm.

    It might also be a good idea to monitor all the SPI lines and the GDO lines when waking up the device from SLEEP to try to figure put what is going on.

    Could the problem be related to the MCU you are using and not the radio? Depending on what GDO signals you are using on the CC1101 and what they are configured to, the might change state when entering SLEEP state. Could it be that this is happening and that your MCU is not disabling interrups before putting the CC1101 in SLEEP mode, and that this makes problems for you?

    Sorry that I could not be of any more help right now.

    BR

    Siri

  • I tried to replace MRFI_TX_TYPE_CCA by MRFI_TX_TYPE_FORCED and it appears that transmission works! Thank you for the tip Siri.

    Still, I can't figure out how sleep mode affects CCA algorithm. Is it possible that an (undocumented) register related to CCA is reset during sleep?

    For obvious reasons, I'd like to fix the problem instead of patch simpliciTI to workaround it. But I don't have much time to investigate deeply this subject

    I'll run few more tests and see what coming out, in the meantime if anyone understand what s happening...

  • Problem seems to come from GDO0 pin configuration, when CCA is used, system waits for an interrupt on GDO0 after setting it to 0x1B.

    In datasheet I found following info about this configuration:
    PA_PD. Note: PA_PD has the same signal level in SLEEP and TX states. To control an external PA or RX/TX switch in
    applications where the SLEEP state is used, it is recommended to use GDOx_CFGx = 0x2F instead.

    Even if I use SLEEP mode, system is in idle or RX state when GDO0 is reconfigured, so it is not supposed to matter. Anyway, I tried to replace 0x1B by 0x2F, it does not fix the problem.
  • Replacing IOCFG0 with 0x2F is suggested a soluton if you need a signal to control your External PA with (if you have any), and is not a solution for the CCA implementation. For the CCA implementation this signal is used to signal that the device has entered TX mode (the signal will go from 1 to 0 (falling edge)) when entering TX Mode.
    The signal will also go from 1 to 0 when entering SLEEP (hence the note in the data sheet explaining how this signal can make problems in applications that enters SLEEP)).
    Could it be that you have gotten an interrupt on this pin when entering SLEEP, or are forgetting to clear the interrupt after SLEEP, causing you to miss the interrupt generated from enterring TX mode?
    I also know that hte PA_PD signal is used to determine if the radio has entered RX mode, and also this signal has the same level in SLEEP as in RX.
    It might be that these interrupts signals must be handled differently on the PIC controller you are using compared to on the MSP430 MCU, hence you are getting problems when you ported the code.

    BR
    Siri
  • Thread closed due to inactivity

    Siri