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:2.4G/低于1GHz 天线(外部射频)开关控制

Guru**** 2578945 points
Other Parts Discussed in Thread: CC1352R, CC1352P, SYSCONFIG

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

https://e2e.ti.com/support/wireless-connectivity/sub-1-ghz-group/sub-1-ghz/f/sub-1-ghz-forum/926073/cc1352r-2-4g-sub-1ghz-antenna-external-rf-switch-control

器件型号:CC1352R
Thread 中讨论的其他器件: CC1352PSysConfig

您好!

我有基于 CC1352R (修订版 E)的定制板-下面是我的设置的详细信息:

  • 由 XMSSJ3G0PA-054射频开关馈送的双频带单馈送天线、由 DIO30控制
  • 软件:SDK v4.20.00.35、CCS v10.0.0.00010

问题:  
我已经提到了在论坛上讨论的射频天线开关(ti_drivers_config、rfDriverCallback)-
在此处发帖。 因此、我通常需要知道我要做的事情。 问题是(实际上是两个)-  

  1.  rfDriverCallback 和 rfDriverCallbackAntennaSwitching 之间有何区别? 操作  
    在我的案例中、我需要两者?
  2. 据我了解、我需要选择 RF_GlobalEventInit、RF_GlobalEventRadioPowerDown、  
    RF_GlobalEventRadioSetup 到 全局事件掩码(在.syscfg 中)。 我 是哪一个 setupCommands  
    假设要处理? 我需要的只是-让 DIO30控制射频开关响应 BLE (2.4G)  
    与低于1GHz 的绑定射频驱动器调用相比;没有复杂的"真值表"处理路由。

