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.

[参考译文] CC1311P3:使用 RF_cmdFs 在上述及以下 430MHz 之间进行运行时频率切换(Prop 模式)

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

https://e2e.ti.com/support/wireless-connectivity/sub-1-ghz-group/sub-1-ghz/f/sub-1-ghz-forum/1610822/cc1311p3-runtime-frequency-switching-across-above-and-below-430-mhz-using-rf_cmdfs-prop-mode

器件型号: CC1311P3

我们正在实施 运行时频率切换 在专有模式RF_cmdFs下对两者使用 TX 和 RX
应用会动态切换频率 430MHz 边界进行测量 、对频率使用不同的射频设置配置 高于和低于 430MHz

我们观察到在运行时切换期间的情况 在低于–430MHz(窄带)范围内运行时出现间歇性故障 、而所有频率都使用相同的切换机制。

我们使用动态更新 RF setup 命令RF_CTRL_UPDATE_SETUP_CMD

TX 运行时频率切换序列

RF_cmdFs_cst.frequency = ctrl_cmd->cmd_data.set_freq_cmd.intg_freq;
RF_cmdFs_cst.fractFreq = ctrl_cmd->cmd_data.set_freq_cmd.frac_freq;

RF_cancelCmd(rfHandle, RF_CMDHANDLE_FLUSH_ALL, 1);

/* Check frequency range */
if (TRUE == rf_ctrl_check_freq_range_abv_430(RF_cmdFs_cst.frequency))
{
    RF_cmdPropRadioDivSetup_cst_above_430.centerFreq =
        RF_cmdFs_cst.frequency;
    RF_control(rfHandle, RF_CTRL_UPDATE_SETUP_CMD,
               (void*)&RF_cmdPropRadioDivSetup_cst_above_430);
}
else
{
    RF_cmdPropRadioDivSetup_cst_below_430.centerFreq =
        RF_cmdFs_cst.frequency;
    RF_control(rfHandle, RF_CTRL_UPDATE_SETUP_CMD,
               (void*)&RF_cmdPropRadioDivSetup_cst_below_430);
}

/* GPIO config */
HWREG(RFC_DBELL_BASE + RFC_DBELL_O_SYSGPOCTL) =
    RFC_DBELL_SYSGPOCTL_GPOCTL1_CPEGPO1;
GPIO_setConfigAndMux(CONFIG_GPIO_GATE_PULSE,
                     GPIO_CFG_OUTPUT,
                     IOC_PORT_RFC_GPO1);

RF_yield(rfHandle);

/* Set the frequency */
RF_postCmd(rfHandle, (RF_Op*)&RF_cmdFs_cst,
           RF_PriorityNormal, NULL, 0);

RX 运行时频率切换序列

RF_cancelCmd(rfHandle, RF_CMDHANDLE_FLUSH_ALL, 1);

RF_cmdFs_cst.frequency = ctrl_cmd->cmd_data.set_freq_cmd.intg_freq;
RF_cmdFs_cst.fractFreq = ctrl_cmd->cmd_data.set_freq_cmd.frac_freq;

/* Check frequency range */
if (TRUE == rf_ctrl_check_freq_range_abv_430(RF_cmdFs_cst.frequency))
{
    RF_cmdPropRadioDivSetup_cst_above_430.centerFreq =
        RF_cmdFs_cst.frequency;
    RF_control(rfHandle, RF_CTRL_UPDATE_SETUP_CMD,
               (void*)&RF_cmdPropRadioDivSetup_cst_above_430);
}
else
{
    RF_cmdPropRadioDivSetup_cst_below_430.centerFreq =
        RF_cmdFs_cst.frequency;
    RF_control(rfHandle, RF_CTRL_UPDATE_SETUP_CMD,
               (void*)&RF_cmdPropRadioDivSetup_cst_below_430);
}

RF_yield(rfHandle);

/* Set frequency */
RF_postCmd(rfHandle, (RF_Op*)&RF_cmdFs_cst,
           RF_PriorityNormal, NULL, 0);

/* Resume RX */
rfPostHandle = RF_postCmd(rfHandle,
    (RF_Op*)&RF_cmdPropRxAdv_cst,
    RF_PriorityNormal,
    &ReceivedOnRFcallback,
    RF_EventRxEntryDone);

 

观察结果

  • 执行运行时频率切换 以动态方式跨越 430MHz 边界

  • 在低于 430MHz 的情况下运行时、会观察到间歇性故障

  • TX 和 RX 使用相同的开关逻辑

  • 未返回射频驱动程序错误 RF_postCmd()

  • RF_cmdPropRadioDivSetup使用 SmartRF Studio 生成两个不同的命令并在运行时更新


