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.

[参考译文] CC1352P:循环生成 RF_op 链

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

https://e2e.ti.com/support/wireless-connectivity/sub-1-ghz-group/sub-1-ghz/f/sub-1-ghz-forum/1625286/cc1352p-looping-a-chain-of-rf_op

器件型号: CC1352P

我有一个使用 RF_runCmd 的有效解决方案、用于执行 TX 链-> RX 链-> DONE。  在链迭代之间、我更新时序和 TX 内容并重复该链。 我的帧末尾有一些停机时间、而 RX 的 EndTime 也有一个“软软“因素。  

在下面的迹线中、CH1/黄色为 PA/TX、CH2/蓝色 为 LNA/RX。 我在帧的末尾失去了大约 600 us。 该迹线显示了链的末端 RX、后跟下一个帧 TX、该帧大约需要 80 μ s。  

我的“软糖系数“如下(–200)  

rf_ctx.RF_cmdPropRx->endTrigger.triggerType = TRIG_REL_FIRSTSTART;
rf_ctx.RF_cmdPropRx->endTime = RF_convertUsToRatTicks(PACKET_INTERVAL_US(radio_cfg) *
(radio_cfg.numMasters+radio_cfg.numNotMasterSlots)-200);

最近、我尝试环回链 (((TX -> RX)->(TX -> RX)->...)、现在我的回调没有触发。 我出于好奇使用了一个 Temboo 代理,遇到了这个问题,但没有得到引用的文档来源。  

RF 驱动程序不会为使用 RF_postCmd () 的循环链中的命令生成 RF_EventCmdDone 回调。 这是 TI 射频驱动器处理无限循环的基本限制。

根据我查看过的 TI 文档和示例、  回调通知不支持真无限循环链 。 射频驱动程序仅在以下情况下生成事件:

  1. 链终止 (RF_EventLastCmdDone)
  2. 命令在非循环链中完成
  3. 使用 RF_runCmd ()(分块,同步)

基本问题: 当 RX.pNextOp 指向 TX 时、射频驱动程序将此视为从不完成的单个“超级命令“、因此不会触发完成事件。

第一、这是真的吗?

否则,什么是最有效的方式挤压出一个框架?  
这是我最简单的连锁店。 我还有其他设备可以监听、更改频率、然后通话或监听、更改频率、通话、监听、更改频率。 我想对所有 3 个进行迭代。 死区时间会导致帧中稍后发生一些数据丢失。  

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

    我的图像似乎没有出现。 想象一下、RX/LNA 结束时有一个 600us 的间隙、TX/PA 开始时有一个 80us 的间隙。


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

    尊敬的 Mike:

    我认为 E2E 和附件现在存在问题。 我期待它很快就会被修复。

    我已经绕过阿瑟,他以前支持你,但他正在旅行本周。 他可能无法回到你,直到下周。

    谢谢、

    Marie H

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

    谢谢 Arthur。 TX/RX 转换之间有哪些开关时间?  

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

    尊敬的 Mike:

    从之前的结果来看、我得到了大约 180us:

    使用 rcore 链从 TX -> RX 转换大约需要 80us(对于 1mbps PHY):

    此致、

    Arthur

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

    再次感谢阿瑟。双缓冲器/链/乒乓球有助于减少 180 我们吗?  

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

    有没有办法我可以打开一个私人票,并发送我的申请审查? 我无法降到 180us。 我删除了我的“软糖系数“、然后降低到 560 μ s、这是一个小的改进。 然后我移除了我的有效载荷打包、帧计数、RAT 比较停止/启动、发布了一个信标和一个小型 UART 传输、我现在到 280us。 我似乎需要考虑使用 POST 命令并在等待回调时调度这些事件。  

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    已切换到 postCmd 并将有效载荷打包移动到另一个任务中。 我在信标上挂起,所以我能够删除 task_yield ()。 我看到帧结束时大约 250us、从最后一个帧/链的 RX 到下一个帧/链的 TX是最简单的/主链,所以我想我至少可以到达看到的 180 我们. 我想知道为什么 rx->EndTime 会出现一些。  
     
    我似乎不能在这里发布我的代码片段格式,所以这里有一些在丑陋的常规文本!  
    // setup -
    /* chain 1: TX->RX (no condition) */
    rf_ctx.RF_cmdPropTx->pNextOp = (rfc_radioOp_t*)rf_ctx.RF_cmdPropRx;
    rf_ctx.RF_cmdPropTx->condition.rule = COND_ALWAYS;
    
    rf_ctx.RF_cmdPropRx->startTrigger.triggerType = TRIG_NOW;
    rf_ctx.RF_cmdPropRx->endTrigger.triggerType = TRIG_REL_FIRSTSTART;
    rf_ctx.RF_cmdPropRx->endTime = RF_convertUsToRatTicks(PACKET_INTERVAL_US(radio_cfg) *
    (radio_cfg.numBaseStations+radio_cfg.numSlaveSlots));
    rf_ctx.RF_cmdPropRx->pNextOp = NULL;
    
    txtime = RF_getCurrentTime();
    mac_stats.frameCnt = 0;
    hop_count = 0;
    scheduleReset(0);
    
    txtime += RF_convertUsToRatTicks(PACKET_INTERVAL_US(radio_cfg)*(radio_cfg.numBaseStations+radio_cfg.numSlaveSlots));
    rf_ctx.RF_cmdPropTx->startTime = txtime; // schedule TX at the beginning of frame
    
    // loop (uartDataReady is always true on this test) -
    
    if (uartDataReady) {
    // executes chain: TX (1 slot) -> RX (n-1 slots)
    RF_postCmd(rfHandle, (RF_Op*)rf_ctx.RF_cmdPropTx, RF_PriorityNormal,
    &masterCallback, (RF_EventRxEntryDone | RF_EventLastCmdDone));
    } else { // skip to RX
    RF_postCmd(rfHandle, (RF_Op*)rf_ctx.RF_cmdPropRx, RF_PriorityNormal,
    &masterCallback, (RF_EventRxEntryDone | RF_EventLastCmdDone));
    }
    
    // The following is all executing while the radio TX is firing
    // This was over 300 us of MCU time (payload packing was moved to other thread)
    txtime += RF_convertUsToRatTicks(PACKET_INTERVAL_US(radio_cfg)*(radio_cfg.numBaseStations+radio_cfg.numSlaveSlots));
    rf_ctx.RF_cmdPropTx->startTime = txtime; // schedule TX at the beginning of frame
    
    uartDataReady = false;
    mac_stats.frameCnt++;
    GPIO_write(CONFIG_GPIO_LED_TX, 0);
    
    Stop_Slot_Timer_RAT();
    Semaphore_post(slotSem); // Post semaphore as this is the beginning of slot zero
    Restart_Slot_Timer_RAT(PACKET_INTERVAL_US(radio_cfg));
    
    sendRadioChannelSyncInfo(sync_bmp);
    sync_bmp = 0;
    
    // Wait for the end of frame before returning
    Semaphore_pend(EndFrameSem, BIOS_WAIT_FOREVER);
    
    // callback -
    else if(e & RF_EventLastCmdDone)
    {
    Semaphore_post(EndFrameSem);
    }
    
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Mike:  

    如果您想私下共享您的申请、我已在 E2E 上向您发送了一个朋友的申请。 请注意、180us 结果是使用我之前分享的应用获得的。

    此致、

    Arthur

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

    谢谢 Arthur。 我单击了“接受请求“、但它告诉我“无法发送消息“。 本周、E2E 对我来说有点摸不着头脑、因此可能需要一段时间才能注册“接受“。  

    您的应用程序的主要区别在于您正在执行 RX -> TX、而我正在执行 TX -> RX。 这使我希望一旦我得到正确的结果,我可以下降到 180 我们。  

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

    尊敬的 Mike:

    您可以通过电子邮件向我发送您的项目。

    此致、

    Arthur