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.

[参考译文] CC1350:使用射频驱动器的 CC1350与 CC1350搭配使用时、同步接收/发送无法正常工作

Guru**** 2556760 points
Other Parts Discussed in Thread: CC1350

请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/wireless-connectivity/sub-1-ghz-group/sub-1-ghz/f/sub-1-ghz-forum/595250/cc1350-simultaneous-receive-transmit-not-working-with-cc1350-using-rf-driver

器件型号:CC1350

尊敬的支持:

我正在尝试获取一个同时发送和接收示例、这样我就可以接收数据包并解析数据包、并根据内容创建一个新的数据包并进行传输。  我使用的是运行 SDK1.30的 CC1350 LP。  我有自己的 CCS 项目、在该项目中、我使用 rfPacketRx 和 rfPacketTx 示例中的代码来创建一个可以接收和传输数据包的任务。  当我连续接收数据包时-没有问题。  我可以一遍又一遍地接收数据包、而不会出现任何问题。  当我反复传输数据包时-同样没有问题。  我在传输数据包时使用以下代码:

rf_cancelCmd (rfHandle、rfRxCmd、0);
RF_cmdPropTx.commandNo = CMD_PROP_TX;
rf_cmdPropTx.pkt=(uint8_t *) message.FramePtr;
RF_cmdPropTx.pktLen = message.FrameBytes;
rf_cmdPropTx.startTrigger.triggerType = trig_now;
RF_cmdPropTx.startTrigger.PastTrig = 1;
RF_cmdPropTx.StartTime = 0;
rfTxCmd = rf_postCmd (rfHandle,(rf_Op*)&rf_cmdPropTx,rf_PriorityNormal,NULL,0);
EventMask = RF_PendCmd (rfHandle、rfTxCmd、
(RF_EventCmdDone | RF_EventCmdError | RF_EventLastCmdDone | RF_EventCmdAborted | RF_EventCmdCancelled | RF_EventCmdStopped);

其中、我使用 RF_cancelCmd (...)取消之前的任何 rfRxCmd 然后在传输数据包之前更新 Tx 结构 RF_cmdPropTx、然后传输数据包。  我还使用了以下代码:

rf_cancelCmd (rfHandle、rfRxCmd、0);
RF_cmdPropTx.commandNo = CMD_PROP_TX;
rf_cmdPropTx.pkt=(uint8_t *) message.FramePtr;
RF_cmdPropTx.pktLen = message.FrameBytes;
rf_cmdPropTx.startTrigger.triggerType = trig_now;
RF_cmdPropTx.startTrigger.PastTrig = 1;
RF_cmdPropTx.StartTime = 0;
EventMask = RF_runCmd (rfHandle、(RF_OP*)&RF_cmdPropTx、RF_PriorityNormal、TxCallback、
IRQ_COMMAND_DONE | IRQ_LAST_COMMAND_DONE | IRQ_TX_DONE | IRQ_TX_entry_DONE);

在本例中、我使用传输回调来知道我成功传输了数据包、这也不是问题。  只要我反复传输-没有问题。  但是、如果我接收到一个数据包、然后在接收到该数据包后发送一个新数据包、并且它运行上面的代码、它永远不会传输该数据包、也不会传输 RF_PendCmd(...)中的任何一个块 在第1种情况下或 RF_runCmd (...) 在第2种情况下。  但是、数据包的接收过程仍然很顺利。  出于某种原因、在接收到数据包并调用上述代码后、我无法再传输任何数据包。  您知道我可能会出什么问题吗?  请提供建议。

或者、在进行同时发送和接收时、应遵循哪些正确的程序、以便数据包的传输不会像我在上述两种情况下遇到的那样被锁定?

谢谢、
Tim

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    你好、Tim

    我使用了 rfPacketRX 示例、并对其进行了修改、以便在每次接收到 CRC 正常的数据包时都发送一个数据包。
    我发送接收到的数据包的有效载荷。
    代码如下所示:

    static uint8_t rxPacket[MAX_LENGTH + NUM_SUBSCED_BYTES - 1];//长度字节存储在单独的变量中*/
    static uint8_t txPacket[MAX_LENGTH];
    
    static void rxTaskFunction (UARg arg0、UARg arg1)
    {
    rf_params rfParams;
    rf_params_init (&rfParams);
    
    if (RFQueue_defineQueue (&dataQueue、
    rxDataEntryBuffer、
    sizeof (rxDataEntryBuffer)、
    num_data_entries、
    max_length + NUM_apped_bytes))
    {
    /*未能为所有数据条目分配空间*/
    while (1);
    }
    
    /*根据应用需求修改 CMD_PROP_RX 命令*/
    RF_cmdPropRx.pQueue =&dataQueue; /*为接收的数据设置数据实体队列*/
    rf_cmdProprx.rxConf.bAutoFlushIgnored = 1;//丢弃来自 Rx 队列的已忽略的数据包*
    rf_cmdProprx.rxConf.bAutoFlushCrcErr = 1;//丢弃来自 Rx 队列的 CRC 错误数据包*/
    RF_cmdPropRx.maxPktLen = MAX_LENGTH; /*实施数据包长度过滤以避免 PROP_ERROR_RXBUF */
    RF_cmdPropRx.pktConf.bRepeatOk = 0; /*如果接收到良好的数据包,则退出 RX */
    rf_cmdPropRx.pktConf.bRepeatNok = 1;
    
    RF_cmdPropTx.pPktt = txPacket;
    rf_cmdPropTx.startTrigger.triggerType = trig_now;
    
    /*请求对讲机的访问*/
    rfHandle = RF_OPEN (&rfObject、&RF_prop、(RF_RadioSetup*)&RF_cmdPropRadioDivSetup、&rfParams);
    
    /*设置频率*/
    rf_postCmd (rfHandle、(rf_Op*)&rf_cmdf、rf_PriorityNormal、NULL、0);
    
    while (1)
    {
    rxCmdHalf = rf_postCmd (rfHandle、(rf_Op*)&rf_cmdPropRx、rf_PriorityNormal、NULL、0);
    rf_pendCmd (rfHandle、rxCmdHnle、rf_EventLastCmdDone);
    
    currentDataEntry = RFQueue_getDataEntry();
    
    电池组长度 =*(uint8_t*)(&currentDataEntry->data);
    packetDataPointer =(uint8_t*)(&currentDataEntry->data+1);
    memcpy (rxPacket、packetDataPointer、(packetLength + 1));
    
    RFQueue_nextEntry();
    
    memcpy (txPacket、rxPacket、(packetLength + 1));
    
    rf_cmdPropTx.pktLen =电池组长度;
    
    txCmdHalf = rf_postCmd (rfHandle、(rf_Op*)&rf_cmdPropTx、rf_PriorityNormal、NULL、0);
    rf_pendCmd (rfHandle、txCmdHnle、rf_EventLastCmdDone);
    }
    } 

    希望这对您有所帮助

    BR

    Siri

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    嗨、Siri:

    感谢您的回复。  我重复了您所做的工作、并使其正常工作。  我可以看到的唯一区别 是支持事件的信标和除代码外还使用的邮箱。  我将尝试隔离问题、并尝试确定代码出现的问题。  感谢您为我提供了一个简单的示例、它可以正常工作、并允许我测试已知的工作参考。  稍后我将向您介绍我发现的内容。

    谢谢、
    Tim

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    你好、Tim

    真幸运你调试了:-)
    如果您无法启动并运行代码、您可以向我们发送完整的代码、以便我们可以在此处查看。 最简单的方法是向我们发送一个.c 文件、我们可以用该文件替换 rfPacketRX.c 文件。

    BR
    Siri