CC2340R5: clear channel assess using proprietary radio

Part Number: CC2340R5

Tool/software:

without necessarily receiving a packet, i want to simply detect "energy" on a particular channel....  assume my transmitter is simply sending an unmodulated carrier....

do i simply "turn on" the receiver for this channel and call something like LRF_readRssi() as some rate for some interval???

  • Hi,

    without necessarily receiving a packet, i want to simply detect "energy" on a particular channel....  assume my transmitter is simply sending an unmodulated carrier....

    Yes, the RCL_readRssi function (which ends up calling LRF_readRssi) should be sufficient for that purpose.

    do i simply "turn on" the receiver for this channel and call something like LRF_readRssi() as some rate for some interval???

    Prior to calling RCL_readRssi, there must be an active RX command submitted.

    Relevant post here: https://e2e.ti.com/support/wireless-connectivity/bluetooth-group/bluetooth/f/bluetooth-forum/1401794/lp-em-cc2340r5-lp-em-cc2340r5/5377607#5377607

    Thanks,
    Toby

  • it did seem to work...

    in the post you referenced, there appeared to be a 1ms delay before reading the RSSI.... i'll experiment, of course, but what's the actual time until the receiver is fully capable???

    also, since i have no interest in receiving a packet, could i simply set a "hard stop time" for the RX operation and then read the last RSSI value....  i want to do this "sniff" operation as quickly as possible, with as little involvement from the CPU as possible....

    referring back to the post you referenced, could i simply instruct the RX command to stop after 1ms???

  • i can certainly get the RX command to stop after 1ms....  once it's done, however, LRF_readRssi() returns the same "wrong" value indicating the receiver is not active,,,,  i tried reading PBE_GENERIC_RAM_O_LASTRSSI, but no real meaningful information there either; i couldn't determine when the receiver detected energy or not....

    basically, i'm trying to simply "sniff" for energy using generic RX....  is there some other register that would hold the last "raw" RSSI value seen by the receiver???

  • in the post you referenced, there appeared to be a 1ms delay before reading the RSSI.... i'll experiment, of course, but what's the actual time until the receiver is fully capable???

    This is indicated by SYNTHCALTIMEOUT, which by default is 0xB4 * 0.25usec == 45usec.
    In practice, I'd add some margin to it. I waited about 85usec in my previous testing:

    #include <ti/devices/cc23x0r5/driverlib/hapi.h>
    
    // ...
    
    #define RSSI_CONST_WAIT_USEC (85)
    
    // ...
    
    RCL_Command_submit(rclHandle, &rxCmd);
    
    HapiWaitUs(RSSI_CONST_WAIT_USEC);
    rssi = RCL_readRssi();

    basically, i'm trying to simply "sniff" for energy using generic RX....  is there some other register that would hold the last "raw" RSSI value seen by the receiver???

    Your observation is expected behavior. RSSI is only valid while the RX is active.

    If no packets are required for this process, the application can:

    1. Configure the RX command to discard any packet it receives (RCL_CMD_GENERIC_RX_t config.discardRxPackets)
    2. Configure the RX command to ignore all syncwords (RCL_CMD_GENERIC_RX_t config.disableSyncA / disableSyncB)