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.

[参考译文] CC2652R7:CMD_NOP 命令的执行时间过长

Guru**** 2393725 points


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

https://e2e.ti.com/support/wireless-connectivity/other-wireless-group/other-wireless/f/other-wireless-technologies-forum/1457338/cc2652r7-cmd_nop-command-takes-too-long-to-execute

器件型号:CC2652R7

工具与软件:

大家好!

在专有项目的框架内、我使用 NOP 命令。

技术参考手册(2018年1月- 2024年6月修订)指出"该命令可用于测试系统 CPU 与无线电 CPU 之间的通信或插入等待。"

我将此 NOP 命令放在 RF_cmdPropXXAdv 命令链的开头:

RF_cmdNop.startTrigger.triggerType = TRIG_ABSTIME;
RF_cmdNop.startTrigger.pastTrig = 1;
RF_cmdNop.startTime = USEC_2_RAT_TICKS(1000000);
RF_cmdNop.condition.rule = COND_ALWAYS;
RF_cmdNop.pNextOp = (rfc_radioOp_t *) &RF_cmdPropXXAdv;

RF_cmdPropXXAdv.startTrigger.triggerType = TRIG_REL_FIRSTSTART;
RF_cmdPropXXAdv.startTime = 600; // means 150 us since NOP cmd starts
RF_cmdPropXXAdv.startTrigger.pastTrig = 1;
RF_cmdPropXXAdv.condition.rule = COND_ALWAYS;
RF_cmdPropXXAdv.pNextOp = (rfc_radioOp_t *) &RF_cmdPropYYAdv;

等等...

...

每次链完全执行时、我都会调整此命令的"start"参数:

RF_cmdNopFG.startTime += 8000;  // i.e. 2000 us


并通过发布 RF_cmdNop 重新启动链:

RF_postCmd(rfHandle, (RF_Op *) &RF_cmdNopFG, RF_PriorityNormal, RXEchoCallback, PROP_DONE_OK | PROP_DONE_RXTIMEOUT);

我注意到 NOP 命令需要325到4000个节拍才能执行。

因此有两个问题:
- NOP 命令的执行时间必须是恒定的还是接近某个特定值?
-如果 NOP 指令的执行时间增加,那么这种奇怪行为的原因可能是什么?

请协助

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

    您好!

    我建议使用相对于当前射频时间的开始时间。

    类似于: rf_cmdNopFG.StartTime = RF_getCurrentTime()+ 8000; //即2000us

    此外、我注意到在您的第一个代码片段中您有"rf_cmdNop"、而在最后一个代码片段中、您有"rf_cmdNop" FG "。 这是故意的吗?

     

    谢谢!
    Toby

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

    尊敬的 Toby、感谢您的回答。

    实际上、我 通过写入  RF_cmdNop 创建了一个拼写错误 FG。

    在我的专有协议的实现中,使用 RF_getCurrentTime()函数是不可取的,因为我有一个同步协议。

    如果我根据当前 RAT 时间使用时间戳、会看到不可接受的数据包抖动。

    直到最近、我才没有使用 NOP 命令。 一切都运行良好- 在主机模式和远程模式之间实现了相当精确的同步。

    有一天、需要在 TX 命令的开头使用 GPIO 引脚发送信号。 因此我认为、   在 TX 命令之前发生 NOP 命令的 DONE_OK 事件、将是  以最低的资源消耗为外部设备提供硬件中断的好方法。

    但在我把 NOP 纳入命令链的头后,一切开始奇怪的行为: 执行 NOP 命令逐渐增加。 我通过计算 NOP 命令获得 DONE_OK 状态时回调中 RF_getCurrentTime()值和 NOP.StartTime 之间的时间差来看到这一点。

    在这里看到一个线程 建议使用类似于 NOP 的命令、但使用不同的命令 No  代码。 我尝试了这种方法,但出于某种原因,链中的一些命令没有被调用。

    在过去几天里、我没有在这方面取得任何进展。

    似乎我必须找出其他方法来知道 TX 命令何时开始 为外部设备生成 IRQ 信号。

    顺便说一句,我还没有弄清楚如何让射频内核在我身上闪烁:)所以我会知道链中的下一个命令已经开始。

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

    嗨、Toby!

    I 路由射频内核信号 GPIO 以捕获来自内核的 TX 状态信号。

    结果是我有足够的能力。

    但 NOP 命令时序问题仍然存在。 还在挖掘它