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.

LAUNCHXL-CC1352R1: Issue Flashing Code with IEEE 802.15.4 Configuration with sysconfig

Part Number: LAUNCHXL-CC1352R1
Other Parts Discussed in Thread: SYSCONFIG

Tool/software:

i was asked to compare the power consumption in my CC1352R1 using sysconfig in code composer studio between 

  • 2.4 GHz Frequency Band (2440–2480 MHz)
    • 250 kbps, 62.5 kHz Deviation, MSK, 530 kHz RX Bandwidth
    • 250 kbps, 125 kHz Deviation, 2-GFSK, 530 kHz RX Bandwidth
    • 100 kbps, 50 kHz Deviation, 2-GFSK, 350 kHz RX Bandwidth
  • Sub-1 GHz Frequency Band (779–930 MHz)
    • 50 kbps, 25 kHz Deviation, 2-GFSK, 100 kHz RX Bandwidth
    • 200 kbps, 50 kHz Deviation, 2-GFSK, 311 kHz RX Bandwidth
    • IEEE 802.15.4, 50 kbps, 25 kHz Deviation, 2-GFSK, 100 kHz RX Bandwidth

everything was fine, until i have to flash the code with 

  • IEEE 802.15.4, 50 kbps, 25 kHz Deviation, 2-GFSK, 100 kHz RX Bandwidth.
  • 200 kbps, 50 kHz Deviation, 2-GFSK, 311 kHz RX Bandwidth

What different are, the default RF commands are now CMD_PROP_TX_ADV and CMD_PROP_RX_ADV. Because code composer keeps reminding me CMD_PROP_TX and CMD_PROP_RX are not defined. I select now CMD_PROP_TX and CMD_PROP_RX. and have to change Link Layer Max Packet Length from 2047 to 255. What i also changed from default setting, is that the TXpower from 14 to 5.  Otherwise the configuration could not be setted.

Now there is no error anymore when i try to flash. But the process always stop at 

if ((result != RF_EventLastCmdDone) || ((volatile RF_Op*)&RF_cmdPropTx)->status != PROP_DONE_OK)
{
while(1);
}
 
with a result = 2052. the code is 
Has anyone encountered a similar issue when working with this specific IEEE 802.15.4 configuration with sysconfig? Any guidance on why this might be happening or how to resolve it would be greatly appreciated.

