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.

[参考译文] LAUNCHXL-CC1312R1:修改 PHY 类型后、rfUARTBridge 演示工作异常

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

https://e2e.ti.com/support/wireless-connectivity/bluetooth-group/bluetooth/f/bluetooth-forum/1457320/launchxl-cc1312r1-rfuartbridge-demo-works-abnormally-after-phy-type-are-modified

器件型号:LAUNCHXL-CC1312R1

工具与软件:

您好!

我正在开发 rfUARTBridge 演示 SDK 7_41_00_17 消息流 LAUNCHXL-CC1312R1 .  会自动重置 50kbps、25kHz 偏差、2-GFSK、100kHz RX 带宽 工作正常。 但是此配置的速率不能满足我的需求、因此我需要更改为  200kbps、100kHz 偏差、2-GFSK、273kHz RX 带宽。  修改后、接收器只能接收数据一次并看到红灯亮起、串行端口打印接收到的数据。 当发送端再次发射时、接收端不做出反应。

下面是我的一些参数:

和 rfUARTBridge.syscfg

/**
 * These arguments were used when this file was generated. They will be automatically applied on subsequent loads
 * via the GUI or CLI. Run CLI with '--help' for additional information on how to override these arguments.
 * @cliArgs --board "/ti/boards/CC1312R1_LAUNCHXL" --rtos "tirtos7" --product "simplelink_cc13xx_cc26xx_sdk@7.41.00.17"
 * @versions {"tool":"1.20.0+3587"}
 */

/**
 * Import the modules used in this configuration.
 */
const CCFG        = scripting.addModule("/ti/devices/CCFG");
const custom      = scripting.addModule("/ti/devices/radioconfig/custom");
const rfdesign    = scripting.addModule("/ti/devices/radioconfig/rfdesign");
const GPIO        = scripting.addModule("/ti/drivers/GPIO");
const GPIO1       = GPIO.addInstance();
const GPIO2       = GPIO.addInstance();
const RF          = scripting.addModule("/ti/drivers/RF");
const UART2       = scripting.addModule("/ti/drivers/UART2");
const UART21      = UART2.addInstance();
const Settings    = scripting.addModule("/ti/posix/tirtos/Settings");
const BIOS        = scripting.addModule("/ti/sysbios/BIOS");
const Event       = scripting.addModule("/ti/sysbios/knl/Event");
const Idle        = scripting.addModule("/ti/sysbios/knl/Idle", {}, false);
const Idle2       = Idle.addInstance();
const Mailbox     = scripting.addModule("/ti/sysbios/knl/Mailbox");
const Error       = scripting.addModule("/ti/sysbios/runtime/Error");
const SysCallback = scripting.addModule("/ti/sysbios/runtime/SysCallback");
const Timestamp   = scripting.addModule("/ti/sysbios/runtime/Timestamp");

/**
 * Write custom configuration values to the imported modules.
 */
CCFG.enableBootloader        = true;
CCFG.dioBootloaderBackdoor   = 13;
CCFG.levelBootloaderBackdoor = "Active low";
CCFG.ccfgTemplate.$name      = "ti_devices_CCFG_CCFGCC26XXTemplate0";

custom.prop8                                              = ["custom868"];
custom.radioConfigcustom868.carrierFrequency              = 868.0000;
custom.radioConfigcustom868.txPower                       = "10";
custom.radioConfigcustom868.$name                         = "RF_Custom_Setting";
custom.radioConfigcustom868.phyType868                    = "2gfsk200kbps100dev868";
custom.radioConfigcustom868.whitening                     = "No whitening";
custom.radioConfigcustom868.packetLengthRx                = 255;
custom.radioConfigcustom868.codeExportConfig.$name        = "ti_devices_radioconfig_code_export_param0";
custom.radioConfigcustom868.codeExportConfig.useMulti     = true;
custom.radioConfigcustom868.codeExportConfig.symGenMethod = "Legacy";
custom.radioConfigcustom868.codeExportConfig.cmdList_prop = ["cmdFs","cmdPropRadioDivSetup","cmdPropRx","cmdPropTx"];

GPIO1.$hardware = system.deviceData.board.components.LED_RED;
GPIO1.$name     = "CONFIG_GPIO_RLED";

GPIO2.$hardware = system.deviceData.board.components.LED_GREEN;
GPIO2.$name     = "CONFIG_GPIO_GLED";

UART21.$name               = "CONFIG_UART2_0";
UART21.$hardware           = system.deviceData.board.components.XDS110UART;
UART21.txPinInstance.$name = "CONFIG_PIN_UART_TX";
UART21.rxPinInstance.$name = "CONFIG_PIN_UART_RX";

