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.

CC1352P7: How to do a direct RSSI measurement without relying on the packet information? (SubGHz)

Part Number: CC1352P7
Other Parts Discussed in Thread: SYSCONFIG

Tool/software:

I am trying to develop an application which constantly listens to 900Mhz bands and register the received RSSI.

I know I can use something like "RSSIout = rxStatistics.lastRssi;", but (based on my current understanding of the TI architecture) the issue with this approach is the fact that this only shows the value of the RSSI for packets which passed the CRC check.
I want to find a way to register raw RSSI values regardless of their CRC status.

Is it possible to turn off the CRC using the sysconfig?

Is there any similar example?

  • To read the RSSI you can use the RF_getRssi function. See the RF driver documentation for details:

    Radio Software Bundle (rflib) APIs (ti.com)

    the read the RSSI, the radio needs to be in RX mode, meaning that you first have to issue an RX command.

    If the purpose is just to read the RSSI, without having to receive any packets, you should use the CMD_RX_TEST instead of the normal RX command.

    CRC cannot be turned off in sysConfig, so this must be set in the application:

    RF_cmdPropRx.pktConf.bUseCrc = 0x0;

    Siri

  • Thanks for your response, could you explain a bit more how I can issue a CMD_RX_TEST?

    I searched the TI resources and I was not able to find an API to issue a CMD_RX_TEST? What do you exactly mean by issuing this Macro?

     I have also found the MACRO's definition:

      285 #define CMD_RX_TEST                                             0x0807
      286 struct __RFC_STRUCT rfc_CMD_RX_TEST_s {
      288    uint16_t commandNo;                  
      289    uint16_t status;                     
      290    rfc_radioOp_t *pNextOp;              
      293    ratmr_t startTime;                   
      294    struct {
      295       uint8_t triggerType:4;            
      296       uint8_t bEnaCmd:1;                
      297       uint8_t triggerNo:2;              
      299       uint8_t pastTrig:1;               
      300    } startTrigger;                      
      302    struct {
      303       uint8_t rule:4;                   
      304       uint8_t nSkip:4;                  
      305    } condition;
      306    struct {
      307       uint8_t bEnaFifo:1;               
      308       uint8_t bFsOff:1;                 
      310       uint8_t bNoSync:1;                
      312    } config;
      314    struct {
      315       uint8_t triggerType:4;            
      316       uint8_t bEnaCmd:1;                
      317       uint8_t triggerNo:2;              
      319       uint8_t pastTrig:1;               
      320    } endTrigger;                        
      322    uint32_t syncWord;                   
      323    ratmr_t endTime;                     
      324 };


    However, I do not know in what API I should call this struct. I can only guess that it could be "RF_runCmd"?

    Also, based on the rfPacketRx.c example, it seems like I need to call a function like  RF_cmdTestRx but I am cannot find such a function.

    Could you please clarify a bit more?

    Thanks.

  • To use the command, you need to export it from sysConfig:

    You can use it as shown below:

    rxHandle = RF_postCmd(rfHandle, (RF_Op*)&RF_cmdRxTest, RF_PriorityNormal, NULL, 0);
    
        rssi= RF_GET_RSSI_ERROR_VAL;
        do
        {
            rssi = RF_getRssi(rfHandle);
        } while (rssi == RF_GET_RSSI_ERROR_VAL);
    
        RF_cancelCmd(rfHandle, rxHandle, 0);
    

    Siri

  • For the people who may want to develop a similar app and they do not have any experience with TI like myself:


    In addition to above, you need two more things:

    1) creating an rf handle object with rfHandle = RF_open(&rfObject, &RF_prop, (RF_RadioSetup*)&RF_cmdPropRadioDivSetup, &rfParams);
    2) next, calling the frequency synthesizer with RF_postCmd(rfHandle, (RF_Op*)&RF_cmdFs, RF_PriorityNormal, NULL, 0);


    I hope this could at least save some time of yours, that took me a while to figure out.