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.

[参考译文] CC1310:双向通信存在一些问题。

Guru**** 2487275 points


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

https://e2e.ti.com/support/wireless-connectivity/sub-1-ghz-group/sub-1-ghz/f/sub-1-ghz-forum/1177249/cc1310-some-issue-about-two-way-communication

器件型号:CC1310

大家好、

以下是客户的请求:

当器件不向外部发送数据时、是否有任何方法使其处于接收模式、并且在所有其他时间都处于发送模式?

客户 已制作 了每5分钟向传感器发送数据的设备、但现在他希望无线修改其频段和地址、因此当不向外部发送数据时、需要将其调谐为接收模式、 但是 、一旦它被调整为接收模式、它将进入一个环路、并且不能再成为传输模式

您可以帮助检查此案例吗? 谢谢。

此致、                                                         

Nick

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

    答案是肯定的,但如果不知道客户是如何实施的,就不可能知道为什么不能正常工作…

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

    请提供有关您使用的 SDK、堆栈(如果有)、SDK 中的代码示例以及在 RX 和 TX 之间修改的设置的详细信息。

    还需要有关如何完成更改的详细信息。

    Siri

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

    您好 Siri,

    SDK 是 simplelink_cc13x0_sdk_1_30_00_06、 不使用堆栈、

    发送参数:

    rfc_CMD_PROP_TX_t RF_cmdPropTx =
    {
    .commandNo = 0x3801,
    .status = 0x0000,
    .pNextOp = 0, // INSERT APPLICABLE POINTER: (uint8_t*)&xxx
    .startTime = 0x00000000,
    .startTrigger.triggerType = 0x0,
    .startTrigger.bEnaCmd = 0x0,
    .startTrigger.triggerNo = 0x0,
    .startTrigger.pastTrig = 0x0,
    .condition.rule = 0x1,
    .condition.nSkip = 0x0,
    .pktConf.bFsOff = 0x0,
    .pktConf.bUseCrc = 0x1,
    .pktConf.bVarLen = 0x1,
    .pktLen = 0x14,
    .syncWord = 0x930B51DE,
    .pPkt = 0 
    };

    接收参数:

    rfc_CMD_PROP_RX_t RF_cmdPropRx =
    {
    .commandNo = 0x3802,
    .status = 0x0000,
    .pNextOp = 0, 
    .startTime = 0x00000000,
    .startTrigger.triggerType = 0x0,
    .startTrigger.bEnaCmd = 0x0,
    .startTrigger.triggerNo = 0x0,
    .startTrigger.pastTrig = 0x0,
    .condition.rule = 0x1,
    .condition.nSkip = 0x0,
    .pktConf.bFsOff = 0x0,
    .pktConf.bRepeatOk = 0x0,
    .pktConf.bRepeatNok = 0x0,
    .pktConf.bUseCrc = 0x1,
    .pktConf.bVarLen = 0x1,
    .pktConf.bChkAddress = 0x0,
    .pktConf.endType = 0x0,
    .pktConf.filterOp = 0x0,
    .rxConf.bAutoFlushIgnored = 0x0,
    .rxConf.bAutoFlushCrcErr = 0x0,
    .rxConf.bIncludeHdr = 0x1,
    .rxConf.bIncludeCrc = 0x0,
    .rxConf.bAppendRssi = 0x0,
    .rxConf.bAppendTimestamp = 0x0,
    .rxConf.bAppendStatus = 0x1,
    .syncWord = 0x930B51DE,
    .maxPktLen = 0xFF,
    .address0 = 0xAA,
    .address1 = 0xBB,
    .endTrigger.triggerType = 0x1,
    .endTrigger.bEnaCmd = 0x0,
    .endTrigger.triggerNo = 0x0,
    .endTrigger.pastTrig = 0x0,
    .endTime = 0x00000000,
    .pQueue = 0,
    .pOutput = 0 
    };

    此致、                                                         

    Nick

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

    首先、他们为什么要使用这样的旧 SDK? 如果他们刚刚开始开发、则应使用最新的 SDK (4.20)

    我仍然不知道他们在开始时使用了哪些示例以及他们在代码中执行了什么操作。 它们停留在哪个循环中、不同射频命令的状态是什么?

    在 RX 和 TX 之间切换时、没有需要特别注意的事项。 只要使用 TX 命令完成无线电、您就可以发送 RX 命令、反之亦然。

    如果它们需要在 RX 和 TX 之间更改参数频率、则需要执行新的 CMF_SF。 如果他们更改1MHz 的频率模式、他们还需要更改设置命令。 为了确保新的 setup 命令生效、需要先关闭射频代码、然后再重新启动。

    请查看以下内容以供参考:

    (+) CC1310:CC1310示例。 最终程序用户更改频率。 -低于1GHz 论坛-低于1GHz - TI E2E 支持论坛

    如果他们有问题、他们应该首先尝试获得一个简单的测试程序、以便能够完成他们想要执行的任何操作。 使用 rfPacketRX 和 rfPacketTX 示例作为起点。

    如果他们无法使其正常工作、我们应该可以轻松地进行测试、并尝试找出他们的错误。

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

    您好、Siri、

    以下是客户的进一步请求:

    如以下程序中所述、是什么导致 RF_runCmd 函数执行的参数始终进入接收模式且不能跳出:

    static void rxTaskFunction(UArg arg0, UArg arg1)
    {
    
    set_colFreq();
    
    RF_Params_init(&rfParams);
    
    if (RFQueue_defineQueue(&dataQueue, rxDataEntryBuffer,
    sizeof(rxDataEntryBuffer),
    NUM_DATA_ENTRIES,
    MAX_LENGTH + NUM_APPENDED_BYTES))
    {
    /* Failed to allocate space for all data entries */
    while (1)
    ;
    }
    
    /* Modify CMD_PROP_RX command for application needs */
    RF_cmdPropRx.pQueue = &dataQueue; /* Set the Data Entity queue for received data */
    RF_cmdPropRx.rxConf.bAutoFlushIgnored = 1; /* Discard ignored packets from Rx queue */
    RF_cmdPropRx.rxConf.bAutoFlushCrcErr = 1; /* Discard packets with CRC error from Rx queue */
    RF_cmdPropRx.maxPktLen = MAX_LENGTH; /* Implement packet length filtering to avoid PROP_ERROR_RXBUF */
    RF_cmdPropRx.pktConf.bRepeatOk = 1;
    RF_cmdPropRx.pktConf.bRepeatNok = 1;
    RF_cmdPropRx.pOutput = (uint8_t*)&rxStatistics; //将接收结构体赋给协议接收结构体,便于接收过程中查看接收状态及信息
    
    /* 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);
    /* Enter RX mode and stay forever in RX */
    RF_runCmd(rfHandle, (RF_Op*) &RF_cmdPropRx, RF_PriorityNormal, &callback,
    IRQ_RX_ENTRY_DONE);
    
    while (1)
    ;
    }

    rf_runCmd (rfHandle、(rf_Op*)&rf_cmdPropRx、rf_PriorityNormal、&callback、
    IRQ_RX_Entry_Done);是程序当前以接收模式进入并执行以下接收参数的循环:

    rfc_CMD_PROP_RX_t RF_cmdPropRx =
    {
    .commandNo = 0x3802,
    .status = 0x0000,
    .pNextOp = 0, // INSERT APPLICABLE POINTER: (uint8_t*)&xxx
    .startTime = 0x00000000,
    .startTrigger.triggerType = 0x0,
    .startTrigger.bEnaCmd = 0x0,
    .startTrigger.triggerNo = 0x0,
    .startTrigger.pastTrig = 0x0,
    .condition.rule = 0x1,
    .condition.nSkip = 0x0,
    .pktConf.bFsOff = 0x0,
    .pktConf.bRepeatOk = 0x0,
    .pktConf.bRepeatNok = 0x0,
    .pktConf.bUseCrc = 0x1,
    .pktConf.bVarLen = 0x1,
    .pktConf.bChkAddress = 0x0,
    .pktConf.endType = 0x0,
    .pktConf.filterOp = 0x0,
    .rxConf.bAutoFlushIgnored = 0x0,
    .rxConf.bAutoFlushCrcErr = 0x0,
    .rxConf.bIncludeHdr = 0x1,
    .rxConf.bIncludeCrc = 0x0,
    .rxConf.bAppendRssi = 0x0,
    .rxConf.bAppendTimestamp = 0x0,
    .rxConf.bAppendStatus = 0x1,
    .syncWord = 0x930B51DE,
    .maxPktLen = 0xFF,
    .address0 = 0xAA,
    .address1 = 0xBB,
    .endTrigger.triggerType = 0x1,
    .endTrigger.bEnaCmd = 0x0,
    .endTrigger.triggerNo = 0x0,
    .endTrigger.pastTrig = 0x0,
    .endTime = 0x00000000,
    .pQueue = 0, // INSERT APPLICABLE POINTER: (dataQueue_t*)&xxx
    .pOutput = 0 // INSERT APPLICABLE POINTER: (uint8_t*)&xxx
    };

    此致、                                                         

    Nick

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

    在上面的设置中、位重复模式被启用:

    rf_cmdPropRx.pktConf.bRepeatOk = 1;
    rf_cmdPropRx.pktConf.bRepeatNok = 1;

    这意味着对讲机将永远不会退出 RX 模式(运行命令永远不会返回)、除非出现错误(没有更多可用的数据条目等)。

    运行命令正在阻止、因此使用 POST 将使代码进入 while 循环。 但是、除非出现错误或应用程序调用 cancel 命令、否则 RX 不会终止。

    Siri

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

    您好、Siri、

    客户发现代码中的两个参数等于0、不等于1。

    RF_cmdPropRx.pktConf.bRepeatOk = 0;
    RF_cmdPropRx.pktConf.bRepeatNok = 0;

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

    就像我在近两周前写的:

    "如果他们有问题、他们应该首先尝试获得一个简单的测试程序、以便能够完成他们想要做的任何事情。 使用 rfPacketRX 和 rfPacketTX 示例作为起点。

    如果他们不能使其正常工作、我们应该很容易地进行测试、并尝试找出他们的错误。"

    我们需要最终重现问题、以便能够帮助他们。 关于它们所做工作的位和信息片段是不够的。

    Siri