BIOS.assertsEnabled = false;
BIOS.heapBaseAddr   = "__primary_heap_start__";
BIOS.heapEndAddr    = "__primary_heap_end__";

const Clock      = scripting.addModule("/ti/sysbios/knl/Clock", {}, false);
Clock.tickPeriod = 10;

const Timer = scripting.addModule("/ti/sysbios/family/arm/cc26xx/Timer", {}, false);

Idle2.$name   = "powerIdle";
Idle2.idleFxn = "Power_idleFunc";

const Semaphore            = scripting.addModule("/ti/sysbios/knl/Semaphore", {}, false);
Semaphore.supportsPriority = false;

const Swi         = scripting.addModule("/ti/sysbios/knl/Swi", {}, false);
Swi.numPriorities = 6;

const Task             = scripting.addModule("/ti/sysbios/knl/Task", {}, false);
Task.checkStackFlag    = false;
Task.defaultStackSize  = 512;
Task.idleTaskStackSize = 512;
Task.numPriorities     = 6;

Error.policy       = "Error_SPIN";
Error.printDetails = false;

const System           = scripting.addModule("/ti/sysbios/runtime/System", {}, false);
System.abortFxn        = "System_abortSpin";
System.exitFxn         = "System_exitSpin";
System.extendedFormats = "%f";
System.supportModule   = "SysCallback";

/**
 * Pinmux solution for unlocked pins/peripherals. This ensures that minor changes to the automatic solver in a future
 * version of the tool will not impact the pinmux you originally saw.  These lines can be completely deleted in order to
 * re-solve from scratch.
 */
