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: CC1101: one transmitter and two receivers

Part Number: CC1101
Other Parts Discussed in Thread: TEST2

Hi,

I have a problem on the cc1101:

In my application  if I have one transmitter and one receiver it works! If I have two receiver, Rx1 work fine, the Rx2 no, it receives messages destined for the receiver 1 and not its messages.

It could be a problem with RX_FLUSH? Or am I slow to read the messages?

    0x06,    //IOCFG2 - GDO2 output pin configuration
    0xAE,    //IOCFG1 - GDO1 output pin configuration
    0x06,    //IOCFG0 - GDO0 output pin configuration
    0x0F,    //FIFOTHR - RXFIFO and TXFIFO thresholds.
    0xD3,    //SYNC1 - SYNC1
    0x91,    //SYNC0 - SYNC0
    0x3D,    //PKTLEN - Packet length.
    0x04,    //PKTCTRL1 - Packet automation control.
    0x05,    //PKTCTRL0 - Packet automation control.
    0x00,    //ADDR - Device address.    
    0x00,    //CHANNR - Channel number.
    0x06,    //FSCTRL1 - Frequency synthesizer control.
    0x00,    //FSCTRL0 - Frequency synthesizer control.
    0x20,    //FREQ2 - Frequency control word, high byte.
    0x28,    //FREQ1 - Frequency control word, middle byte.
    0xC5,    //FREQ0 - Frequency control word, low byte.
    0xCA,    //MDMCFG4 - Modem configuration.
    0x75,    //MDMCFG3 - Modem configuration.
    0x03,    //MDMCFG2 - Modem configuration.
    0x42,    //MDMCFG1 - Modem configuration.
    0xE5,    //MDMCFG0 - Modem configuration.
    0x34,    //DEVIATN - Modem deviation setting (when FSK modulation is enabled)
    0x07,    //MCSM2 - Main Radio Control State Machine configuration
    0x20,    //MCSM1 - Main Radio Control State Machine configuration
    0x18,    //MCSM0 - Main Radio Control State Machine configuration
    0x16,    //FOCCFG - Frequency Offset Compensation Configuration.
    0x6C,    //BSCFG - Bit synchronization Configuration.
    0x43,    //AGCCTRL2 - AGC control.
    0x40,    //AGCCTRL1 - AGC control.
    0x91,    //AGCCTRL0 - AGC control.
    0x87,    //WOREVT1
    0x6B,    //WOREVT0
    0xF8,    //WORCTRL
    0x56,    //FREND1- Front end RX configuration.
    0x10,    //FREND0 - Front end RX configuration.
    0xE9,    //FSCAL3 - Frequency synthesizer calibration.
    0x2A,    //FSCAL2 - Frequency synthesizer calibration.
    0x00,    //FSCAL1 - Frequency synthesizer calibration.
    0x1F,    //FSCAL0 - Frequency synthesizer calibration.
    0x41,    //RCCTRL1
    0x00,    //RCCTRL0
    0x59,    //FSTEST - Frequency synthesizer calibration control
    0x7F,    //PTEST
    0x36,    //AGCTEST
    0x88,    //TEST2 - Various test settings.
    0x31,    //TEST1 - Various test settings.
    0x0B,    //TEST0 - Various test settings.
    0x00    //PARTNUM;

Anyone can help me?

Thanks

Ivo

  • From the settings you post I don't see that you have turned on address filtering. How have you intended to implement that RX1 and RX2 only receives packets addressed to RX1 or RX2?
  • Hi TER,
    thank you very much for your assistance!!!
    I Have solve my problem, now the sistem work! The problem was the GDO setting. When cc1101 is in transmission the GDO level must be in RISING mode, when it is in receive the GDO must be in FALLING mode, is it correct?
    I did not know, I discovered this on a web example.
  • Hi,

    I have another question: my system has battery alimentation and the consumption must be low.

    I use the WOR mode and it work fine...but as you have noticed I don't use the address byte because in the payload I use 4 byte to addressing the message, but every transmission wakes up all the receivers. If I use the address byte how can I wake up the receiver only when the packet is routed to the correct receiver?

    Before to WOR mode I change this registers in this way:

        //--------------------------------------------------------------------------------
        CC1101_SpiWriteReg(CC1101_MCSM2, 0x10);
      
        CC1101_SpiWriteReg(CC1101_WOREVT1, 0x0E);
        CC1101_SpiWriteReg(CC1101_WOREVT0, 0x20);

        //--------------------------------------------------------------------------------
        CC1101_SpiWriteReg(CC1101_WORCTRL, 0x30);
        calib1 = CC1101_SpiReadReg(CC1101_RCCTRL1_STATUS);
        calib0 = CC1101_SpiReadReg(CC1101_RCCTRL0_STATUS);
        CC1101_SpiWriteReg(CC1101_RCCTRL1, calib1);
        CC1101_SpiWriteReg(CC1101_RCCTRL0, calib0);
        CC1101_SpiWriteReg(CC1101_IOCFG0, 0x0e);
     
        CC1101_SpiStrobe(CC1101_SWORRST);
        CC1101_SpiStrobe(CC1101_SWOR);

    I have configured IOCFG0 = 0x0E because the other settings (0x0F or 0x06) doesn't wake up the CC1101.

    Can you help me?

    Thanks

    Ivo

  • WOR basically means you are waking up at given intervals and checking if a signal is on the channel. To see if a packet is sent to a given node, the node has to receive the packet but if you use address filtering the CC1101 will not wake up the MCU and the packet will not be stored in the FIFO. This is covered in www.ti.com/.../swra126b.pdf.

    What do you mean by "waking up the CC1101" since these signals are outputs? 0x0E is carrier sense but have you received a packet when this is asserted?
  • "What do you mean by "waking up the CC1101" since these signals are outputs?"

    I have a MCU that manage many device (motor, encoder, rs232, buttons...and CC1101). The microcontroller goes to sleep when the application is in stop; each device wakes autonomously  the MCU through interrupts.

    When the MCU is in sleep, the cc1101 is in WOR mode. When there are messagges radio, the GDO signal wakes the MCU and the CC1101 goes into Reception mode.

    0x0E is carrier sense but have you received a packet when this is asserted?

    Yes I received message when this is asserted, but the only way to have a GDO signal in wor mode is to set the event 0x0E (carrier sense)? With this setting if I have many receivers, all the receivers exit of sleep mode and wor mode...can I wake up only the correct receiver (when the package is addressed to him)?

    Thanks

    Ivo

  • Could you state
    - How long preamble you send
    - Datarate
    - How often you want to wake up

    Also try to take out the PA_EN and LNA_EN signals on the TX and RX side to check if you are actually in RX when your TX sends data. If you get the correct packet content using 0x0E, setting 0x06 should also assert the pin.