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 and LBT feature

Other Parts Discussed in Thread: CC1120, CC1120EM-169-RD

Hello,

I was trying to understand how Listen Before Talk works in CC1120...

By reading the User's guide (swru295), chapter 5.15 (CCA - clear channel assessment) I think to understand that LBT is
a "sub-function" of the CCA feature.
In CCA description I read:

"When the 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. 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."

So, It seems that also LBT (one of the five CCA mathods) follows the rule above... Is it right?

On chapter 5.15 (Listen Before Talk) I read:

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

Does it mean that
    - I have to give a TX strobe command to start the LBT algorithm, then
    - I have to check the CCA state until I can resend the TX strobe command (as CCA method requires), then
    - the message is sent immediately, without waiting another "Listen Time", and
    - only after successful (start of?) transmission the LBT algorithm "resets" and the next TX will restart it
Or that the chip starts automatically the transmission at the end of the LBT Minimum Listening Time?

Thank you very much

Nicola

  • Hi Nicola

    When using LSB (PKT_CFG2.CCA_MODE = 100b) and strobing STX (while in RX) the radio will transmit the packet when the channel becomes available without having to strobe STX over again. This is not the case for the other CCA modes (where TX manually has to be strobed again if the channel is busy). We will try to clarify this in the next revision of the user guide.

    BR

    Siri

  • Thank you very much Siri!

    When STX is strobed and the channel is not available, the radio remains in RX (I suppose), so asking the status byte, I should get "RX mode";
    There is a way to get from the CC1120 the information that the radio is in fact in a "RX but waiting for TX" state?

    P.S:
    I think that in the user's guide a table with the detailed description of all the registers should be
    useful, too (to avoid opening SmartRfStudio every time an information is needed)...
    When do you think that the "official" releases of user guide and CC1120 datasheet will be available?

    Thank you

    Nicola

     

  • Hello,

    anybody knows?

    I have another (related) question:
    If I program the CC1120 to use LBT feature, then send a TX command strobe when the radio channel is busy, CC1120 remains in RX "waiting for TX" state;
    if I want to abort the transmission (by timeout, for example) and "remain" in RX, and the transmission is not yet started
    (so the CC1120 is already in "RX but waiting for TX" mode), what should I do? Is it enough to send an RX command strobe to abort the transmission?


    Thank you

    Nicola

  • Hi Nicola

    Unfortunately it is not possible to distinguish between RX state and "RX waiting for TX state". Regarding register settings and the user guide I think the plan is to make a separate pdf document with all the register descriptions in it. I do not know when this document will be available.

    BR

    Siri

     

  • Hi again

    I do not think you can just strobe RX over again as the CCA_MODE will still be 4. This register field should not be changed while in active mode, so what you need to do is to strobe IDLE, change CCA_MODE and then strobe SRX over again.

    BR

    Siri

     

  • Hi Siri,

    Thank you for the explanation.

    So it is the CCA_MODE = 04 that keeps the transmission "in queue"... LBT transmission is canceled just after changing CCA_MODE to any value other than 4, right?

    Thank you

    Nicola

  • Hi

    Just note that CCA_MODE cannot be changed unless the radio is in IDLE state.

    BR

    Siri

  • Hi,

    Are RXFIRST, RXLAST, TXFIRST and TXLAST registers writeable only in IDLE state?

    I'm sorry, but I was not able to find any info about this on user's manual...

    Thanks

    Nicola

  • Hi Nicola

    These registers should only be written in IDLE. The only register fields that can be changed in other states are the following:

    SETTLING.FS_AUTOCAL  

    RFEND_CFG1.RXOFF_MODE

    RFEND_CFG0.TXOFF_MODE

    PKT_CFG0.LENGTH_CONFIG

    PKT_LEN.PACKET_LENGTH

    PKT_CFG0.PKT_BIT_LEN

    BR

    Siri

     

  • Hi all,

    I've made some tests with CC1120 and noted that the CARRIER_SENSE response time measured with my test system (that uses two CC1120EM-169-RD modules) is too high to make LBT working properly.

    In my tests I transmit a series of packets at 9600bps data rate with 4-GFSK modulation, 255 bytes length with variable length mode active, CRC calculation enabled, +6dbm output power.

    The configuration of the CC1120 on both radios is the following (I reported only the registers that SmartRF studio says that differ from default setting):

    #define RADIO_CONF_IOCFG3            0xB0
    #define RADIO_CONF_IOCFG2            0xB0
    #define RADIO_CONF_IOCFG1            0xB0
    #define RADIO_CONF_IOCFG0            0xB0
    #define RADIO_CONF_SYNC_CFG1         0x08
    #define RADIO_CONF_DEVIATION_M       0x11
    #define RADIO_CONF_MODCFG_DEV_E      0x2A
    #define RADIO_CONF_DCFILT_CFG        0x56
    #define RADIO_CONF_PREAMBLE_CFG1     0x20
    #define RADIO_CONF_PREAMBLE_CFG0     0x35
    #define RADIO_CONF_FREQ_IF_CFG       0x3D
    #define RADIO_CONF_IQIC              0xCE
    #define RADIO_CONF_CHAN_BW           0x4D
    #define RADIO_CONF_MDMCFG0           0x05
    #define RADIO_CONF_DRATE2            0x63
    #define RADIO_CONF_AGC_CS_THR        0x06
    #define RADIO_CONF_AGC_CFG1          0x2D
    #define RADIO_CONF_AGC_CFG0          0x5F
    #define RADIO_CONF_FIFO_CFG          0x00
    #define RADIO_CONF_SETTLING_CFG      0x03
    #define RADIO_CONF_FS_CFG            0x1A
    #define RADIO_CONF_PKT_CFG2          0x10
    #define RADIO_CONF_PKT_CFG0          0x20
    #define RADIO_CONF_RFEND_CFG1        0x3F
    #define RADIO_CONF_RFEND_CFG0        0x30
    #define RADIO_CONF_PA_CFG2           0x6F
    #define RADIO_CONF_PA_CFG0           0x5C
    #define RADIO_CONF_PKT_LEN           0xFF
    #define RADIO_CONF_IF_MIX_CFG        0x00
    #define RADIO_CONF_FREQOFF_CFG       0x24
    #define RADIO_CONF_FREQ2             0x69
    #define RADIO_CONF_FREQ1             0xA0
    #define RADIO_CONF_FS_DIG1           0x00
    #define RADIO_CONF_FS_DIG0           0x5F
    #define RADIO_CONF_FS_CAL1           0x40
    #define RADIO_CONF_FS_CAL0           0x0E
    #define RADIO_CONF_FS_DIVTWO         0x03
    #define RADIO_CONF_FS_DSM0           0x33
    #define RADIO_CONF_FS_DVC0           0x17
    #define RADIO_CONF_FS_PFD            0x50
    #define RADIO_CONF_FS_PRE            0x6E
    #define RADIO_CONF_FS_REG_DIV_CML    0x14
    #define RADIO_CONF_FS_SPARE          0xAC
    #define RADIO_CONF_FS_VCO0           0xB4
    #define RADIO_CONF_XOSC5             0x0E
    #define RADIO_CONF_XOSC1             0x01

    I get 15 milliseconds from begin of transmission until CARRIER_SENSE signal goes active, with the settings above; only lowering RSSI_VALID_CNT to zero I obtain about 4 milliseconds (oddly, setting RSSI_VALID_CNT to 1 I obtain about 1.5 milliseconds... I suppose the maximum time could vary).

    I think these values are too high for proper operation of LBT: suppose two radios are waiting that the channel is free to transmit; when the channel becomes free, both listens the channel for 5ms + [random time between 0 and 5ms, 0.5ms step], as per LBT specification; but with CARRIER_SENSE delay times of more than 5 ms, one of the two radios will surely see the channel as free when the other one has already started to transmit (and will transmit over, making a collision).

    In my opinion, for LBT to work well, CARRIER_SENSE response time should be less than 0.5ms (the time step used in LBT time calculation); with my test setup I am very far from 0.5ms.

    Is there a way to lower these CARRIER_SENSE response times?

    Thanks

    Nicola

  • Anybody knows?