GPIO1.gpioPin.$suggestSolution     = "boosterpack.39";
GPIO2.gpioPin.$suggestSolution     = "boosterpack.40";
UART21.uart.$suggestSolution       = "UART0";
UART21.uart.txPin.$suggestSolution = "boosterpack.4";
UART21.uart.rxPin.$suggestSolution = "boosterpack.3";
Timer.rtc.$suggestSolution         = "RTC0";

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

    顺便说一下、当我使用 Smart RF 连接使用相同的参数修改连接时、接收器可能会接收到不正确的数据

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

    200kbps PHY 正在使用高级命令、因为它使用802.15.4g 数据包格式、并且您不能仅仅选择导出正常的 RX 和 TX 命令(它们设置不正确)。

    如果您要使用200kbps PHY、则需要导入高级 RX 和 TX 命令、然后重新编写代码以使用这些命令。

    您可以选择更改高级命令以使用与标准 RX 和 TX 命令相同的数据包格式进行 snd 和 receive、也可以选择保留默认的802.15.4g 数据包格式、并重新编写代码以支持这一点。

    我强烈建议您查看 SDK 中的 rfDiagnostics 示例。

    如果您查看  Radio_Builtin_ et52xTM 和 Radio_Builtin_ 384etRx 函数中的 radio.c 文件、您将看到需要如何更改命令和/或代码以支持"正常"数据包格式(TEST_RF_PERF)或802.15.4g 数据包格式(TEST_STUDIO_COMPL):

    Siri

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

    你好、Siri、

    感谢您的帮助。 参考了 rfDiagnostics 示例并在 rfUARTBridge 演示中修改一些数据包格式后、我终于解决了问题。  顺便提一下、我还有其他问题要问您。

    我想使用射频回调来执行该操作   rf_runCmd -->发送数据包--> txCallback (发送数据包完成)-->发送数据包...  课程、 您似乎已经回答过类似这样的问题: https://e2e.ti.com/support/wireless-connectivity/sub-1-ghz-group/sub-1-ghz/f/sub-1-ghz-forum/1104727/cc1311p3-how-to-setup-rf-callback-function?tisearch=e2e-sitesearch&keymatch=RF_runCmd%25252525252525252520callback#

    尽管我已经查看过 RF_runCmd ()函数和 RF_CMD Core_Events、但我在实际使用中仍然有问题。 回调函数似乎未按预期进入。 这种现象是绿光翻转一次、红光不翻转

    下面是我的函数:

    /* Callback function called when data is received via RF
     * Function copies the data in a variable, packet, and sets packetRxCb */
    void TxOnRFcallback(RF_Handle h, RF_CmdHandle ch, RF_EventMask e)
    {
    
             if (e & RF_EventTxDone)
        {
            GPIO_toggle(CONFIG_GPIO_RLED);
           packetTxCb = PACKET_TXED;
        }
    }
    
    void *mainThread(void *arg0)
    {
        packetTxCb = PACKET_TXED;
    
        RF_Params rfParams;
        RF_Params_init(&rfParams);
    
        GPIO_setConfig(CONFIG_GPIO_RLED, GPIO_CFG_OUT_STD | GPIO_CFG_OUT_LOW);
        GPIO_write(CONFIG_GPIO_RLED, CONFIG_GPIO_LED_OFF);
    
        GPIO_setConfig(CONFIG_GPIO_GLED, GPIO_CFG_OUT_STD | GPIO_CFG_OUT_LOW);
        GPIO_write(CONFIG_GPIO_GLED, CONFIG_GPIO_LED_OFF);
    
    
        RF_cmdPropTxAdv.pPkt = packet;
        RF_cmdPropTxAdv.pktLen = sizeof(packet);
        RF_cmdPropTxAdv.startTrigger.triggerType = TRIG_NOW;
    
    
    
        /* Request access to the radio */
        rfHandle = RF_open(&rfObject, &RF_prop, (RF_RadioSetup*)&RF_cmdPropRadioDivSetup, &rfParams);
    
        /* Set the frequency */
        RF_postCmd(rfHandle,(RF_Op*)&RF_cmdFs, RF_PriorityNormal, NULL, 0);
    
    
                                                               0 );
    
        while(1)
        {
            if(packetTxCb)
            {
                /* config pactet */
                
                /*Send packet*/
                RF_runCmdSafe(rfHandle, (RF_Op*)&RF_cmdPropTxAdv, RF_PriorityNormal, &TxOnRFcallback, RF_EventTxDone | RF_EventLastCmdDone);
                /* Toggle green led to indicate TX */
                GPIO_toggle(CONFIG_GPIO_GLED);
    
                 packetTxCb = NO_PACKET;
    
            }
    }
    
    

    可以帮助我解决我的问题吗?

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

    我不确定您在代码中执行的具体操作及其原因、我无法 在射频驱动器中的任何位置找到 RF_runCmdSafe。

    运行专有命令时、下面的列表显示了 产生的中断:

    如您所见、您无法使用 RF_EventTxDone、因为它仅用于 BLE 和 IEEE。

    如果您使用的是 RF_EventLastCmdDone、您将在完成 TX 命令后获得回调。

    我在 对 rfUartBrigde 示例进行以下修改后测试了以下内容:

    static void ReceivedOnRFcallback(RF_Handle h, RF_CmdHandle ch, RF_EventMask e);
    static void ReceiveonUARTcallback(UART2_Handle handle, void *buffer, size_t count, void *userArg, int_fast16_t status);
    static void Txcallback(RF_Handle h, RF_CmdHandle ch, RF_EventMask e); // Added callback function for TX
    

    if (bytesReadCount != 0)
    {
        /*The packet length is set to the number of
         * bytes read by UART2_read() */
        RF_cmdPropTx.pktLen = bytesReadCount;
        int i;
        for (i=0; i<bytesReadCount; i++)
        {
            uint8_t* buffer8 = (uint8_t*) input;
            packet[i] = buffer8[i];
        }
    
        /*Cancel the ongoing command*/
        RF_cancelCmd(rfHandle, rfPostHandle, 1);
    
        /*Send packet*/
        RF_runCmd(rfHandle, (RF_Op*)&RF_cmdPropTx, RF_PriorityNormal, &Txcallback, RF_EventLastCmdDone); // Added callback
    
        /* Toggle green led to indicate TX */
        GPIO_toggle(CONFIG_GPIO_GLED);
    
        /* Resume RF RX */
        rfPostHandle = RF_postCmd(rfHandle, (RF_Op*)&RF_cmdPropRx, RF_PriorityNormal, &ReceivedOnRFcallback, RF_EventRxEntryDone);
        bytesReadCount = 0;
    
        /* Resume UART read */
        status = UART2_read(uart, &input, bytesToRead, NULL);
    }
    

    void Txcallback(RF_Handle h, RF_CmdHandle ch, RF_EventMask e)
    {
        if (e & RF_EventLastCmdDone)
        {
            GPIO_toggle(CONFIG_GPIO_RLED);
        }
    }

    Siri

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

    你好、Siri、

    rf_runCmdSafe 函数是 rfDiagnostics 示例的 radio.c 中的函数。  感谢您让我确认我应该使用 RF_EventLastCmdDone 提供一个路径。  
    至于我的问题、我还发现原因是、我修改了 packetTxCb、并且处于一个不合适的位置、这会导致环路永远不会进入