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.

[参考译文] CC1312PSIP:从 CC1310 和 CC1312R 迁移项目。 射频问题。

Guru**** 2337880 points
Other Parts Discussed in Thread: CC1312R, CC1310, CC1312PSIP, SYSCONFIG, LP-EM-CC1312PSIP
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/wireless-connectivity/sub-1-ghz-group/sub-1-ghz/f/sub-1-ghz-forum/1515728/cc1312psip-migration-project-from-cc1310-and-cc1312r-rf-problem

器件型号:CC1312PSIP
主题中讨论的其他器件:CC1312RCC1310Sysconfig

工具/软件:

您好、
我将项目从 CC1312R 和 CC1310 迁移到 CC1312PSIP。 除无线电通信外、大部分通信功能都已正常工作。 我不知道如何控制 DIO0-DIO3 和 DIO0-DIO3 输出。

目前、对于 CC1312、我们使用 SDK 4.10.0.78 和 3.40.0.02。 适用于 CC1310 4.10.1.01 和 3.20.0.23。 我们很难过渡到更新的 SDK。

此致、

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

    尊敬的 Jakub:

    如您所见、CC1312PSIP 上的射频驱动器在内部拥有 DIO0 和 DIO0-DIO3 引脚:

    与 CC1312R 工程相比、还有一个特殊的 rfDriverCallbackAntennaSwitching 回调:

    /*
     * ======== Antenna switching ========
     */
    /*
     * ======== rfDriverCallbackAntennaSwitching ========
     * Sets up the antenna switch according to the TX power table PA type.
     *
     * Truth table:
     *
     * Path       DIO0  DIO3 
     * ========== ===== ===== 
     * Off        0     0
     * STANDARD PA 1     0
     * HIGH PA    0     1
     */
    void __attribute__((weak)) rfDriverCallbackAntennaSwitching(RF_Handle client, RF_GlobalEvent events, void *arg)
    {
    
        if (events & RF_GlobalEventRadioSetup) {
            /* Switch off all paths. */
            GPIO_write(CONFIG_RF_STANDARD_PA, 0);
            GPIO_write(CONFIG_RF_HIGH_PA, 0);
    
            /* Decode the current PA configuration. */
            RF_TxPowerTable_PAType paType = (RF_TxPowerTable_PAType)RF_getTxPower(client).paType;
    
            if (paType == RF_TxPowerTable_HighPA) {
                /*
                * Mux GPIOs to RF Core signals:
                * - High PA    --> HIGH_PA
                * - LNA enable --> STANDARD_PA
                */
                GPIO_setConfigAndMux(CONFIG_RF_STANDARD_PA, GPIO_CFG_OUTPUT, IOC_PORT_RFC_GPO0);
                GPIO_setConfigAndMux(CONFIG_RF_HIGH_PA, GPIO_CFG_OUTPUT, IOC_PORT_RFC_GPO3);
            } else {
                /* RF Core active --> 5_DBM */
                GPIO_write(CONFIG_RF_STANDARD_PA, 1);
            }
        }
        else if (events & RF_GlobalEventRadioPowerDown) {
            /* Switch off all paths. */
            GPIO_write(CONFIG_RF_STANDARD_PA, 0);
            GPIO_write(CONFIG_RF_HIGH_PA, 0);
    
            /* Reset the IO multiplexer to GPIO functionality */
            GPIO_setConfigAndMux(CONFIG_RF_STANDARD_PA, GPIO_CFG_OUTPUT, IOC_PORT_GPIO);
            GPIO_setConfigAndMux(CONFIG_RF_HIGH_PA, GPIO_CFG_OUTPUT, IOC_PORT_GPIO);
        }
    }
    
    

    以及其他温度补偿设置:

    以及 PSIP 器件+覆盖的专用 CPE 补丁:

    我的观点是、如果可能、我强烈建议您更新到最新的 SDK。

    此致、

    Arthur

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

    尊敬的 Arthur:

    感谢您的回答。

    我们采纳了您的建议并开始将项目迁移到最新的 SDK。 不幸的是、出现了新的问题。 最严重的是我们使用 EasyLink、而新的 SDK 不支持它。 是否可以通过从旧项目复制目录或以其他方式来添加 EasyLink?

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

    尊敬的 Marcin:  

    必须指出的是、我从未尝试将 Easylink 移植到更新的 SDK 版本。 我们建议直接使用 rflib、因为它更灵活。

    您是否正在使用任何 Easylink 特定功能?

    此致、

    Arthur

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

    您好、Arthur

    我将 EasyLink 文件从旧的 SKD 复制到新的 SKD、并使项目进入编译状态。 我还没有测试它是否正常工作。

    我们在项目中使用了 14 个 EasyLink 函数:
    EasyLink_init()
    EasyLink_transmitASYNC ()
    EasyLink_transmitCcaAsync ()
    EasyLink_receiveAsync ()
    EasyLink_abort()
    EasyLink_enableRxAddrFilter()
    EasyLink_getIeeeAddr ()
    EasyLink_setFrequency ()
    EasyLink_getFrequency ()
    EasyLink_setRfPower ()
    EasyLink_getRssi ()
    EasyLink_getAbsTime()
    EasyLink_setCtrl()
    Link_Params_初始化 ()

    我们不使用 4 个函数:
    EasyLink_Transmit ()
    easyLink_receive ()
    EasyLink_getRfPower ()
    EasyLink_getCtrl()

    此致、

    Marcin。

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

    尊敬的 Marcin:

    我将尝试总结如何替换 Easylink 方法:

    • EasyLink_enableRxAddrFilter
      • 这可以通过写入 RF_cmdPropRx 地址 X 值和 pktConf.bCheckAddress 位来设置  
    • EasyLink_receiveAsync
      • 正如中所述、rfPacketRx 示例和 EasyLink: rfPacketRx
      • 您将在 Rx 条目中使用数据包内容进行回调
    •  EasyLink_ABORT
    • EasyLink_setFrequency/getFrequency
      • 获取/设置 RF_cmdFs 的内容
    • EasyLink_setRfPower
    • EasyLink_getRssi
      • 使用 RF_cmdPropRx 中的 bAppendRssi 将 RSSI 附加到接收到的数据包中(首选)
      • 使用 RF_getRssi
    • EasyLink_getAbsTime
    • 对于 CCA 命令、请使用 rfListenBeforeTalk 中所示的命令链
      • 总之、使用载波感测来检测能量、如果没有能量、则进行传输。

    如果有用、请告诉我。

    此致、

    Arthur

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

    您好、Arthur

    目前、我看到上述 Easy Link 问题只是迁移项目时的冰山一角。 新 SDK 中没有
    #include
    更新的版本具有以下更改:
    #include       ->#include
    #include     ->#include
    #include   ->#include
    我可能还没有注意到更多类似的变化、因为我目前正在开发最容易迁移的项目。

    此致、

    Marcin。

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

    是的、PIN 确实已被 GPIO 取代(如果您问我,会更好)。 下面是说明: (+) LAUNCHXL-CC1310:GPIO v PIN 驱动器? 有何差异? 推荐哪一种? -低于 1GHz 论坛 — 低于 1GHz - TI E2E 支持论坛 。 UART2 也是如此。

    此致、

    Arthur

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

    从上面的帖子中可以看出、在切换到新的 SDK 后、要编译软件需要大量工作。 运行和测试还需要更多的资源。 同时、当我的上级决定使用 CC1312PSIP 时、他们提供的信息表明从 CC1312R 迁移到 CC1312PSIP 应该比从 CC1310 迁移到 CC1312R 容易得多。 比较主题 e2e.ti.com/.../cc1312psip-migrating-from-cc1312r-to-cc1312psip

    关于上述问题,我们回到使用旧 SDK 的概念,我们目前只有两个问题:
    -传输后不久,我们无法正确接收数据时,设备之间的距离超过 3cm
    -传输的频率比程序中设置的频率高 100KHz。

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

    尊敬的 Marcin:

    同样、我不建议您以这种方式使用、因为该 SDK 版本中尚未包含该器件、所以我们不支持 CC1312PSIP。 与迁移相比、您将花更多时间尝试让器件在旧版 SDK 上运行。

    我在这里发布了我们的迁移指南: 文档概述

    顺便说一下、100KHz 偏差会指示错误的 XOSC_CAPARRAY_DELTA 配置。

    此致、

    Arthur

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

    您好 Arthur、
    Jakub 在创建主题时写道、我们正在将工程从 CC1312R 和 CC1310 迁移到 CC1312PSIP。

    我们只是在移动一些项目。 目前、无法将所有工程都移至 CC1312PSIP、甚至可以移动到新的 SDK。 新的 SDK 不支持 CC1310。 我们在 5mm x 5mm 的外壳 (CC1310F128RHBR) 中使用它、因此如果不修改硬件、也无法用 CC1312R 替换它。

    此外、我们在 CC13*微控制器上实施的所有项目都具有大多数共同的源文件。 CC1310 上扩展最广泛的项目目前仅禁用了 4KB 的可用闪存并禁用了缓存、其中使用了--opt_level=2。 如此少量的可用内存已导致调试软件时出现问题。
    关于上述问题、有以下问题:
    -是否有计划为 CC1310F128RHBR 引入引脚对引脚兼容的替代产品?
    -用 GPIO 替换 PIN 对在 CC1310 上工作的项目的内存使用和速度有什么影响
    此致、
    Marcin。

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

    尊敬的 Marcin:

    我明白。  无论如何、您肯定必须继续为 CC1310 使用 CC13xx 4.20 SDK。 CC13xx (LOWPOWER-F1) 是 CC13x2 SDK (LOWPOWER-F2) 支持不同的系列。

    是否在为 CC1310 工程使用 CCS 编译器?

    对于您的两个问题:

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

    您好、Arthur

    我使用 CCS 10.4.0。
    TI v18.12.5.LTS 或 TI v20.2.4.LTS 编译器

    使用新的 SDK 8.3 时、我使用的是 CCS 12.8.1 和 TI CLANG v3.2.2.LTS 编译器

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

    尊敬的 Marcin:

    现在您已经可以与 CC1312PSIP 进行通信、多亏了 XOSC_CAPARRAY 调节、让我知道我们是否应该让该主题保持开放状态。

    此致、

    Arthur

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

    您好、Arthur

    我设法建立了沟通,但只有两个项目之间。 该软件的工作仍在进行中,包括测试,到目前为止只有一个象征性的数额。 我恐怕在未来数星期可能会出现另一个问题。 如果这实际上发生了,你关闭了这个主题,我将不得不打开一个新的主题。

    此外,当时间允许时,我计划在这里描述我在这个主题的一些经验。

    此致、
    Marcin。

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

    尊敬的 Marcin:

    我会让这个主题保持打开状态。

    此致、

    Arthur

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

    我将发送在将第三个工程从 CC1312R 转换为 CC1312PSIP 时所做的工程配置更改。  
    我以第二个项目为基础、该项目的传输已经可以正常工作、网址是 SDK 4.10.0.78。

    第三个项目 — 属性:  

    • General/Products/Add/SysConfig 1.23.1
    • 新增了预定义 Device_CC1312PSIP

    第三个项目

    • 向工程中添加一个公共文件、其中包含以下函数:
        rfDriverCallback() 调用函数
        rfDriverCallbackAntennaSwitching()- RF 交换机支持。

    与第三个项目 Tirtos /属性相关

    • 常规/产品->在 4.10.00.78 处更改 SDK
        此更改需要对源进行以下更改:
        在 Clock_tickPeriod 更改 ClockP_tickPeriod
        更改 UART2

    SysConfig:

    • TI 驱动程序/电源/使能策略/开启
    • TI 驱动程序/射频:
        rf.globalCallbackFunction=“rfDriverCallback";“;
        rf.globalEventMask     =
        [“RF_GlobalEventInit",“,"RF_GlobalEventRadioPowerDown"、"RF_GlobalEventRadioPowerDown",“,"RF_GlobalEventRadioSetup"]“"RF_GlobalEventRadioSetup"];、;</s>“ “
    • TI 驱动器/温度->开启
    • Sub-1GHz 的射频设计/前端==内部偏置、差分射频
    • TI 驱动程序/电源 — 恢复默认配置
    • TI 器件/器件配置:
        HF 时钟源->在 48MHz XOSC_HF 处从外部 48MHz TCXO 变化
          我仍然不明白为什么在进行上述更改后、我仍然需要拥有 TI 驱动器/电源/
          启用 TCXO 函数=启用 Power_enableTCXO。
          否则、传输将无法正常工作。 设备可能挂起。 到目前为止,我还没有找到原因。
        强制 VDDR — 开启
    • TI Drivers/RTOS ->移除
    • 用于接收操作的射频堆栈/EasyLink/Receiver/Configure 设置->默认值
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    我们不使用高于 14dB (25mW) 的功率
    许多工程通用的文件更改:

    void Board_initHook()
    {
    ...
    #   ifdef Device_CC1312PSIP
        Board_init_rf_switch();
    #   endif  //#ifdef Device_CC1312PSIP
    ...
    }
    
    
    #ifdef Device_CC1312PSIP
    /*
     *  ======== PIN ========
     */
    /* RF Antenna Pin 0, (DIO0) Substitution, because there is no DIO0 for CC1312R, and in CC1312PSIP we have to use it */
    #define CONFIG_RF_STANDARD_PA    0x00000000
    /* RF Antenna Pin 1, (DIO3) */
    #define CONFIG_RF_HIGH_PA    0x00000003
    #endif //#ifdef Device_CC1312PSIP
    
    
    /*
     *  ====================== RF_switch ======================
     */
    
    #include <ti/drivers/rf/RF.h>
    #include <ti/drivers/PIN.h>
    #include <ti/drivers/pin/PINCC26XX.h>
    
    #ifdef Device_CC1312PSIP
    const PIN_Config antennaConfig[] =
    {
        /* RF Antenna Pin 0, (DIO1) */
        CONFIG_RF_STANDARD_PA | PIN_GPIO_OUTPUT_EN | PIN_GPIO_LOW | PIN_PUSHPULL | PIN_DRVSTR_MAX,
        /* RF Antenna Pin 1, (DIO3) */
        CONFIG_RF_HIGH_PA | PIN_GPIO_OUTPUT_EN | PIN_GPIO_LOW | PIN_PUSHPULL | PIN_DRVSTR_MAX,
        PIN_TERMINATE
    };
    static PIN_Handle antennaPins;
    static PIN_State antennaState;
    
    void Board_init_rf_switch(void)
    {
        if (PIN_init(antennaConfig) != PIN_SUCCESS) {
            /* Error with PIN_init */
            while (1);
        }
        antennaPins = PIN_open(&antennaState, antennaConfig);
    }
    
    
    /*
     * ======== rfDriverCallbackAntennaSwitching ========
     * Function to handle antenna switching.
     */
    void rfDriverCallbackAntennaSwitching(RF_Handle client, RF_GlobalEvent events, void *arg)
    {
        if(events & RF_GlobalEventInit) {
            // Perform action for this event
            //antennaPins = PIN_open(&antennaState, antennaConfig);
        }
        else if (events & RF_GlobalEventRadioSetup) {
            // > Set pin output value manually
            PINCC26XX_setOutputValue(CONFIG_RF_STANDARD_PA, 0); // Low
            PINCC26XX_setOutputValue(CONFIG_RF_HIGH_PA, 0); // Low
            PINCC26XX_setOutputValue(CONFIG_RF_STANDARD_PA, 1); // High
        }
        else if (events & RF_GlobalEventRadioPowerDown) {
            PINCC26XX_setOutputValue(CONFIG_RF_STANDARD_PA, 0); // Low
            PINCC26XX_setOutputValue(CONFIG_RF_HIGH_PA, 0); // Low
    
            // > Mux pin to be driven/controlled by the RF Core
            // > (RFC GPIO0 is here only used as an example)
            //PINCC26XX_setMux(antennaPins, CONFIG_RF_STANDARD_PA, PINCC26XX_MUX_RFC_GPO0);
    
            // > Mux pin to be controlled manually (i.e. release RF Core control)
            PINCC26XX_setMux(antennaPins, CONFIG_RF_STANDARD_PA, PINCC26XX_MUX_GPIO);
            PINCC26XX_setMux(antennaPins, CONFIG_RF_HIGH_PA, PINCC26XX_MUX_GPIO);
        }
    
    /*
     *  ======== rfDriverCallback ========
     *  Handle events triggered by the RF driver for custom / application specific behavior.
     */
    void rfDriverCallback(RF_Handle client, RF_GlobalEvent events, void *arg)
    {
        if(events & RF_GlobalEventInit) {
            // Perform action for this event
        }
        else if (events & RF_GlobalEventRadioPowerDown) {
            // Perform action for this event
        }
        else if (events & RF_GlobalEventRadioSetup) {
            // Perform action for this event
        }
    
        rfDriverCallbackAntennaSwitching(client, events, arg);
    
    }

    特定于第三个项目的更改

    • 删除其中一个 PIN_OPEN() 函数调用。 在工程中切换到 SysConfig 配置后、必须进行更改。 调用该函数时、微控制器会挂起、因为它使用的引脚已在 SysConfig 生成的文件(即 ti_drivers_config.c)中打开
    • /*
       *  ======== Power_enableTCXO ========
       *
       * This is a dummy plug added to avoid having to create a new tirtos project. 
       * This way there is one common tirtos for many projects.
       */
      void Power_enableTCXO(bool turnOn)
      {
          ;
      }
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    第三个项目带来了一个我熟悉的问题,这已经解决了第二个项目。 当设备在发射后接收时,它具有非常小的范围 — 大约一米。 与之通信的器件中的 RSSI 水平非常好、在 LAUCPAD LP-EM-CC1312PSIP 上的 RSSI 不优于–90dB。 温度补偿确实尚未实现、但我认为无关紧要、因为器件工作频率的差异仅为 6kHz。


    此问题是否可能与发送和接收之间的不同时间间隔有关?
    我仔细地比较了这两个项目、目前我没有想到其他想法。