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:专有无线电无阻塞接收

Guru**** 2563960 points
Other Parts Discussed in Thread: CC1352R

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

https://e2e.ti.com/support/wireless-connectivity/sub-1-ghz-group/sub-1-ghz/f/sub-1-ghz-forum/917629/cc1352r-proprietary-radio-non-blocking-receiving

器件型号:CC1352R


您好!

我的项目从配置阶段开始。 在此阶段、安装 cc1352R 器件的电路板会在开始时等待20秒、等待一些配置数据包。 如果没有配置数据包、它将更改其射频操作链(从 RX-TX 到 TX-RX)、并发送包含 IMU、ADC 和其他传感器数据的数据包。 为此、我在 while (1)中编写了以下代码:

/*发送数据包*/
if (configurationPhase =0){
//配置阶段结束
终端 Reason =
rf_runCmd (rfHandle、(rf_Op*)&rf_cmdPropTx、rf_PriorityNormal、
sensorBoardRFCallback、(RF_EventCmdDone | RF_EventRxEntryDone |
RF_EventLastCmdDone | RF_EventRxNOk));
} 否则、如果(配置阶段= 1){
//仍处于配置阶段
终端 Reason =
rf_postCmd (rfHandle、(rf_Op*)&rf_cmdPropRx、rf_PriorityNormal、
sensorBoardRFCallback、(RF_EventCmdDone | RF_EventRxEntryDone |
RF_EventLastCmdDone | RF_EventRxNOk));
} 

sensorBoardRFCallback 将对接收到的数据包进行反序列化、并根据其性质创建正确的响应。

我想的是:如果没有接收到的数据包、电路板就不会执行任何操作。 20秒后开始发送一些具有有效载荷的数据包。

但我注意到代码冻结、所以我从 RF_cmdPropRx 读取 terminationReason 和 cmdStatus、获取 cmdStatus = 2、这意味着操作尚未完成? (根据 TRM 第2040页表25-182)
如果是、我如何解决此问题?  

此致、
Vincenzo

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

    我指派了一名专家发表意见。

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

    当我不知道您如何设置 RX 和 TX 命令、您使用的启动触发器和结束触发器以及您如何配置链时、无法回答您的问题。 如果您希望我们对此进行研究、请提供更多信息。

    最好的一点是、您可以使用 rfPacketRX 或 rfPacketTX 示例并对其进行修改、以说明您看到的问题。 这样、我们就可以在这里重现它、并且更容易提供帮助。 您不必添加所有传感器代码等 只需发送虚拟数据包、但按照应用程序中的方式设置无线电命令

    Siri

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

    您好、Siri、  

    感谢您的回复。 设置如下:  

    static rf_handle configureRFChain (struct rfc_cmd_prop_tx_s* rfCmdTx、struct rf_cmd_RX_s* rfCmdRx、rf_Params* rfParams、uint8_t nextOp){
    
    RF_Handle RFH;
    rfCmdRx->pQueue =&dataQueue; /*为接收的数据设置数据实体队列*/
    rfCmdRx->rxConf.bAutoFlushIgnored = 1;/*丢弃来自 Rx 队列的被忽略的数据包*/
    rfCmdRx->rxConf.bAutoFlushCrcErr = 0;//丢弃来自 Rx 队列的 CRC 错误数据包*/
    rfCmdRx->pktConf.bRepeatOk = 0; /*正确接收数据包后结束操作*/
    rfCmdRx->pktConf.bRepeatNok = 1; /*接收到 CRC 错误的数据包后返回同步搜索*/
    
    
    if (nextOp = RX_TX_CHARG){
    
    /*射频链 RX-TX */
    rfCmdRx->maxPktLen = sizeof (rxSetConfig); /*实施数据包长度过滤以避免 PROP_ERROR_RXBUF */
    
    rfCmdRx->startTrigger.triggerType = trig_now;
    rfCmdRx->EndTime = RX_TIMEOUT;
    rfCmdRx->pNextOp =(RFC_radioOP_t *)&rfCmdTx;
    rfCmdRx->condition.rule = COND_STOP_ON_FALSE;//仅在 RX 成功时运行 TX 命令*/
    rfCmdRx->pOutput =(uint8_t *)&rxStatistics;
    
    rfCmdTx->pktLen = sizeof (txPacketAck);
    rfCmdTx->pPktt = txDataAck;
    rfCmdTx->startTrigger.triggerType = trig_REL_PREVEND;
    rfCmdTx->StartTime = TX_DELAY;
    
    } 否则、如果(nextOp = TX_RX_CHAING){
    
    /*射频链 TX-RX *
    rfCmdTx->pktLen = sizeof (streamUnit);
    rfCmdTx->pPktt = packet_TX;
    rfCmdTx->StartTime = 0;
    rfCmdTx->startTrigger.PastTrig = 1;
    rfCmdTx->startTrigger.triggerType = trig_now;
    
    rfCmdTx->pNextOp =(RFC_radioOP_t *)&RF_cmdPropRx;
    rfCmdTx->condition.rule = COND_STOP_ON_FALSE;//仅在 TX 成功时运行 RX 命令*/
    
    rfCmdRx->maxPktLen = sizeof (rxUnit); /*实施数据包长度过滤以避免 PROP_ERROR_RXBUF *//最大 paket 长度
    rfCmdRx->pOutput =(uint8_t *)&rxStatistics;
    rfCmdRx->endTrigger.triggerType = trig_REL_PREVEND;//接收操作将在命令启动后结束 RX_TIMEOUT ms */
    rfCmdRx->EndTime = RX_TIMEOUT;
    
    }
    /*请求对讲机的访问*/
    RFH = RF_OPEN (&rfObject、&RF_prop、(RF_RadioSetup*)&RF_cmdPropRadioDivSetup、rfParams);
    
    /*设置频率*/
    RF_postCmd (RFH、(RF_OP*)&RF_cmdF、RF_PriorityNormal、NULL、0);
    
    返回 RFH;
    
    } 


    正如我在上面解释过的、我希望根据需要切换链条。 在开始时、这是一个 RX-TX 链操作、20秒后它变成了一个 TX-RX。
    要执行此开关:

    if (configuartPhase=0){
    
    RF_Close (rfHandle); /*加载要发送的新数据包*/ loadPacket (&streamUnit、macAddress、&accelAvg、&gyroAvg、&magAvg、 &tempAvg、&adc0Avg、&adc1Avg、&bqData); rfHandle = configureRFChain(&RF_cmdPropTx、&RF_cmdPropRx、&rfParams、TX_RX_chain); packet_TX[0]=(uint8_t)(seqNumber >> 8); packet_TX[1]=(uint8_t)(seqNumber++); memcpy ((void *)&packet_TX[2]、&streamUnit、sizeof (streamUnit)); }


    我将尝试您在 rfPacketRX 演示中建议的测试
    此致、  
    Vincenzo

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

    很抱歉、我无法发现您的代码可能存在什么问题。 为了更轻松地进行调试、您可以尝试使用两个不同的 RX 命令和两个不同的 TX 命令(在 RX 上、每个链一个 TX 上)来更好地跟踪正在发生的情况。

    那么、弄清导致问题的链会更容易

    BR

    Siri