问题

  1. 是这样 支持在运行时在 430MHz 以上和以下切换频率 RF_cmdFs与一起使用RF_CTRL_UPDATE_SETUP_CMD

  2. 是否有 所需的序列或延迟 介于:

    • RF_cancelCmd()

    • RF_CTRL_UPDATE_SETUP_CMD

    • 发帖 RF_cmdFs

  3. 打开和关闭 Sub –430MHz(窄带) 都有 其他射频参数 (例如覆盖,同步配置,PA 设置)必须重新加载吗?

  4. 设计方法 重新发布完整的射频设置命令 而不是仅RF_CTRL_UPDATE_SETUP_CMD在运行时切换期间进行更新?

  5. RF_yield()作为运行时频率切换序列的一部分、是否需要或建议调用?

有关的任何指导 跨 430MHz 边界的建议运行时频率开关序列 会很有帮助。

谢谢、

专题 B

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

    请勿打开存在相同问题的多个线程。 如果您有其他问题/意见、请将其添加到原始帖子:

    (+) CC1311P3:CC1311P3:RFC_GPO (CPEGPO) PA 控制在 430MHz 以上但不低于 430MHz 之上工作 — 低于 1GHz 论坛 — 低于 1GHz - TI E2E 支持论坛

    BR

    Siri

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

     针对前端 PA 切换问题发布了 HI Siri 推荐函数。 您能否更新我的查询运行时频率切换问题?

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

    你好 Siri 查询的任何更新?

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

    因此更改频率以及更新设置命令时、需要记住的重要一点是使用 RF_CTRL_UPDATE_SETUP_CMD、还强制关闭射频内核、以便在再次打开射频内核时强制使用更新后的设置。

    开启射频内核时、您始终会运行完整设置命令、RF_CTRL_UPDATE_SETUP_CMD 会强制无线电使用更新后的命令。

    典型用途:

    if (FREQ_X)
    {
        RF_cmdFs.frequency = freq_x;
        RF_cmdFs.fractFreq = fract_x;
        RF_cmdPropRadioDivSetup.centerFreq = freq_x;
    }
    else // FREQ_Y
    {
        RF_cmdFs.frequency = freq_y;
        RF_cmdFs.fractFreq = fract_y;
        RF_cmdPropRadioDivSetup.centerFreq = freq_y;
    }
    
    RF_control(rfHandle, RF_CTRL_UPDATE_SETUP_CMD, NULL);
    RF_yield(rfHandle);
    
    RF_postCmd(rfHandle, (RF_Op*)&RF_cmdFs, RF_PriorityNormal, NULL, 0);
    RF_postCmd(rfHandle, (RF_Op*)&RF_cmdPropTx, RF_PriorityNormal, NULL, 0);
    

    对于这两种频率使用相同的 setup 命令、但需要更新两个通道之间的 centerFreq、以便让 RF 驱动程序知道它需要通过调用 RF_control 使用新版本的 setup 命令、而不是缓存版本。

    从我在 Studio 中可以看到、我们在 430MHz 下面有用于该频率的设置的唯一 PHY 是窄带 PHY、然后还有一些其他 PHY。 高于 430MHz。

    如果您要做的是更改 PHY 而不仅仅是更改频率、您应该有两对覆盖列表和设置命令、然后您可以使用不同的设置命令打开和关闭驱动程序来在它们之间进行切换、或者您可以使用两个射频句柄(每个 PHY 一个)。

    if (PHY_X)
    {
        RF_cmdFs.frequency = freq_x;
        RF_cmdFs.fractFreq = fract_x;
        rfHandle = RF_open(&rfObject_PHY_X, &RF_prop_PHY_X, (RF_RadioSetup*)&RF_cmdPropRadioDivSetup_PHY_X, &rfParams_PHY_X);
        RF_postCmd(rfHandle, (RF_Op*)&RF_cmdFs, RF_PriorityNormal, NULL, 0);
        RF_postCmd(rfHandle, (RF_Op*)&RF_cmdPropTx, RF_PriorityNormal, NULL, 0);
        RF_close(rfHandle);
    }
    else // PHY_Y
    {
        RF_cmdFs.frequency = freq_y;
        RF_cmdFs.fractFreq = fract_y;
        rfHandle = RF_open(&rfObject_PHY_Y, &RF_prop_PHY_Y, (RF_RadioSetup*)&RF_cmdPropRadioDivSetup_PHY_Y, &rfParams_PHY_Y);
        RF_postCmd(rfHandle, (RF_Op*)&RF_cmdFs, RF_PriorityNormal, NULL, 0);
        RF_postCmd(rfHandle, (RF_Op*)&RF_cmdPropTx, RF_PriorityNormal, NULL, 0);
        RF_close(rfHandle);
    }

    Siri