请提供建议。 谢谢。

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

    您好!

    通常,rfDriverCallback()是一种常规回调,用于处理任何自定义或应用特定行为的事件。  rfDriverCallbackAntennaSwitching 专门用于处理天线切换。 您的应用可能需要实现其中一个或两个功能。

    查看实现 rfDriverCallbackAntennaSwitch()的示例可能会很有用。 (您可以查看类似 DMM_154SENSOR_REMOVE_DISPLAY_APP_cc1352P_2的内容)。 SysConfig 生成的 ti_drivers_config.c 中还有一些有用的注释。

    /*
    === 天线切换====
    //
    /*
    === rfDriverCallbackAntennaSwitching ===
    用于处理天线切换的*函数。
    //
    void __attribute__((WEAK ) rfDriverCallbackAntennaSwitching(RF_Handle client, RF_GlobalEvent Events, void *arg)
    {
    /*===== 请阅读此====
    *
    *此函数被声明为弱函数、以便应用程序覆盖它、
    *下面未定义的函数调用旨在捕获
    *开发人员在链接时的注意事项。
    *需要一个'rfDriverCallbackAntennaSwitching'的新定义。
    *
    *请复制此函数定义以创建您自己的、但创建
    *确保为您的定义和删除'__attribute__((WEAK )'
    *删除以下函数声明和函数调用。
    *
    *要处理".globalEventMask"中列出的事件、请参阅
    *上面'rfDriverCallback'中提供的帮助文本。
    *
    *有关如何与所选天线引脚交互的示例、
    *请参阅下面的代码片段:
    *
    *--代码片段开始---
    *
    *//>初始化引脚作为输出
    *静态 PIN_Handle 天线引脚;
    *静态 PIN_STATE 天线状态;
    *
    * PIN_Config 天线 Config[]={
    * CONFIG_RF_ANTENNA PIN_0 | PIN_GPIO_OUTP_EN | PIN_GPIO_LOW | PIN_PushPull | PIN_DRVSTR_MAX、
    * PIN_TERMINATE
    *};
    *天线引脚= PIN_OPEN (&antennaState、antennaConfig);
    *
    *//>手动设置引脚输出值
    * PINCC26XX_setOutputValue (CONFIG_RF_ANTENNA、PIN_0、0);//低
    * PINCC26XX_setOutputValue (CONFIG_RF_ANTENNA、PIN_0、1);//高
    *
    *//>由射频内核驱动/控制的多路复用器引脚
    *//>(RFC GPIO0仅用作示例)
    * PINCC26XX_setMux (天线引脚、CONFIG_RF_ANTENNA_PIN_0、PINCC26XX_MUX_RFC_GPO0);
    *
    *//>要手动控制的多路复用器引脚(即释放射频内核控制)
    * PINCC26XX_setMux (天线引脚、CONFIG_RF_ANTENNA 引脚0、PINCC26XX_MUX_GPIO);
    *
    *--代码片段结束---
    *
    extern void You _MUST_Imple_rfDriverCallbackAntennaSwitching_se_generated ti_drivers_config_c_in_debug_folder_OR_SysConfig_preview (void);
    Yout_mUST_Implement rfDriverCallbackAntennaSwitching_se_generated_ti_drivers_config_c_in_debug_folder_or_sysconfig/preview();
    } 

    在 CC1352P 示例中、rfDriverCallbackAntennaSwitching 处理 RF_GlobalEventInit、RF_GlobalEventRadioPowerDown 和 RF_GlobalEventSetup。 如果射频开关只有一个引脚、则不需要复杂的逻辑、但处理程序的原理是类似的。  

    此致、

    Daniel

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

    谢谢 Daniel、

    在 DMM_154sensor_remote_display_app_cc1352P_2中搜索 rfDriverCallback 和 rfDriverCallbackAntennaSwitching
    我只在 ti_drivers_config.c 中看到这两个函数的实例、并将其作为模板(我之所以将其称为"templates (模板)"、是因为我将其命名为"templates (模板)"  
    它们以"__attribute_((weak ))"开头,应该删除 ti_drivers_config 中的注释,以用于实际函数。

    那么、我的问题是、当我复制这两个函数(并删除_属性_((weak)))时、它们应该放置在何处? 作为我  
    回想一下、以前从 CC1352R1_LAUNCHXL_Fxns.c 调用的几个 SDK (大约为 SDK v3.4) rfDriverCallback
     rfDriverCallback 和 rfDriverCallbackAntennaSwitching 应从哪里调用?

    您能不能确认这个 rfDriverCallbackAntennaSwitching 是否适合于可能的情况(单个 DIO30控制)
    2.4G 与低于1GHz 天线:  

    *路径 DIO30
    *==== ===
    *关闭 0
    *低于1GHz 1
    * 2.4GHz 0
    */
    void rfDriverCallbackAntennaSwitching (rf_handle 客户端、rf_GlobalEvent 事件、void * arg)
    {
    /*防止重复的 RF_init */
    静态 bool 已初始化= false;
    
    /*局部变量。 *
    bool s1Ghz = false;
    uint8_t 分频器= 0;
    
    if (!initialized && Events & RF_GlobalEventInit){
    /*不要再做一次*/
    已初始化= true;
    initAntennaSwitch();
    }
    否则、如果(事件和 RF_GlobalEventRadioSetup){
    /*关闭所有路径。 *
    PINCC26XX_setOutputValue (CONFIG_RF_SUB1GHZ、0);
    
    /*将通用参数解码为 setup 命令。 *
    RF_RadioSetup* setupCommand =(RF_RadioSetup*) arg;
    
    switch (setupCommand->common.commandNo){
    案例(CMD_RADIO_SETUP):
    情况(CMD_BLE5_RADIO_SETUP):
    loDivider = RF_LODIVIDER_MASK & setupCommand->common.loDivider;
    /*低于1GHz 的前端 *
    if (lodder!= 0){
    低于1GHz =真;
    }
    中断;
    情况(CMD_PROP_RADIO_DIV_SETUP):
    loDivider = RF_LODIVIDER_MASK & setupCommand->prop_div.loDivider;
    /*低于1GHz 的前端 *
    if (lodder!= 0){
    低于1GHz =真;
    }
    中断;
    默认:中断;
    }
    
    IF (低于1GHz){
    /*低于1GHz *
    /*射频内核有效-->低于1GHz */
    PINCC26XX_setMux (天线引脚、CONFIG_RF_SUB1GHZ、PINCC26XX_MUX_GPIO);
    PINCC26XX_setOutputValue (CONFIG_RF_SUB1GHZ、1);
    } 否则{
    /* 2.4 GHz */
    /*射频内核有效--> 2.4GHz */
    PINCC26XX_setMux (天线引脚、CONFIG_RF_SUB1GHZ、PINCC26XX_MUX_GPIO);
    PINCC26XX_setOutputValue (CONFIG_RF_SUB1GHZ、0);
    }
    }
    否则、如果(事件和 RF_GlobalEventRadioPowerDown){
    /*关闭所有路径。 *
    PINCC26XX_setOutputValue (CONFIG_RF_SUB1GHZ、0);
    
    /*将 IO 多路复用器重置为 GPIO 功能*/
    PINCC26XX_setMux (天线引脚、CONFIG_RF_SUB1GHZ、PINCC26XX_MUX_GPIO);
    }
    }
    

    最棒的
    SE

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

    SE、

    正确的是、生成的 ti_drivers_config 中的函数是"模板"、应由您实现并放置在其他位置。 您在何处放置这些函数并不重要-这主要是您可以做出的架构决策。 如果需要、应该可以在 main.c 文件(或等效文件)中使用它们。 只需根据需要确保为 rf.h、pin.h 等包含正确的#include。

    带有 __attribute__((weak)的"template"函数将继续由 SysConfig 在每次重新编译时生成,但在编译时将由您编写的函数覆盖。

    您编写的回调函数对我来说似乎是合理的。 如果没有您的硬件、我将无法进行测试。

    此致、

    Daniel