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.

CC1352R: IEEE auto-ack enable

Part Number: CC1352R

Hello,

I activated the auto-ack functionality by setting the bit "autoAckEn" to 1 (and "slottedAckEn" to 0 ) but it's not working as I expect.

Indeed, it seems that no ack are sent by my CC1352R even if correct data frames are received (and conditions described in section 25.5.4.1.3. of the datasheet are met)

For example :

I received 10 correct RxData frames in my radio buffer and in the output field of the IEEE Rx commands the counter "nRxData" is equal to 10

But the "nTxAck" counter is equal to 0 (should be equal to 10 ?) and I don't see any "ACK" on my sniffer.

Is there something missing in my configuration (in addition to "autoAckEn" bit)?

Thank you for your help

Environment

LAUNCHXL-CC1352R1

sdk 2.10.00.48

  • Hello antoine,

    What PHY are you using and give an overall explanation of your setup?
    Can you give also give me an example of a packet?

    Regards,
    AB
  • Hello,

    I find my mistake for the auto-ack, I aborted too early the Rx command after the end of frame reception, so the ACK was never transmited.

    But I still have an issue with the ACK frame.

    Indeed I do not received the ACK frame with the IEEE 802.15.4 Receive Ack Command. I tried to do a chained command "IEEE Tx" (s_RF_cmdIeeeTx) + "IEEE receive ACK command" (s_RF_cmdIeeeTxAck), the message is correctly sent but the ACK frame is never received.

    After the execution of the "RF_runCmd", the field "status" of the "s_RF_cmdIeeeTx" command is equal to 0x0806  and the field "status" of the "s_RF_cmdIeeeTxAck" command is equal to 0x00. What does these status value mean ? There is no "define" for these values....

    FYI I also tried a chained command "IEEE Tx" (s_RF_cmdIeeeTx) + "IEEE receive command" and I received ACK frames but It seems that some ACK are not received and I would prefer to use "IEEE receive ACK command".

    What do you suggest ? Is there a mistake in my configuration ?

    Thank you for your help

    Code snippet :

    /* CMD_IEEE_RX_ACK
       IEEE 802.15.4 Receive Ack Command */
    rfc_CMD_IEEE_RX_ACK_t s_RF_cmdIeeeTxAck =
    {
        .commandNo                  = CMD_IEEE_RX_ACK,
        .status                     = IDLE,
        .startTrigger               =
        {

            .bEnaCmd                = 0x0,
            .triggerNo              = 0x0,
            .triggerType            = TRIG_NOW,
            .pastTrig               = 0,
        },
        .endTrigger                 =
        {
            .triggerType            = TRIG_REL_START,
            .pastTrig               = 0,
            .bEnaCmd                = 0x0,
            .triggerNo              = 0x0,
        },
        .condition                  = {
            .rule                   = COND_NEVER,
            .nSkip                  = 0,
        },
        .pNextOp                    = NULL,
        .seqNo                      = P_s_buffer_to_send->options_dsn,
        /* number of RAT ticks to wait before claiming we haven't received an
         * ack
         */
        .endTime                    =  RF_convertUsToRatTicks(1500),
    };

    /* CMD_IEEE_TX
     IEEE 802.15.4 Transmit Command */
    rfc_CMD_IEEE_TX_t s_RF_cmdIeeeTx =
    {
        .commandNo = 0x2C01,
        .status = 0x0000,
        .pNextOp =(RF_Op*)&s_RF_cmdIeeeTxAck,
        .startTime = 0x00000000,
        .startTrigger.triggerType = TRIG_NOW,
        .startTrigger.bEnaCmd = 0x0,
        .startTrigger.triggerNo = 0x0,
        .startTrigger.pastTrig = 0x0,
        .condition.rule = COND_STOP_ON_FALSE,
        .condition.nSkip = 0x0,
        .txOpt.bIncludePhyHdr = 0x0,
        .txOpt.bIncludeCrc = 0x0,
        .txOpt.payloadLenMsb = 0x0,
        .payloadLen = BUFFER_SIZE,
        .pPayload = u8_bufferToSend_A,
        .timeStamp = 0x00000000,
    };

     /* if transmit command failed do not wait ACK */
            s_RF_cmdIeeeTx.condition.rule = COND_STOP_ON_FALSE;

            s_RF_cmdIeeeTxAck.seqNo = P_s_buffer_to_send->options_dsn;
            s_RF_cmdIeeeTxAck.endTime = RF_convertUsToRatTicks(1500);
            s_RF_cmdIeeeTxAck.endTrigger.triggerType = TRIG_REL_START;
            s_RF_cmdIeeeTxAck.startTime = TRIG_NOW;
            s_RF_cmdIeeeTxAck.condition.nSkip = 0;
            s_RF_cmdIeeeTx.pNextOp = (RF_Op*)&s_RF_cmdIeeeTxAck;

            /* just after tx command, Rx command shall be send in order to receive ACK frame */
           // s_RF_cmdIeeeRx.endTrigger.triggerType = TRIG_REL_START;
            //s_RF_cmdIeeeRx.endTime = RF_convertUsToRatTicks(MAC_RX_TIME_TICKS*32); /* Timeout to receive ACK frame */
            //s_RF_cmdIeeeTx.pNextOp = (RF_Op*)&s_RF_cmdIeeeRx;

            /* Run Tx + Rx ACK chained command */
            L_s_RFCmdResult = RF_runCmd(s_24GhzRfHandle, (RF_Op*)&s_RF_cmdIeeeTx, RF_PriorityHigh, &RxCallback2_4Ghz, RF_EventRxOk | RF_EventMdmSoft);

    Environment

    LAUNCHXL-CC1352R1

    sdk 2.10.00.48

    2.4Ghz IEEE 802.15.4

  • Hello Antoine,

    It is hard for me to debug this as this looks to be a stack level problem. What I can do tell you is that 0x0806 command means that "Foreground level operation is not compatible with running background level operation" and 0x00 is "IDLE". I suggest trying to play around with the settings in your command structure and see how this affects the behaviour. See page1645 of the technical reference manual for description of the status byte of the command. www.ti.com/.../swcu117h.pdf

    Regards,
    AB
  • Hello,

    I am not sure to understand what does "Foreground level operation is not compatible with running background level operation" mean ?

    The command "IEEE receive ACK command" has alreadly been tested by TI ? Is there an example which uses this command chained with a Tx command ?

    Regards,

  • Hello,

    What this could mean is that you cannot send that command while there is an radio operation running at the same time.

    As an example using this command, I am sorry we do not have one at the moment.

    Regards,
    AB