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:如何为自定义板实现射频/天线开关回调?

Guru**** 2392095 points
Other Parts Discussed in Thread: CC1352P, CC1312R, CC1190

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

https://e2e.ti.com/support/wireless-connectivity/sub-1-ghz-group/sub-1-ghz/f/sub-1-ghz-forum/1330939/cc1352p-how-to-implement-rf-antenna-switch-callback-for-custom-board

器件型号:CC1352P
主题中讨论的其他器件: CC1312RCC1190

您好!

我们使用 CC1352P-launchpad-P2作为参考设计了一款定制电路板。 由于我们只需要2.4GHz 信号、因此我们丢弃了900MHz 匹配 元件、将 SKY13317上的一个控制引脚连接到 GND、然后仅使用两个 GPIO 在低功率和高功率900MHz 信号之间切换。

/* Owned by /ti/drivers/RF as  */
extern const uint_least8_t CONFIG_RF_24GHZ_CONST;
#define CONFIG_RF_24GHZ 27

/* Owned by /ti/drivers/RF as  */
extern const uint_least8_t CONFIG_RF_HIGH_PA_CONST;
#define CONFIG_RF_HIGH_PA 28

/* Owned by /ti/drivers/RF as  */
extern const uint_least8_t CONFIG_RF_SUB1GHZ_CONST;
#define CONFIG_RF_SUB1GHZ 30

在参考设计中、GPIO 从 DIO_28和 DIO_29切换到 DIO_27和 DIO_28、以简化布局。 在这种情况下、我们应该如何实现射频/天线切换回调函数? 由于射频天线引脚名称是在 syscfg 中定义的、 我们是否可以 为参考板复制由 syscfg 生成的代码?

/*
 * ======== Antenna switching ========
 */
/*
 * ======== rfDriverCallbackAntennaSwitching ========
 * Sets up the antenna switch depending on the current PHY configuration.
 *
 * Truth table:
 *
 * Path       DIO27 DIO28 DIO30
 * ========== ===== ===== =====
 * Off        0     0     0
 * 2.4 GHZ    1     0     0
 * HIGH PA    0     1     0
 * SUB1 GHZ   0     0     1
 */
void rfDriverCallbackAntennaSwitching(RF_Handle client, RF_GlobalEvent events, void *arg)
{

    if (events & RF_GlobalEventRadioSetup) {
        bool    sub1GHz   = false;
        uint8_t loDivider = 0;

        /* Switch off all paths. */
        GPIO_write(CONFIG_RF_24GHZ, 0);
        GPIO_write(CONFIG_RF_HIGH_PA, 0);
        GPIO_write(CONFIG_RF_SUB1GHZ, 0);

        /* Decode the current PA configuration. */
        RF_TxPowerTable_PAType paType = (RF_TxPowerTable_PAType)RF_getTxPower(client).paType;

        /* Decode the generic argument as a setup command. */
        RF_RadioSetup* setupCommand = (RF_RadioSetup*)arg;

        switch (setupCommand->common.commandNo) {
            case (CMD_RADIO_SETUP):
            case (CMD_BLE5_RADIO_SETUP):
                    loDivider = RF_LODIVIDER_MASK & setupCommand->common.loDivider;

                    /* Sub-1GHz front-end. */
                    if (loDivider != 0) {
                        sub1GHz = true;
                    }
                    break;
            case (CMD_PROP_RADIO_DIV_SETUP):
                    loDivider = RF_LODIVIDER_MASK & setupCommand->prop_div.loDivider;

                    /* Sub-1GHz front-end. */
                    if (loDivider != 0) {
                        sub1GHz = true;
                    }
                    break;
            default:break;
        }

        if (sub1GHz) {
            /* Sub-1 GHz */
            if (paType == RF_TxPowerTable_HighPA) {
                /* PA enable --> HIGH PA
                 * LNA enable --> Sub-1 GHz
                 */
                GPIO_setMux(CONFIG_RF_24GHZ, IOC_PORT_GPIO);
                /* Note: RFC_GPO3 is a work-around because the RFC_GPO1 (PA enable signal) is sometimes not
                         de-asserted on CC1352 Rev A. */
                GPIO_setMux(CONFIG_RF_HIGH_PA, IOC_PORT_RFC_GPO3);
                GPIO_setMux(CONFIG_RF_SUB1GHZ, IOC_PORT_RFC_GPO0);
            } else {
                /* RF core active --> Sub-1 GHz */
                GPIO_setMux(CONFIG_RF_24GHZ, IOC_PORT_GPIO);
                GPIO_setMux(CONFIG_RF_HIGH_PA, IOC_PORT_GPIO);
                GPIO_setMux(CONFIG_RF_SUB1GHZ, IOC_PORT_GPIO);
                GPIO_write(CONFIG_RF_SUB1GHZ, 1);
            }
        } else {
            /* 2.4 GHz */
            if (paType == RF_TxPowerTable_HighPA)
            {
                /* PA enable --> HIGH PA
                 * LNA enable --> 2.4 GHz
                 */
                GPIO_setMux(CONFIG_RF_24GHZ, IOC_PORT_RFC_GPO0);
                /* Note: RFC_GPO3 is a work-around because the RFC_GPO1 (PA enable signal) is sometimes not
                         de-asserted on CC1352 Rev A. */
                GPIO_setMux(CONFIG_RF_HIGH_PA, IOC_PORT_RFC_GPO3);
                GPIO_setMux(CONFIG_RF_SUB1GHZ, IOC_PORT_GPIO);
            } else {
                /* RF core active --> 2.4 GHz */
                GPIO_setMux(CONFIG_RF_24GHZ, IOC_PORT_GPIO);
                GPIO_setMux(CONFIG_RF_HIGH_PA, IOC_PORT_GPIO);
                GPIO_setMux(CONFIG_RF_SUB1GHZ, IOC_PORT_GPIO);
                GPIO_write(CONFIG_RF_24GHZ, 1);
            }
        }
    }
    else if (events & RF_GlobalEventRadioPowerDown) {
        /* Switch off all paths. */
        GPIO_write(CONFIG_RF_24GHZ, 0);
        GPIO_write(CONFIG_RF_HIGH_PA, 0);
        GPIO_write(CONFIG_RF_SUB1GHZ, 0);

        /* Reset the IO multiplexer to GPIO functionality */
        GPIO_setMux(CONFIG_RF_24GHZ, IOC_PORT_GPIO);
        GPIO_setMux(CONFIG_RF_HIGH_PA, IOC_PORT_GPIO);
        GPIO_setMux(CONFIG_RF_SUB1GHZ, IOC_PORT_GPIO);
    }
}