Thank you for your help!

  • sorry,
    ignor those too lines
    RF_cmdPropTx.startTrigger.triggerType = TRIG_NOW; // 立即执行
    RF_cmdPropTx.startTrigger.pastTrig = 1;
  • Hello Xiaopeng,

    You are using the following commands for the IEEE version of the PHY correct?: (also which SDK is this on) 

     *      .RF_pCmdIeeeTx              = ?,
     *      .RF_pCmdIeeeRx              = ?,
    Thanks,
    Alex F
  • yes,because code composer can not build with CMD_PROP_TX_ADV and CMD_PROP_RX_ADV

  • Hello Xiaopeng Fan,

    I pulled the CC13xx/CC26xx example and it seems like what we will need to do here is fix the RF_CMDxxx to the IEEE versions:

    // RF Core API commands
    extern rfc_CMD_RADIO_SETUP_PA_t RF_cmdRadioSetup_ieee154_0;
    extern rfc_CMD_FS_t RF_cmdFs_ieee154_0;
    extern rfc_CMD_IEEE_TX_t RF_cmdIeeeTx_ieee154_0;
    extern rfc_CMD_IEEE_RX_t RF_cmdIeeeRx_ieee154_0;

    And since you are trying to use a IEEE PHY that is not available on syscfg we will need to bring in a local copy of the rcl_settings.c and rcl_settings.h while excluding the syscfg ti_radio_config.h. 

    Thanks,
    Alex F

  • i am using the rfSynchronizedPacketTx and Rx examples under TI Proprietary RF. If i fix the RF_CMDxxx to the IEEE versions manuelly, then i have errors when i try to compile 

    src/task_SynchronizedPacketTX.c:133:17: error: 'rfc_CMD_IEEE_TX_t' {aka 'struct rfc_CMD_IEEE_TX_s'} has no member named 'pktLen'
    133 | RF_cmdPropTx.pktLen = sizeof(message);
    | ^
    src/task_SynchronizedPacketTX.c:134:17: error: 'rfc_CMD_IEEE_TX_t' {aka 'struct rfc_CMD_IEEE_TX_s'} has no member named 'pPkt'
    134 | RF_cmdPropTx.pPkt = (uint8_t*)&message;
    | ^
    make: *** [Makefile:201: _build/src/task_SynchronizedPacketTX.o] Error 1

  • Hello Xiaopeng,

    Looking at the struct of the IEEE we need to change the pktLen to payloadLen, and pPkt to pPayload: 

    uint8_t payloadLen;                  //!<        Number of bytes in the payload
    uint8_t* pPayload;                   //!<        Pointer to payload buffer of size <code>payloadLen</code>
    #define CMD_IEEE_TX                                             0x2C01
    //! IEEE 802.15.4 Transmit Command
    struct __RFC_STRUCT rfc_CMD_IEEE_TX_s {
       uint16_t commandNo;                  //!<        The command ID number 0x2C01
       uint16_t status;                     //!< \brief An integer telling the status of the command. This value is
                                            //!<        updated by the radio CPU during operation and may be read by the
                                            //!<        system CPU at any time.
       rfc_radioOp_t *pNextOp;              //!<        Pointer to the next operation to run after this operation is done
       ratmr_t startTime;                   //!<        Absolute or relative start time (depending on the value of <code>startTrigger</code>)
       struct {
          uint8_t triggerType:4;            //!<        The type of trigger
          uint8_t bEnaCmd:1;                //!< \brief 0: No alternative trigger command<br>
                                            //!<        1: CMD_TRIGGER can be used as an alternative trigger
          uint8_t triggerNo:2;              //!<        The trigger number of the CMD_TRIGGER command that triggers this action
          uint8_t pastTrig:1;               //!< \brief 0: A trigger in the past is never triggered, or for start of commands, give an error<br>
                                            //!<        1: A trigger in the past is triggered as soon as possible
       } startTrigger;                      //!<        Identification of the trigger that starts the operation
       struct {
          uint8_t rule:4;                   //!<        Condition for running next command: Rule for how to proceed
          uint8_t nSkip:4;                  //!<        Number of skips + 1 if the rule involves skipping. 0: same, 1: next, 2: skip next, ...
       } condition;
       struct {
          uint8_t bIncludePhyHdr:1;         //!< \brief 0: Find PHY header automatically<br>
                                            //!<        1: Insert PHY header from the buffer
          uint8_t bIncludeCrc:1;            //!< \brief 0: Append automatically calculated CRC<br>
                                            //!<        1: Insert FCS (CRC) from the buffer
          uint8_t :1;
          uint8_t payloadLenMsb:5;          //!< \brief Most significant bits of payload length. Should only be non-zero to create long
                                            //!<        non-standard packets for test purposes
       } txOpt;
       uint8_t payloadLen;                  //!<        Number of bytes in the payload
       uint8_t* pPayload;                   //!<        Pointer to payload buffer of size <code>payloadLen</code>
       ratmr_t timeStamp;                   //!<        Time stamp of transmitted frame
    } __RFC_STRUCT_ATTR;
     
    Thanks,
    Alex F
  • thanks a lot for your answer, it inspired me to understand more about those parameters in the radio files.

    I have already found a solution about this question. Refering to the question "https://e2e.ti.com/support/wireless-connectivity/sub-1-ghz-group/sub-1-ghz/f/sub-1-ghz-forum/1415005/lp-cc1352p7-no-transmission-when-using-rf_cmdproptxadv" and the technical reference manul, i just edited the packet by adding one length byte and a whitening byte ,and also adjusting the TX RX codes for the packet. Because the strukturs of CmdIeee and CmdAdv have so many differences, i didnt dare to modify the command by myself.

    I have another question now, its understandable that default setting from "
    IEEE 802.15.4, 50 kbps, 25 kHz Deviation, 2-GFSK, 100 kHz RX Bandwidth." has to be CmdAdv. Because Ieee has a certain rule for packet. But why the dafault setting from "200 kbps, 50 kHz Deviation, 2-GFSK, 311 kHz RX Bandwidth" has also the CmdAdv? And why some of the normal ti-proprietary Setting use just normal command like "Sub-1 GHz Frequency Band (779–930 MHz)----50 kbps, 25 kHz Deviation, 2-GFSK, 100 kHz RX Bandwidth"? And some use Adv command? I dont see there is any significant differences between thoses Setting.

    Best wishes



  • Hello Xiaopeng,

    To give a little context depending on what underlying command headers the PHY is meant to be used with will change the commands we use in practice. For example IEEE have their own commands comparted to the generic commands, with that being said both commands will eventually use similar LRF commands at a low level. 

    I am not as familiar with sub-1 as I am with 2.4 GHz, however following the experience with 2.4 GHz we tend to use what commands the PHY was designed around, and quite often they do share many similarities. Sometimes we see differences between the internal command structure (ACK for example). 

    Thanks,
    Alex F