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.

CC1120 RX/TX mode switch in LBT

Other Parts Discussed in Thread: CC1120, CC1125

Hi,

What are the conditions for automatically switching from RX (during LBT phase) to TX (channel is clear) on the CC1120 ?

Specifically in the following scenarios, will the CC1120 switch to TX automatically when :

  1. sync word is detected while in the RX phase and valid packet received
  2. sync word is detected and invalid packet received, with TERM_ON_BAD_PKT=1
  3. sync word is detected and invalid packet received, with TERM_ON_BAD_PKT=0

I'm asking this because in my application, I have a problem where the CC1120 is stuck in IDLE while the TX FIFO is not empty (and TX state was never reached)

Also, I'm pretty sure I know the answer to this one, but the right procedure to initiate LBT is to strobe SRX and then STX right after, is that right?

Thanks!

  • When using LBT you need to strobe SRX, wait for the CS to be valid and then you can strobe STX. If the radio exits RX due to receiving a packet, you will not enter TX.

    If you only are in RX to check if the channel is clear, and not because you want to receive anything, a good solution is to set the sync threshold so strict that you never will find a sync word.

    Siri

  • Siri said:
    When using LBT you need to strobe SRX, wait for the CS to be valid and then you can strobe STX. If the radio exits RX due to receiving a packet, you will not enter TX.

    I'm a bit surprised by your answer, because it sounds like that procedure would be used for a "manual listen before talk", not the LBT as defined in ETSI EN 300 220-1 (with 5ms listening time + pseudorandom part) with CCA_MODE = 0b100. Perhaps I should have mentioned it explicitely :)

    So far I've been using that method (SRX then STX directly) and it seemed to work (it waits for the channel to be available and switches to TX automatically as advertised)

    Here is the revelant extract from the manual :

    When an STX or SFSTXON command strobe is given while CC112X is in the RX state, the TX or FSTXON state is only entered if the clear channel requirements are fulfilled (CCA_STATUS is asserted). Otherwise, the chip will remain in RX. If the channel then becomes available, the radio will not enter TX or FSTXON state before a new strobe command is sent on the SPI interface***.

    *** If PKT_CFG2.CCA_MODE = 100b (LBT) the radio will try to enter TX mode again automatically until the channel is clear and TX mode is being entered

    [...]

    If LBT is enabled (PKT_CFG2.CCA_MODE = 100b) the CC112X will run the algorithm until successful transmission.

    Siri said:
    If you only are in RX to check if the channel is clear, and not because you want to receive anything, a good solution is to set the sync threshold so strict that you never will find a sync word.

    Well, my idea here is to do both :

    • run the LBT algorithm
    • if there is some random data (no sync word) during RX, let the LBT algorithm handle it
    • if there is a sync word, read the incoming packet and then continue LBT (if that's possible)
      • moreover, if there is an error in that packet (invalid size or CRC), continue LBT (again, if that's possible)

    That's why I was asking what would be the conditions, while waiting for automatic switch from RX to TX due to LBT algorithm, for the automatic switch to TX to be aborted (sync word ? bad packet ?). Hopefully I'm a bit more clear this time :)

  • I have done some more testing and also talked to the designer of the LBT algorithm and my statement in the last post is wrong. If you on a unit uses LBT and you

    a) have RXOFF_MODE = IDLE and you strobe STX

    or

    b) have RXOFF_MODE = TX

    you will send the data that is in your FIFO as soon as you have received an OK packet (while sniffing the channel). You can therefore risk that a packet is sent even if the channel is not clear.

    There are several things you can do avoid sending on an occupied channel:

    1) Set the sync threshold so that you cannot receive a sync word (not possible if you want to implement autoAck)

    2) Have an interrupt on packet received and strobe IDLE to abort the STX strobe, and start over again

    3) use RXOFF_MODE = RX on the unit using LBT. The radio will go back in RX after a packet is received and it will continue sniffing, not sending data before the channel is clear.

    Siri

  • Hi,

            We are testing LBT in CC1125. I'm testing my own custom Radio(CC1125 Transceiver). I starting jammer (STX storbe in RF Device Commands tab from Smart Studio7). I have monitored whether the packets are transmitting are not. As per the logic, control should stay inside RSSI Valid check loop but in this case Control is not staying in the RSSI valid loop (1st Do While). It exits from the 1st do while loop even the Jammer is ON. It seems to be I have not followed the correct procedure.

    Can anyone help me to solve this issue?

    I'm enclosing my program for your reference

    CC112X_RFEND_CFG1 = 0x0F;					            // RXOFF_MODE = IDLE
    CC112X_RFEND_CFG0 = 0x00;     						    // TXOFF_MODE = IDLE
    
    uc_TempReg = 12;                                                            //-90dBm
    cc112xSpiWriteReg(CC112X_AGC_CS_THR, &uc_TempReg, 1);			    // Setting Carrier Sense threshold
    uc_TempReg = 0x10;
    cc112xSpiWriteReg(CC112X_PKT_CFG2, &uc_TempReg, 1);			    // Setting CCA LBT
    
    
    // Packet filling to TXFIFO
    
    
    trxSpiCmdStrobe(CC112X_SRX);						    // Strobe RX
    
    //1st do while
    do									    // Wait for RSSI to be valid
    {
    	uc_TempRegRSSI0 = 0;
    	cc112xSpiReadReg(CC112X_RSSI0, &uc_TempRegRSSI0, 1);		    // Reading RSSI_0 register
       
    }while (!(uc_TempRegRSSI0 & 0x01));
    
    trxSpiCmdStrobe(CC112X_STX);                                                // Strobe TX to send packet
    
    //2nd do while
    do{                                                                         // Checking whether TX Finished Success or not
    
    	radiostatus = 0;        
    	cc112xSpiReadReg(CC112X_MARC_STATUS1, &radiostatus, 1);                 // Reading MARC STATUS
    
    	// ---------- TX SUCCESS DECLARATION ---------- //
    	if((radiostatus & 0x40) == TX_SUCCESS)
    	{
    		printf("\nTX SUCCESS",DEBUG_PORT);
    		break;
    	}
    
    	// ------------ TX ON CCA FAILED --------------//
    	if (radiostatus == 0x0B)            
    		printf("\n\t??? TX ON CCA FAILED ??? ",DEBUG_PORT);
    
    }while((radiostatus & 0x40) != TX_SUCCESS);				        // Waiting for TX Success
    
    

    Thanks in advance.

  • The first do while loop ensures that the RSSI is valid, nothing else. This to ensure that the correct RSSI is used to compare with the programmed CS threshold.

    In your case, does the radio actually send something when you apply a jammer?