请告知。

谢谢。

ZL

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

    您好、Zhiyong、

    是的、我建议您从 ti_drivers_config.c 中的天线开关回调示例代码片段作为起点。

    谢谢、

    M·H

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

    尊敬的 Marie:

    感谢您的答复。

    生成的代码的注释中有一条注释:

    /* Note: RFC_GPO3 is a work-around because the RFC_GPO1 (PA enable signal) is sometimes not
        de-asserted on CC1352 Rev A. */

    这是我们在切换到其他 GPIO 引脚时需要注意的事情吗?

    此致!

    ZL

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

    您好、Zhiyong、

    RFC_GPO3和 RFC_GPO1是指射频内核数据信号。 您可以在 TRM 第13.3.2节"将 AUXIO 映射到 DIO 引脚"中了解有关它们的更多信息。  

    https://www.ti.com/lit/swcu185

    谢谢、

    M·H

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

    尊敬的 Marie:

    阅读 TRM 后、我了解到由于修订版 A CC1352P 硬件中存在一些错误、我们将 HIGH_PA 引脚设置为 IOC_PORT_RFC_GPO3、而不是 IOC_PORT_RFC_GPO1作为该错误的权变措施。

    两个后续问题:1)此错误是否适用于 CC1312R? 至少我们可以在开放市场上购买的版本? 2) 2)将来会修复硬件中的此错误吗? 即使它已修复、我们是否应该继续应用相同的权变措施以确保安全?

    谢谢。

    ZL

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

    您好、Zhiyong、

    您能指出您在 TRM 中发现此错误的位置吗?

    谢谢、

    M·H

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

    尊敬的 Marie:

    TRM 表13-1指出 RFC_GFO1控制 PA 启用、RFC_GFO3控制 TX 启动。 但在当前在射频天线开关生成的代码中、可以看到:

    /* Note: RFC_GPO3 is a work-around because the RFC_GPO1 (PA enable signal) is sometimes not
                             de-asserted on CC1352 Rev A. */
    GPIO_setMux(CONFIG_RF_HIGH_PA, IOC_PORT_RFC_GPO3);

    如果不是因为某种错误而取消、正如注释中所述、在 CC1352修订版 A 上、RFC_GPO1 (PA 使能信号)有时不会取消置位。我们会看到如下代码:

    GPIO_setMux(CONFIG_RF_HIGH_PA, IOC_PORT_RFC_GPO1);

    BTW、我认为这部分代码仅适用于具有外部 PA/LNA 的电路板、例如 CC1312R + CC1190。 在该论坛上有关如何将 CC131R 与 CC1190配合使用的几篇文章中、包括我刚介绍的一个线程、建议我们将连接到外部 PA/LNA 的 GPIO 引脚路由为如下所示:

        // Route out LNA active pin to CONFIG_GPIO_LNA
        GPIO_setConfigAndMux(CONFIG_GPIO_LNA, GPIO_CFG_OUT_STD | GPIO_CFG_OUT_LOW, IOC_PORT_RFC_GPO0);
        
        // Route out PA active pin to CONFIG_GPIO_PA
        GPIO_setConfigAndMux(CONFIG_GPIO_PA, GPIO_CFG_OUT_STD | GPIO_CFG_OUT_LOW, IOC_PORT_RFC_GPO1);

    如果注释中有关生成的代码的说法是正确的、即有时 RFC_GPO1在 TX 完成时不会失效、我预计这会完全耗尽电池寿命。 这就是我要求澄清的原因。

    此致、

    ZL

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

    您好、Zhiyong、

    我的理解是、包括 CC1312在内的所有352KB 版本的 CC13x2器件都存在此问题。

    但它可能无关紧要、除非您需要实现天线开关回调。

    谢谢、

    M·H